Skip to content

Commit 3f167c5

Browse files
committed
fixed stacks benchmark to be size independant
1 parent 7359956 commit 3f167c5

File tree

2 files changed

+98
-57
lines changed

2 files changed

+98
-57
lines changed

benchmark/README.md

Lines changed: 21 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -5,33 +5,31 @@ These are custom ran benchmarks testing implementations timing on insertion, del
55
## Stacks
66

77
```csharp
8-
┌──────────────────┬────────────────────┬─────────────────────┬─────────────────────┬────────────────
9-
Stack Operation100,000 items1,000,000 items 10,000,000 items1 item AVG
10-
├──────────────────┼────────────────────┼─────────────────────┼─────────────────────┼────────────────
11-
LinkedStack Push+ 0s 72ms 604378ns+ 0s 490ms 392994ns+ 0s 679ms 443796ns+ 0s 0ms 380ns
12-
├──────────────────┼────────────────────┼─────────────────────┼─────────────────────┼────────────────
13-
UArrayStack Push+ 0s 4ms 152081ns + 0s 35ms 273276ns+ 0s 366ms 739960ns+ 0s 0ms 412ns
14-
├──────────────────┼────────────────────┼─────────────────────┼─────────────────────┼────────────────
15-
BArrayStack Push+ 0s 3ms 151240ns+ 0s 14ms 50745ns+ 0s 121ms 911861ns+ 0s 0ms 414ns
16-
├──────────────────┼────────────────────┼─────────────────────┼─────────────────────┼────────────────
17-
LinkedStack Top+ 0s 2ms 692099ns+ 0s 17ms 247035ns+ 0s 140ms 399996ns+ 0s 0ms 399ns
18-
├──────────────────┼────────────────────┼─────────────────────┼─────────────────────┼────────────────
19-
UArrayStack Top+ 0s 2ms 480592ns+ 0s 15ms 283810ns+ 0s 132ms 680935ns+ 0s 0ms 403ns
20-
├──────────────────┼────────────────────┼─────────────────────┼─────────────────────┼────────────────
21-
BArrayStack Top+ 0s 2ms 994832ns+ 0s 16ms 72632ns+ 0s 131ms 158011ns+ 0s 0ms 400ns
22-
├──────────────────┼────────────────────┼─────────────────────┼─────────────────────┼────────────────
23-
LinkedStack Pop+ 0s 3ms 780284ns+ 0s 18ms 598744ns + 0s 168ms 865081ns+ 0s 0ms 421ns
24-
├──────────────────┼────────────────────┼─────────────────────┼─────────────────────┼────────────────
25-
UArrayStack Pop+ 0s 3ms 538130ns+ 0s 17ms 898436ns+ 0s 143ms 24024ns+ 0s 0ms 410ns
26-
├──────────────────┼────────────────────┼─────────────────────┼─────────────────────┼────────────────
27-
BArrayStack Pop+ 0s 3ms 1401ns + 0s 16ms 620513ns+ 0s 148ms 407324ns+ 0s 0ms 398ns
28-
└──────────────────┴────────────────────┴─────────────────────┴─────────────────────┴────────────────
8+
┌──────────────────┬────────────────────┬─────────────────────┐
9+
Stack Operation100,000 items1,000,000 items
10+
├──────────────────┼────────────────────┼─────────────────────┤
11+
LinkedStack Push+ 0s 15ms 701111ns+ 0s 103ms 578697ns
12+
├──────────────────┼────────────────────┼─────────────────────┤
13+
UArrayStack Push+ 0s 33ms 674506ns + 0s 44ms 682102ns
14+
├──────────────────┼────────────────────┼─────────────────────┤
15+
BArrayStack Push+ 0s 3ms 318560ns+ 0s 13ms 455307ns
16+
├──────────────────┼────────────────────┼─────────────────────┤
17+
LinkedStack Top+ 0s 2ms 589174ns+ 0s 16ms 513144ns
18+
├──────────────────┼────────────────────┼─────────────────────┤
19+
UArrayStack Top+ 0s 3ms 367356ns+ 0s 16ms 241029ns
20+
├──────────────────┼────────────────────┼─────────────────────┤
21+
BArrayStack Top+ 0s 3ms 168186ns+ 0s 14ms 461727ns
22+
├──────────────────┼────────────────────┼─────────────────────┤
23+
LinkedStack Pop+ 0s 5ms 66436ns + 0s 28ms 798899ns
24+
├──────────────────┼────────────────────┼─────────────────────┤
25+
UArrayStack Pop+ 0s 3ms 528070ns+ 0s 3ms 528070ns
26+
├──────────────────┼────────────────────┼─────────────────────┤
27+
BArrayStack Pop+ 0s 2ms 697348ns + 0s 2ms 697348ns
28+
└──────────────────┴────────────────────┴─────────────────────┘
2929
```
3030

3131
## Queues
3232

33-
10,000,000 and 1 Average were omitted due to the time it takes to run those tests on the inefficient queue system (one most taught by js professionals sadly) (I let it run for 2 hours on 10,000,000 dequeues and it never completed...);
34-
3533
```csharp
3634

3735
```

benchmark/stacks.js

Lines changed: 77 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -5,48 +5,91 @@ var ProgressBar = require('progress');
55

