11"use strict" ;
22
3- var _ = require ( 'lodash' ) ;
4- var fs = require ( 'fs' ) ;
5-
6- var files = fs . readdirSync ( "./results" )
7- . filter ( file => file . endsWith ( '.txt' ) ) ;
3+ const _ = require ( 'lodash' ) ;
4+ const dots = require ( 'dot' ) . process ( {
5+ path : './'
6+ } ) ;
7+ const fs = require ( 'fs' ) ;
88
9- let results = new Map ( ) ;
9+ let results = { } ;
1010let frameworks = [ ] ;
11+ let benchmarks = [ ] ;
1112
12- files . map ( f => { return { name : f , data : fs . readFileSync ( "./results/" + f , { encoding :"utf-8" } ) } ; } )
13- . forEach ( ( { name, data} ) => {
14- let n = name . substring ( 0 , name . length - 4 ) ;
15- results . set ( n , Function ( "return " + data ) ( ) ) ;
16- frameworks . push ( n ) ;
17- } ) ;
13+ fs . readdirSync ( './results' ) . filter ( file => file . endsWith ( '.json' ) ) . forEach ( name => {
14+ let data = JSON . parse ( fs . readFileSync ( './results/' + name , {
15+ encoding :'utf-8'
16+ } ) ) ;
17+
18+ frameworks . push ( data . framework ) ;
19+ benchmarks . push ( data . benchmark ) ;
20+
21+ results [ data . framework ] = results [ data . framework ] || { } ;
22+ results [ data . framework ] [ data . benchmark ] = data ;
23+ } ) ;
1824
19- let benchmarks = results . values ( ) . next ( ) . value . results . map ( r => r . benchmark ) ;
25+ frameworks = _ . uniq ( frameworks ) ;
26+ benchmarks = _ . uniq ( benchmarks ) ;
2027
21- let getValue = ( framework , benchmark ) => results . get ( framework ) . results . find ( r => r . benchmark === benchmark ) . avg ;
28+ let getValue = ( framework , benchmark ) => results [ framework ] && results [ framework ] [ benchmark ] ;
2229
23- var dots = require ( 'dot' ) . process ( {
24- path : './'
25- } ) ;
26-
27- var factors = frameworks . map ( f => 1.0 ) ;
30+ let factors = frameworks . map ( f => 1.0 ) ;
2831
29- var benches = [ ] ;
32+ let benches = [ ] ;
3033benchmarks . forEach ( benchmark => {
31- var bench = {
34+ let bench = {
3235 name : benchmark ,
3336 tests : [ ]
3437 } ;
3538
36- var values = [ ] ;
39+ let values = [ ] ;
3740 frameworks . forEach ( framework => {
3841 values . push ( getValue ( framework , benchmark ) ) ;
3942 } ) ;
40- var sorted = values . slice ( 0 ) . sort ( function ( a , b ) {
41- return a - b ;
42- } ) ;
43- var min = sorted [ 0 ] ;
44- var max = sorted [ sorted . length - 1 ] ;
4543
46- var top1 = min * 1.33 ;
47- var top3 = min * 2.33 ;
48-
49- while ( top1 >= max ) {
50- top1 *= 0.8 ;
51- top3 *= 0.8 ;
52- }
53- while ( top3 >= max ) {
54- top3 *= 0.8 ;
44+ let sorted = _ . compact ( values ) . map ( data => {
45+ return data . geometricMean ;
46+ } ) . sort ( ( a , b ) => a - b ) ;
47+
48+ let min , top1 , top3 ;
49+
50+ if ( sorted . length ) {
51+ min = sorted [ 0 ] ;
52+
53+ if ( sorted . length === 1 ) {
54+ top1 = min ;
55+ }
56+ else {
57+ let min = sorted [ 1 ] ;
58+ let max = sorted [ sorted . length - 1 ] ;
59+
60+ top1 = min * 1.33 ;
61+ top3 = min * 2.33 ;
62+
63+ while ( top1 >= max ) {
64+ top1 *= 0.8 ;
65+ top3 *= 0.8 ;
66+ }
67+ while ( top3 >= max ) {
68+ top3 *= 0.8 ;
69+ }
70+ }
5571 }
5672
5773 _ . forEach ( values , function ( value , idx ) {
58- let factor = Math . max ( 16 , value ) / Math . max ( 16 , min ) ;
59- factors [ idx ] = factors [ idx ] * factor ;
60- bench . tests . push ( {
61- value,
62- factor : factor . toPrecision ( 3 ) ,
63- class : value <= top1 ? 'top1' : value <= top3 ? 'top3' : 'top5'
64- } ) ;
74+ if ( value ) {
75+ let factor = Math . max ( 16 , value . geometricMean ) / Math . max ( 16 , min ) ;
76+ factors [ idx ] = factors [ idx ] * factor ;
77+ bench . tests . push ( {
78+ mean : value . geometricMean ,
79+ deviation : value . standardDeviation ,
80+ factor : factor . toPrecision ( 3 ) ,
81+ class : value . geometricMean <= top1 ? 'top1' : value . geometricMean <= top3 ? 'top3' : 'top5'
82+ } ) ;
83+ }
84+ else {
85+ bench . tests . push ( null ) ;
86+ }
6587 } )
6688 benches . push ( bench ) ;
6789} ) ;
@@ -72,7 +94,7 @@ let geomMeans = factors.map(f => {
7294} ) ;
7395
7496fs . writeFileSync ( './table.html' , dots . table ( {
75- frameworks : [ '' ] . concat ( frameworks ) . map ( framework => framework . replace ( '-v' , ' v' ) . replace ( '/dist' , '' ) ) ,
97+ frameworks : [ '' ] . concat ( frameworks ) . map ( framework => framework . replace ( '-v' , ' v' ) ) ,
7698 benches,
7799 geomMeans
78100} ) , {
0 commit comments