@@ -2,195 +2,70 @@ let { stacks } = require('./../index');
22let ptime = require ( 'quick-ptime' ) ;
33const Table = require ( 'cli-table' ) ;
44
5-
6- // setup stacks
7- let linkedStack = new stacks . LinkedStack ( ) ;
8- let uArrayStack = new stacks . UArrayStack ( ) ;
9- let bArrayStack = new stacks . BArrayStack ( 1100001 ) ;
10-
11- /**
12- * PUSH STUFF
13- */
14-
15- // push 100,000 items onto the stack
16- ptime . setTime ( 'stack100000' ) ;
17- for ( let i = 0 ; i < 100000 ; i ++ ) {
18- linkedStack . push ( 'value' ) ;
19- }
20- let stackTime = ptime . elapsedTime ( 'stack100000' ) ;
21- // console.log("Push 100,000 Linked Stack timing:", ptime.elapsedTime('stack100000').formatted);
22-
23- // push 1,000,000 items onto the stack
24- ptime . setTime ( 'stack1000000' ) ;
25- for ( let i = 0 ; i < 1000000 ; i ++ ) {
26- linkedStack . push ( 'value' ) ;
27- }
28- let mStackTime = ptime . elapsedTime ( 'stack1000000' ) ;
29- // console.log("Push 100,000 Linked Stack timing:", ptime.elapsedTime('stack100000').formatted);
30-
31- // push 1 item onto the stack
32- ptime . setTime ( 'stack1' ) ;
33- for ( let i = 0 ; i < 1 ; i ++ ) {
34- linkedStack . push ( 'value' ) ;
35- }
36- let sStackTime = ptime . elapsedTime ( 'stack1' ) ;
37- // console.log("Push 100,000 Linked Stack timing:", ptime.elapsedTime('stack100000').formatted);
38-
39-
40-
41-
42-
43- // push 100,000 items onto the stack
44- ptime . setTime ( 'ustack100000' ) ;
45- for ( let i = 0 ; i < 100000 ; i ++ ) {
46- uArrayStack . push ( 'value' ) ;
47- }
48- let ustackTime = ptime . elapsedTime ( 'ustack100000' ) ;
49- // console.log("Push 100,000 Linked Stack timing:", ptime.elapsedTime('stack100000').formatted);
50-
51- // push 1,000,000 items onto the stack
52- ptime . setTime ( 'ustack1000000' ) ;
53- for ( let i = 0 ; i < 1000000 ; i ++ ) {
54- uArrayStack . push ( 'value' ) ;
55- }
56- let umStackTime = ptime . elapsedTime ( 'ustack1000000' ) ;
57- // console.log("Push 100,000 Linked Stack timing:", ptime.elapsedTime('stack100000').formatted);
58-
59- // push 1 item onto the stack
60- ptime . setTime ( 'ustack1' ) ;
61- for ( let i = 0 ; i < 1 ; i ++ ) {
62- uArrayStack . push ( 'value' ) ;
63- }
64- let usStackTime = ptime . elapsedTime ( 'ustack1' ) ;
65- // console.log("Push 100,000 Linked Stack timing:", ptime.elapsedTime('stack100000').formatted);
66-
67-
68-
69-
70- // push 100,000 items onto the stack
71- ptime . setTime ( 'bstack100000' ) ;
72- for ( let i = 0 ; i < 100000 ; i ++ ) {
73- bArrayStack . push ( 'value' ) ;
74- }
75- let bstackTime = ptime . elapsedTime ( 'bstack100000' ) ;
76- // console.log("Push 100,000 Linked Stack timing:", ptime.elapsedTime('stack100000').formatted);
77-
78- // push 1,000,000 items onto the stack
79- ptime . setTime ( 'bstack1000000' ) ;
80- for ( let i = 0 ; i < 1000000 ; i ++ ) {
81- bArrayStack . push ( 'value' ) ;
82- }
83- let bmStackTime = ptime . elapsedTime ( 'bstack1000000' ) ;
84- // console.log("Push 100,000 Linked Stack timing:", ptime.elapsedTime('stack100000').formatted);
85-
86- // push 1 item onto the stack
87- ptime . setTime ( 'bstack1' ) ;
88- for ( let i = 0 ; i < 1 ; i ++ ) {
89- bArrayStack . push ( 'value' ) ;
90- }
91- let bsStackTime = ptime . elapsedTime ( 'bstack1' ) ;
92- // console.log("Push 100,000 Linked Stack timing:", ptime.elapsedTime('stack100000').formatted);
93-
94-
95-
96-
97- /**
98- * POP STUFF
99- */
100-
101- // push 100,000 items onto the stack
102- ptime . setTime ( 'pstack100000' ) ;
103- for ( let i = 0 ; i < 100000 ; i ++ ) {
104- linkedStack . pop ( 'value' ) ;
105- }
106- let pstackTime = ptime . elapsedTime ( 'pstack100000' ) ;
107- // console.log("Push 100,000 Linked Stack timing:", ptime.elapsedTime('stack100000').formatted);
108-
109- // push 1,000,000 items onto the stack
110- ptime . setTime ( 'pstack1000000' ) ;
111- for ( let i = 0 ; i < 1000000 ; i ++ ) {
112- linkedStack . pop ( 'value' ) ;
113- }
114- let pmStackTime = ptime . elapsedTime ( 'pstack1000000' ) ;
115- // console.log("Push 100,000 Linked Stack timing:", ptime.elapsedTime('stack100000').formatted);
116-
117- // push 1 item onto the stack
118- ptime . setTime ( 'pstack1' ) ;
119- for ( let i = 0 ; i < 1 ; i ++ ) {
120- linkedStack . pop ( 'value' ) ;
121- }
122- let psStackTime = ptime . elapsedTime ( 'pstack1' ) ;
123- // console.log("Push 100,000 Linked Stack timing:", ptime.elapsedTime('stack100000').formatted);
124-
125-
126-
127- // push 100,000 items onto the stack
128- ptime . setTime ( 'upstack100000' ) ;
129- for ( let i = 0 ; i < 100000 ; i ++ ) {
130- uArrayStack . pop ( 'value' ) ;
131- }
132- let upstackTime = ptime . elapsedTime ( 'upstack100000' ) ;
133- // console.log("Push 100,000 Linked Stack timing:", ptime.elapsedTime('stack100000').formatted);
134-
135- // push 1,000,000 items onto the stack
136- ptime . setTime ( 'upstack1000000' ) ;
137- for ( let i = 0 ; i < 1000000 ; i ++ ) {
138- uArrayStack . pop ( 'value' ) ;
139- }
140- let upmStackTime = ptime . elapsedTime ( 'upstack1000000' ) ;
141- // console.log("Push 100,000 Linked Stack timing:", ptime.elapsedTime('stack100000').formatted);
142-
143- // push 1 item onto the stack
144- ptime . setTime ( 'upstack1' ) ;
145- for ( let i = 0 ; i < 1 ; i ++ ) {
146- uArrayStack . pop ( 'value' ) ;
147- }
148- let upsStackTime = ptime . elapsedTime ( 'upstack1' ) ;
149- // console.log("Push 100,000 Linked Stack timing:", ptime.elapsedTime('stack100000').formatted);
150-
151-
152-
153-
154-
155- // push 100,000 items onto the stack
156- ptime . setTime ( 'bpstack100000' ) ;
157- for ( let i = 0 ; i < 100000 ; i ++ ) {
158- bArrayStack . pop ( 'value' ) ;
159- }
160- let bpstackTime = ptime . elapsedTime ( 'bpstack100000' ) ;
161- // console.log("Push 100,000 Linked Stack timing:", ptime.elapsedTime('stack100000').formatted);
162-
163- // push 1,000,000 items onto the stack
164- ptime . setTime ( 'bpstack1000000' ) ;
165- for ( let i = 0 ; i < 1000000 ; i ++ ) {
166- bArrayStack . pop ( 'value' ) ;
167- }
168- let bpmStackTime = ptime . elapsedTime ( 'bpstack1000000' ) ;
169- // console.log("Push 100,000 Linked Stack timing:", ptime.elapsedTime('stack100000').formatted);
170-
171- // push 1 item onto the stack
172- ptime . setTime ( 'bpstack1' ) ;
173- for ( let i = 0 ; i < 1 ; i ++ ) {
174- bArrayStack . pop ( 'value' ) ;
175- }
176- let bpsStackTime = ptime . elapsedTime ( 'bpstack1' ) ;
177- // console.log("Push 100,000 Linked Stack timing:", ptime.elapsedTime('stack100000').formatted);
178-
179-
180- /// Output results
181-
182- const table = new Table ( {
183- head : [ 'Stack Operation' , '100,000 items' , '1,000,000 items' , '1 item' ]
184- } ) ;
185-
186-
187- table . push (
188- [ 'Linked List Stack Push' , stackTime . formatted , mStackTime . formatted , sStackTime . formatted ] ,
189- [ 'Unbounded Array Stack Push' , ustackTime . formatted , umStackTime . formatted , usStackTime . formatted ] ,
190- [ 'Bounded Array Stack Push' , bstackTime . formatted , bmStackTime . formatted , bsStackTime . formatted ] ,
191- [ 'Linked List Stack Pop' , pstackTime . formatted , pmStackTime . formatted , psStackTime . formatted ] ,
192- [ 'Unbounded Array Stack Pop' , upstackTime . formatted , upmStackTime . formatted , upsStackTime . formatted ] ,
193- [ 'Bounded Array Stack Pop' , bpstackTime . formatted , bpmStackTime . formatted , bpsStackTime . formatted ] ,
194- ) ;
195-
196- console . log ( table . toString ( ) ) ;
5+ const standard = async ( name , func , value ) => {
6+ const result = [
7+ ( await ptime . runFunctionRounds (
8+ `${ name } 100000` ,
9+ func ,
10+ [ value ] ,
11+ 100000 ,
12+ true
13+ ) ) . formatted ,
14+ ( await ptime . runFunctionRounds (
15+ `${ name } 1000000` ,
16+ func ,
17+ [ value ] ,
18+ 1000000 ,
19+ true
20+ ) ) . formatted ,
21+ ( await ptime . runFunctionRounds (
22+ `${ name } 10000000` ,
23+ func ,
24+ [ value ] ,
25+ 10000000 ,
26+ true
27+ ) ) . formatted ,
28+ ( await ptime . runFunctionAverage (
29+ `${ name } 1` ,
30+ func ,
31+ [ value ] ,
32+ 1000000 ,
33+ true
34+ ) ) . formatted
35+ ]
36+
37+ let str = { } ;
38+ str [ name ] = result
39+ return str ;
40+ }
41+
42+ const run = async ( ) => {
43+ let results = [ ]
44+ let linkedStack = new stacks . LinkedStack ( ) ;
45+ let uArrayStack = new stacks . UArrayStack ( ) ;
46+ let bArrayStack = new stacks . BArrayStack ( 12100000 ) ;
47+
48+ results . push (
49+ await standard ( "LinkedStack Push" , linkedStack . push . bind ( linkedStack ) , 1 ) ,
50+ await standard ( "UArrayStack Push" , uArrayStack . push . bind ( uArrayStack ) , 1 ) ,
51+ await standard ( "BArrayStack Push" , bArrayStack . push . bind ( bArrayStack ) , 1 ) ,
52+ await standard ( "LinkedStack Top" , linkedStack . top . bind ( linkedStack ) , 1 ) ,
53+ await standard ( "UArrayStack Top" , uArrayStack . top . bind ( uArrayStack ) , 1 ) ,
54+ await standard ( "BArrayStack Top" , bArrayStack . top . bind ( bArrayStack ) , 1 ) ,
55+ await standard ( "LinkedStack Pop" , linkedStack . pop . bind ( linkedStack ) , 1 ) ,
56+ await standard ( "UArrayStack Pop" , uArrayStack . pop . bind ( uArrayStack ) , 1 ) ,
57+ await standard ( "BArrayStack Pop" , bArrayStack . pop . bind ( bArrayStack ) , 1 ) ,
58+ )
59+
60+ return results ;
61+ }
62+
63+ run ( ) . then ( value => {
64+ const table = new Table ( {
65+ head : [ 'Stack Operation' , '100,000 items' , '1,000,000 items' , '10,000,000 items' , '1 item AVG' ]
66+ } ) ;
67+
68+ table . push ( ...value ) ;
69+
70+ console . log ( table . toString ( ) )
71+ } ) ;
0 commit comments