Skip to content

Commit d7f3bc6

Browse files
committed
updated benchmarking for stacks
1 parent d1931c8 commit d7f3bc6

File tree

3 files changed

+100
-198
lines changed

3 files changed

+100
-198
lines changed

benchmark/stacks.js

Lines changed: 67 additions & 192 deletions
Original file line numberDiff line numberDiff line change
@@ -2,195 +2,70 @@ let { stacks } = require('./../index');
22
let ptime = require('quick-ptime');
33
const 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+
});

lib/queues.js

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
class Queue {
1+
class LinkedQueue {
22
constructor () {
33
this.first = {};
44
this.last = {};
@@ -50,7 +50,7 @@ class Queue {
5050
}
5151
}
5252

53-
class ArrayQueue {
53+
class UArrayQueue {
5454
constructor () {
5555
this.queue = [];
5656
}
@@ -76,7 +76,34 @@ class ArrayQueue {
7676
}
7777
}
7878

79+
class BArrayQueue {
80+
constructor () {
81+
this.queue = [];
82+
}
83+
84+
enqueue(data) {
85+
86+
}
87+
88+
dequeue() {
89+
90+
}
91+
92+
peek() {
93+
94+
}
95+
96+
length() {
97+
98+
}
99+
100+
isEmpty() {
101+
102+
}
103+
}
104+
79105
module.exports = {
80-
Queue,
81-
ArrayQueue
106+
LinkedQueue,
107+
UArrayQueue,
108+
BArrayQueue
82109
}

lib/stacks.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ class LinkedStack {
88
this.topNode = {
99
value: data,
1010
prev: this.topNode
11-
};
11+
};
1212
this.length++;
1313
return this.length;
1414
}
@@ -22,7 +22,7 @@ class LinkedStack {
2222
this.length--;
2323
}
2424

25-
top() {
25+
top() {
2626
return this.topNode.value;
2727
}
2828

0 commit comments

Comments
 (0)