11/* global BigInt */
22/* eslint-disable new-cap, no-new, no-unused-expressions */
33
4- const { ZZ } = require ( '..' ) ;
4+ const ArgumentParser = require ( 'argparse' ) . ArgumentParser ;
55var benchmark = require ( 'benchmark' ) ;
66var crypto = require ( 'crypto' ) ;
7- var bn = require ( 'bn.js' ) ;
8- var bignum ;
7+ var XorShift128Plus = require ( 'xorshift.js' ) . XorShift128Plus ;
8+
9+ const { ZZ , DEFAULT_DISPLAY_BASE , DEFAULT_REPRESENTATION_BASE } = require ( '..' ) ;
10+ const bn = require ( 'bn.js' ) ;
11+ let bignum ;
912try {
1013 bignum = require ( 'bignum' ) ;
1114} catch ( err ) {
1215 console . log ( 'Load bignum error: ' + err . message . split ( '\n' ) [ 0 ] ) ;
1316}
14- var sjcl = require ( 'eccjs' ) . sjcl . bn ;
15- var bigi = require ( 'bigi' ) ;
16- var BigInteger = require ( 'js-big-integer' ) . BigInteger ;
17- var JSBI = require ( 'jsbi' ) ;
18- var SilentMattBigInteger = require ( 'biginteger' ) . BigInteger ;
19- var XorShift128Plus = require ( 'xorshift.js' ) . XorShift128Plus ;
20- var benchmarks = [ ] ;
21-
22- var selfOnly = process . env . SELF_ONLY ;
23- var seed = process . env . SEED || crypto . randomBytes ( 16 ) . toString ( 'hex' ) ;
24- console . log ( 'Seed: ' + seed ) ;
25- var prng = new XorShift128Plus ( seed ) ;
17+ const sjcl = require ( 'eccjs' ) . sjcl . bn ;
18+ const bigi = require ( 'bigi' ) ;
19+ const BigInteger = require ( 'js-big-integer' ) . BigInteger ;
20+ const JSBI = require ( 'jsbi' ) ;
21+ const SilentMattBigInteger = require ( 'biginteger' ) . BigInteger ;
22+
23+ const parser = new ArgumentParser ( ) ;
24+ parser . addArgument ( [ '-s' , '--seed' ] , { defaultValue : process . env . SEED || crypto . randomBytes ( 16 ) . toString ( 'hex' ) } ) ;
25+ parser . addArgument ( [ '-l' , '--libs' ] , { defaultValue : '.' } ) ;
26+ parser . addArgument ( [ '-b' , '--benches' ] , { defaultValue : '.' } ) ;
27+ parser . addArgument ( [ '-f' , '--fast' ] , { action : 'storeTrue' } ) ;
28+ const args = parser . parseArgs ( ) ;
29+ const seed = args . seed ;
30+ const filter = new RegExp ( args . libs , 'i' ) ;
31+ const re = new RegExp ( args . benches , 'i' ) ;
32+ const fast = args . fast ;
33+
34+ const benchmarks = [ ] ;
35+
36+ console . log ( 'args:' , args ) ;
37+ console . log ( 'DEFAULT_DISPLAY_BASE:' , DEFAULT_DISPLAY_BASE ) ;
38+ console . log ( 'DEFAULT_REPRESENTATION_BASE:' , DEFAULT_REPRESENTATION_BASE ) ;
39+
40+ const prng = new XorShift128Plus ( seed ) ;
2641
2742const NFIXTURES = 25 ;
2843var fixtures = [ ] ;
@@ -31,13 +46,12 @@ function findexRefresh () {
3146 if ( ++ findex === fixtures . length ) findex = 0 ;
3247}
3348
34- const filter = process . argv [ 3 ] ? new RegExp ( process . argv [ 3 ] , 'i' ) : / ./ ;
35-
3649const k256 = 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f' ;
3750
3851function add ( op , ...args ) {
52+ const key = op + '-' + args . join ( '-' ) ;
3953 benchmarks . push ( {
40- name : op ,
54+ name : key ,
4155 start : function start ( ) {
4256 var suite = new benchmark . Suite ( ) ;
4357
@@ -48,35 +62,31 @@ function add (op, ...args) {
4862 if ( name === 'BigInt' && typeof BigInt === 'undefined' ) return ;
4963 if ( name === 'bignum' && bignum === undefined ) return ;
5064
51- if ( ! selfOnly || name === '@aureooms/js-integer' ) {
52- const opFn = fns [ name ] [ op ] ;
53- if ( ! opFn ) return ;
54- if ( ! ( opFn instanceof Function ) ) throw new Error ( `opFN is not a function: ${ opFN } ` ) ;
55- const fixture = fixtures [ findex ] [ name ] ;
56-
57- if ( args . length === 1 ) {
58- const key = op + '-' + args [ 0 ] ;
59- const x = fixture . args [ args [ 0 ] ] ;
60- const outs = fixture . outs ;
61- const testFn = ( ) => outs [ key ] = opFn ( x ) ;
62- suite . add ( name + '#' + key , testFn , {
63- onStart : findexRefresh ,
64- onCycle : findexRefresh
65- } ) ;
66- }
67- else if ( args . length === 2 ) {
68- const key = op + '-' + args [ 0 ] + '-' + args [ 1 ] ;
69- const a = fixture . args [ args [ 0 ] ] ;
70- const b = fixture . args [ args [ 1 ] ] ;
71- const outs = fixture . outs ;
72- const testFn = ( ) => outs [ key ] = opFn ( a , b ) ;
73- suite . add ( name + '#' + key , testFn , {
74- onStart : findexRefresh ,
75- onCycle : findexRefresh
76- } ) ;
77- }
78- else throw new Error ( 'Too many args.' ) ;
65+ const opFn = fns [ name ] [ op ] ;
66+ if ( ! opFn ) return ;
67+ if ( ! ( opFn instanceof Function ) ) throw new Error ( `opFN is not a function: ${ opFN } ` ) ;
68+ const fixture = fixtures [ findex ] [ name ] ;
69+
70+ if ( args . length === 1 ) {
71+ const x = fixture . args [ args [ 0 ] ] ;
72+ const outs = fixture . outs ;
73+ const testFn = ( ) => outs [ key ] = opFn ( x ) ;
74+ suite . add ( name + '#' + key , testFn , {
75+ onStart : findexRefresh ,
76+ onCycle : findexRefresh
77+ } ) ;
78+ }
79+ else if ( args . length === 2 ) {
80+ const a = fixture . args [ args [ 0 ] ] ;
81+ const b = fixture . args [ args [ 1 ] ] ;
82+ const outs = fixture . outs ;
83+ const testFn = ( ) => outs [ key ] = opFn ( a , b ) ;
84+ suite . add ( name + '#' + key , testFn , {
85+ onStart : findexRefresh ,
86+ onCycle : findexRefresh
87+ } ) ;
7988 }
89+ else throw new Error ( 'Too many args.' ) ;
8090 } ) ;
8191
8292 suite
@@ -95,7 +105,6 @@ function add (op, ...args) {
95105}
96106
97107function start ( ) {
98- var re = process . argv [ 2 ] ? new RegExp ( process . argv [ 2 ] , 'i' ) : / ./ ;
99108
100109 benchmarks
101110 . filter ( function ( b ) {
@@ -106,7 +115,7 @@ function start () {
106115 } ) ;
107116}
108117
109- if ( / f a s t / i . test ( process . argv [ 4 ] ) ) {
118+ if ( fast ) {
110119 console . log ( 'Running in fast mode...' ) ;
111120 benchmark . options . minTime = 0.3 ;
112121 benchmark . options . maxTime = 1 ;
0 commit comments