66
let bar;
77

8-
const standard = async (name, func, value) => {
9-
// console.log("Running...", name);
10-
const result = [
11-
(await ptime.runFunctionRounds(`${name} 100000`, func, [value], 100000, true)).formatted,
12-
(await ptime.runFunctionRounds(`${name} 1000000`, func, [value], 1000000, true)).formatted,
13-
(await ptime.runFunctionRounds(`${name} 10000000`, func, [value], 10000000, true)).formatted,
14-
(await ptime.runFunctionAverage(`${name} 1`, func, [value], 1000000, true)).formatted,
15-
];
16-
17-
let str = {};
18-
str[name] = result;
19-
bar.tick();
20-
return str;
21-
};
22-
23-
const run = async () => {
24-
bar = new ProgressBar(':bar :percent :elapseds total, completes in :etas', { total: 11 });
25-
let results = [];
26-
let linkedStack = new stacks.LinkedStack();
27-
let uArrayStack = new stacks.UArrayStack();
28-
bar.tick();
29-
let bArrayStack = new stacks.BArrayStack(12100000);
30-
31-
bar.tick();
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} push ${count}`, iADT.push.bind(iADT), [1], count, true)).formatted
16+
);
17+
bar.tick({
18+
token1: `${name} push ${count}`,
19+
});
3220
results.push(
33-
await standard('LinkedStack Push', linkedStack.push.bind(linkedStack), 1),
34-
await standard('UArrayStack Push', uArrayStack.push.bind(uArrayStack), 1),
35-
await standard('BArrayStack Push', bArrayStack.push.bind(bArrayStack), 1),
36-
await standard('LinkedStack Top', linkedStack.top.bind(linkedStack), 1),
37-
await standard('UArrayStack Top', uArrayStack.top.bind(uArrayStack), 1),
38-
await standard('BArrayStack Top', bArrayStack.top.bind(bArrayStack), 1),
39-
await standard('LinkedStack Pop', linkedStack.pop.bind(linkedStack), 1),
40-
await standard('UArrayStack Pop', uArrayStack.pop.bind(uArrayStack), 1),
41-
await standard('BArrayStack Pop', bArrayStack.pop.bind(bArrayStack), 1)
21+
(await ptime.runFunctionRounds(`${name} top ${count}`, iADT.top.bind(iADT), [1], count, true)).formatted
4222
);
23+
bar.tick({
24+
token1: `${name} top ${count}`,
25+
});
26+
results.push(
27+
(await ptime.runFunctionRounds(`${name} pop ${count}`, iADT.pop.bind(iADT), [1], count, true)).formatted
28+
);
29+
bar.tick({
30+
token1: `${name} pop ${count}`,
31+
});
4332

4433
return results;
4534
};
4635

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['LinkedStack Push'] = [];
45+
results['UArrayStack Push'] = [];
46+
results['BArrayStack Push'] = [];
47+
48+
results['LinkedStack Top'] = [];
49+
results['UArrayStack Top'] = [];
50+
results['BArrayStack Top'] = [];
51+
52+
results['LinkedStack Pop'] = [];
53+
results['UArrayStack Pop'] = [];
54+
results['BArrayStack Pop'] = [];
55+
56+
bar.tick({
57+
token1: 'result sets setup',
58+
});
59+
60+
const l100000 = await testStandard('LinkedStack', stacks.LinkedStack, 100000);
61+
const l1000000 = await testStandard('LinkedStack', stacks.LinkedStack, 1000000);
62+
results['LinkedStack Push'].push(l100000[0], l1000000[0]);
63+
results['LinkedStack Top'].push(l100000[1], l1000000[1]);
64+
results['LinkedStack Pop'].push(l100000[2], l1000000[2]);
65+
66+
const u100000 = await testStandard('UArrayStack', stacks.UArrayStack, 100000);
67+
const u1000000 = await testStandard('UArrayStack', stacks.UArrayStack, 1000000);
68+
results['UArrayStack Push'].push(u100000[0], u1000000[0]);
69+
results['UArrayStack Top'].push(u100000[1], u1000000[1]);
70+
results['UArrayStack Pop'].push(u100000[2], u100000[2]);
71+
72+
const b100000 = await testStandard('BArrayStack', stacks.BArrayStack, 100000);
73+
const b1000000 = await testStandard('BArrayStack', stacks.BArrayStack, 1000000);
74+
results['BArrayStack Push'].push(b100000[0], b1000000[0]);
75+
results['BArrayStack Top'].push(b100000[1], b1000000[1]);
76+
results['BArrayStack Pop'].push(b100000[2], b100000[2]);
77+
78+
let items = [];
79+
80+
let keys = Object.keys(results);
81+
for (let i = 0; i < keys.length; i++) {
82+
let item = {};
83+
item[keys[i]] = results[keys[i]];
84+
items.push(item);
85+
}
86+
87+
return items;
88+
};
89+
4790
run().then(value => {
4891
const table = new Table({
49-
head: ['Stack Operation', '100,000 items', '1,000,000 items', '10,000,000 items', '1 item AVG'],
92+
head: ['Stack Operation', '100,000 items', '1,000,000 items'],
5093
});
5194

5295
table.push(...value);

0 commit comments

Comments
 (0)