11let { queues } = require ( './../index' ) ;
22let ptime = require ( 'quick-ptime' ) ;
3+ const Table = require ( 'cli-table' ) ;
4+ var ProgressBar = require ( 'progress' ) ;
35
6+ let bar ;
47
5- // setup stacks
6- let queue = new queues . Queue ( ) ;
7- let arrayQueue = new queues . ArrayQueue ( ) ;
8-
9- // enqueue 100,000 items into the queue
10- ptime . setTime ( 'queue100000' ) ;
11- for ( let i = 0 ; i < 100000 ; i ++ ) {
12- queue . enqueue ( 'value' ) ;
13- }
14- console . log ( "Enqueue 100,000 Queue timing:" , ptime . elapsedTime ( 'queue100000' ) . formatted ) ;
15-
16- ptime . setTime ( 'arrayqueue100000' ) ;
17- for ( let i = 0 ; i < 100000 ; i ++ ) {
18- arrayQueue . enqueue ( 'value' ) ;
19- }
20- console . log ( "Enqueue 100,000 Array Queue timing:" , ptime . elapsedTime ( 'arrayqueue100000' ) . formatted ) ;
21-
22- // dequeue 100,000 items into the queue
23- ptime . setTime ( 'dqueue100000' ) ;
24- for ( let i = 0 ; i < 100000 ; i ++ ) {
25- queue . dequeue ( ) ;
26- }
27- console . log ( "Dequeue 100,000 Queue timing:" , ptime . elapsedTime ( 'dqueue100000' ) . formatted ) ;
28-
29- ptime . setTime ( 'darrayqueue100000' ) ;
30- for ( let i = 0 ; i < 100000 ; i ++ ) {
31- arrayQueue . dequeue ( ) ;
32- }
33- console . log ( "Dequeue 100,000 Array Queue timing:" , ptime . elapsedTime ( 'darrayqueue100000' ) . formatted ) ;
8+ const testStandard = async ( name , adt , count ) => {
9+ const iADT = new adt ( count ) ;
10+ bar . tick ( {
11+ token1 : `${ name } adt setup` ,
12+ } ) ;
13+ results = [ ] ;
14+ results . push (
15+ ( await ptime . runFunctionRounds ( `${ name } enqueue ${ count } ` , iADT . enqueue . bind ( iADT ) , [ 1 ] , count , true ) ) . formatted
16+ ) ;
17+ bar . tick ( {
18+ token1 : `${ name } enqueue ${ count } ` ,
19+ } ) ;
20+ results . push (
21+ ( await ptime . runFunctionRounds ( `${ name } peek ${ count } ` , iADT . peek . bind ( iADT ) , [ 1 ] , count , true ) ) . formatted
22+ ) ;
23+ bar . tick ( {
24+ token1 : `${ name } peek ${ count } ` ,
25+ } ) ;
26+ results . push (
27+ ( await ptime . runFunctionRounds ( `${ name } dequeue ${ count } ` , iADT . dequeue . bind ( iADT ) , [ 1 ] , count , true ) ) . formatted
28+ ) ;
29+ bar . tick ( {
30+ token1 : `${ name } dequeue ${ count } ` ,
31+ } ) ;
32+
33+ return results ;
34+ } ;
35+
36+ const run = async ( ) => {
37+ bar = new ProgressBar ( ':bar Last Completed :token1 :percent :elapseds total, completes in :etas' , { total : 34 } ) ;
38+ bar . tick ( {
39+ token1 : 'progress bar' ,
40+ } ) ;
41+
42+ let results = { } ;
43+
44+ results [ 'LinkedQueue Enqueue' ] = [ ] ;
45+ results [ 'UArrayQueue Enqueue' ] = [ ] ;
46+ results [ 'BFltArrayQueue Enqueue' ] = [ ] ;
47+ results [ 'BFixArrayQueue Enqueue' ] = [ ] ;
48+
49+ results [ 'LinkedQueue Peek' ] = [ ] ;
50+ results [ 'UArrayQueue Peek' ] = [ ] ;
51+ results [ 'BFltArrayQueue Peek' ] = [ ] ;
52+ results [ 'BFixArrayQueue Peek' ] = [ ] ;
53+
54+ results [ 'LinkedQueue Dequeue' ] = [ ] ;
55+ results [ 'UArrayQueue Dequeue' ] = [ ] ;
56+ results [ 'BFltArrayQueue Dequeue' ] = [ ] ;
57+ results [ 'BFixArrayQueue Dequeue' ] = [ ] ;
58+
59+ bar . tick ( {
60+ token1 : 'result sets setup' ,
61+ } ) ;
62+
63+ const lQueue100000 = await testStandard ( 'LinkedQueue' , queues . LinkedQueue , 100000 ) ;
64+ const lQueue1000000 = await testStandard ( 'LinkedQueue' , queues . LinkedQueue , 1000000 ) ;
65+ // const lQueue10000000 = await testStandard('LinkedQueue', queues.LinkedQueue, 10000000);
66+ results [ 'LinkedQueue Enqueue' ] . push ( lQueue100000 [ 0 ] , lQueue1000000 [ 0 ] ) ;
67+ results [ 'LinkedQueue Peek' ] . push ( lQueue100000 [ 1 ] , lQueue1000000 [ 1 ] ) ;
68+ results [ 'LinkedQueue Dequeue' ] . push ( lQueue100000 [ 2 ] , lQueue1000000 [ 2 ] ) ;
69+
70+ const bfltQueue100000 = await testStandard ( 'BFltArrayQueue' , queues . BFltArrayQueue , 100000 ) ;
71+ const bfltQueue1000000 = await testStandard ( 'BFltArrayQueue' , queues . BFltArrayQueue , 1000000 ) ;
72+ // const bfltQueue10000000 = await testStandard('BFltArrayQueue', queues.BFltArrayQueue, 10000000);
73+ results [ 'BFltArrayQueue Enqueue' ] . push ( bfltQueue100000 [ 0 ] , bfltQueue1000000 [ 0 ] ) ;
74+ results [ 'BFltArrayQueue Peek' ] . push ( bfltQueue100000 [ 1 ] , bfltQueue1000000 [ 1 ] ) ;
75+ results [ 'BFltArrayQueue Dequeue' ] . push ( bfltQueue100000 [ 2 ] , bfltQueue1000000 [ 2 ] ) ;
76+
77+ const uQueue100000 = await testStandard ( 'UArrayQueue' , queues . UArrayQueue , 100000 ) ;
78+ const uQueue1000000 = await testStandard ( 'UArrayQueue' , queues . UArrayQueue , 1000000 ) ;
79+ // const uQueue10000000 = await testStandard('UArrayQueue', queues.UArrayQueue, 10000000);
80+ results [ 'UArrayQueue Enqueue' ] . push ( uQueue100000 [ 0 ] , uQueue1000000 [ 0 ] ) ;
81+ results [ 'UArrayQueue Peek' ] . push ( uQueue100000 [ 1 ] , uQueue1000000 [ 1 ] ) ;
82+ results [ 'UArrayQueue Dequeue' ] . push ( uQueue100000 [ 2 ] , uQueue1000000 [ 2 ] ) ;
83+
84+ const bfixQueue100000 = await testStandard ( 'BFixArrayQueue' , queues . BFixArrayQueue , 100000 ) ;
85+ const bfixQueue1000000 = await testStandard ( 'BFixArrayQueue' , queues . BFixArrayQueue , 1000000 ) ;
86+ // const bfixQueue10000000 = await testStandard('BFixArrayQueue', queues.BFixArrayQueue, 10000000);
87+ results [ 'BFixArrayQueue Enqueue' ] . push ( bfixQueue100000 [ 0 ] , bfixQueue1000000 [ 0 ] ) ;
88+ results [ 'BFixArrayQueue Peek' ] . push ( bfixQueue100000 [ 1 ] , bfixQueue1000000 [ 1 ] ) ;
89+ results [ 'BFixArrayQueue Dequeue' ] . push ( bfixQueue100000 [ 2 ] , bfixQueue1000000 [ 2 ] ) ;
90+
91+ let items = [ ] ;
92+
93+ let keys = Object . keys ( results ) ;
94+ for ( let i = 0 ; i < keys . length ; i ++ ) {
95+ let item = { } ;
96+ item [ keys [ i ] ] = results [ keys [ i ] ] ;
97+ items . push ( item ) ;
98+ }
99+
100+ return items ;
101+ } ;
102+
103+ run ( ) . then ( value => {
104+ const table = new Table ( {
105+ head : [ 'Queue Operation' , '100,000 items' , '1,000,000 items' ] ,
106+ } ) ;
107+
108+ table . push ( ...value ) ;
109+
110+ console . log ( '\n' ) ;
111+ console . log ( table . toString ( ) ) ;
112+ } ) ;
0 commit comments