@@ -8,6 +8,18 @@ import (
88 "yavashark_test262_runner/status"
99)
1010
11+ const (
12+ ColorGreen = "\033 [32m"
13+ ColorRed = "\033 [31m"
14+ ColorYellow = "\033 [33m"
15+ ColorBlue = "\033 [34m"
16+ ColorMagenta = "\033 [35m"
17+ ColorCyan = "\033 [36m"
18+ ColorReset = "\033 [0m"
19+ ColorBold = "\033 [1m"
20+ ColorDim = "\033 [2m"
21+ )
22+
1123type TestResults struct {
1224 TestResults []Result
1325 Passed uint32
@@ -212,7 +224,119 @@ func (tr *TestResults) Compare(other *TestResults) {
212224 printDiff ("Timeout" , tr .Timeout , other .Timeout , tr .Total )
213225 printDiff ("Parse Error" , tr .ParseError , other .ParseError , tr .Total )
214226 printDiff ("Total" , tr .Total , other .Total , tr .Total )
227+ }
228+
229+ func (tr * TestResults ) PrintResultsWithDiff (other * TestResults ) {
230+ fmt .Printf ("\n %s=== Test Results Summary ===%s\n \n " , ColorBold , ColorReset )
231+
232+ fmt .Printf ("%sCurrent Run:%s\n " , ColorBold , ColorReset )
233+ tr .printResultsLine ("Passed" , tr .Passed , tr .Total , other .Passed )
234+ tr .printResultsLine ("Failed" , tr .Failed , tr .Total , other .Failed )
235+ tr .printResultsLine ("Timeout" , tr .Timeout , tr .Total , other .Timeout )
236+ tr .printResultsLine ("Crashed" , tr .Crashed , tr .Total , other .Crashed )
237+ tr .printResultsLine ("Skipped" , tr .Skipped , tr .Total , other .Skipped )
238+ tr .printResultsLine ("Not Implemented" , tr .NotImplemented , tr .Total , other .NotImplemented )
239+ tr .printResultsLine ("Runner Error" , tr .RunnerError , tr .Total , other .RunnerError )
240+ tr .printResultsLine ("Parse Error" , tr .ParseError , tr .Total , other .ParseError )
241+ tr .printResultsLine ("Parse Success Error" , tr .ParseSuccessError , tr .Total , other .ParseSuccessError )
242+
243+ fmt .Printf ("\n %sTotal: %d%s\n " , ColorBold , tr .Total , ColorReset )
244+
245+ fmt .Printf ("\n %s=== Net Changes ===%s\n " , ColorBold , ColorReset )
246+ netPassed := int32 (tr .Passed ) - int32 (other .Passed )
247+ netFailed := int32 (tr .Failed ) - int32 (other .Failed )
248+ netTimeout := int32 (tr .Timeout ) - int32 (other .Timeout )
249+ netCrashed := int32 (tr .Crashed ) - int32 (other .Crashed )
250+
251+ if netPassed != 0 {
252+ if netPassed > 0 {
253+ fmt .Printf ("%s✓ Passed: +%d%s (gained)\n " , ColorGreen , netPassed , ColorReset )
254+ } else {
255+ fmt .Printf ("%s✗ Passed: %d%s (lost)\n " , ColorRed , netPassed , ColorReset )
256+ }
257+ }
258+
259+ if netFailed != 0 {
260+ if netFailed > 0 {
261+ fmt .Printf ("%s✗ Failed: +%d%s (gained)\n " , ColorRed , netFailed , ColorReset )
262+ } else {
263+ fmt .Printf ("%s✓ Failed: %d%s (improved)\n " , ColorGreen , netFailed , ColorReset )
264+ }
265+ }
266+
267+ if netTimeout != 0 {
268+ if netTimeout > 0 {
269+ fmt .Printf ("%s⏱ Timeout: +%d%s (gained)\n " , ColorYellow , netTimeout , ColorReset )
270+ } else {
271+ fmt .Printf ("%s✓ Timeout: %d%s (improved)\n " , ColorGreen , netTimeout , ColorReset )
272+ }
273+ }
274+
275+ if netCrashed != 0 {
276+ if netCrashed > 0 {
277+ fmt .Printf ("%s💥 Crashed: +%d%s (gained)\n " , ColorMagenta , netCrashed , ColorReset )
278+ } else {
279+ fmt .Printf ("%s✓ Crashed: %d%s (improved)\n " , ColorGreen , netCrashed , ColorReset )
280+ }
281+ }
282+
283+ // Overall summary
284+ fmt .Printf ("\n %s=== Overall Summary ===%s\n " , ColorBold , ColorReset )
285+ totalChanges := abs (netPassed ) + abs (netFailed ) + abs (netTimeout ) + abs (netCrashed )
286+ if totalChanges > 0 {
287+ fmt .Printf ("Total test status changes: %d\n " , totalChanges )
288+
289+ passedGained := 0
290+ if netPassed > 0 {
291+ passedGained = int (netPassed )
292+ }
293+ failedLost := 0
294+ if netFailed < 0 {
295+ failedLost = int (- netFailed )
296+ }
297+ improvements := passedGained + failedLost
215298
299+ if improvements > 0 {
300+ fmt .Printf ("%s↑ Improvements: %d%s\n " , ColorGreen , improvements , ColorReset )
301+ }
302+
303+ failedGained := 0
304+ if netFailed > 0 {
305+ failedGained = int (netFailed )
306+ }
307+ passedLost := 0
308+ if netPassed < 0 {
309+ passedLost = int (- netPassed )
310+ }
311+ regressions := failedGained + passedLost
312+
313+ if regressions > 0 {
314+ fmt .Printf ("%s↓ Regressions: %d%s\n " , ColorRed , regressions , ColorReset )
315+ }
316+ } else {
317+ fmt .Printf ("%sNo changes from previous run%s\n " , ColorDim , ColorReset )
318+ }
319+ }
320+
321+ func (tr * TestResults ) printResultsLine (name string , current , total , previous uint32 ) {
322+ percentage := float64 (current ) / float64 (total ) * 100
323+ diff := int32 (current ) - int32 (previous )
324+
325+ var diffStr string
326+ if diff > 0 {
327+ diffStr = fmt .Sprintf (" %s(+%d)%s" , ColorGreen , diff , ColorReset )
328+ } else if diff < 0 {
329+ diffStr = fmt .Sprintf (" %s(%d)%s" , ColorRed , diff , ColorReset )
330+ }
331+
332+ fmt .Printf (" %s: %d (%.2f%%)%s\n " , name , current , percentage , diffStr )
333+ }
334+
335+ func abs (n int32 ) int32 {
336+ if n < 0 {
337+ return - n
338+ }
339+ return n
216340}
217341
218342func printDiff (name string , n1 uint32 , n2 uint32 , total uint32 ) {
0 commit comments