Skip to content

Commit 4208c19

Browse files
committed
finalized stack benchmarks, working on additions to queue ADT
1 parent d7f3bc6 commit 4208c19

File tree

6 files changed

+271
-2
lines changed

6 files changed

+271
-2
lines changed

benchmark/stacks.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
let { stacks } = require('./../index');
22
let ptime = require('quick-ptime');
33
const Table = require('cli-table');
4+
var ProgressBar = require('progress');
5+
6+
let bar;
47

58
const standard = async (name, func, value) => {
9+
// console.log("Running...", name);
610
const result = [
711
(await ptime.runFunctionRounds(
812
`${name} 100000`,
@@ -36,6 +40,7 @@ const standard = async (name, func, value) => {
3640

3741
let str = {};
3842
str[name] = result
43+
bar.tick();
3944
return str;
4045
}
4146

@@ -44,7 +49,8 @@ const run = async () => {
4449
let linkedStack = new stacks.LinkedStack();
4550
let uArrayStack = new stacks.UArrayStack();
4651
let bArrayStack = new stacks.BArrayStack(12100000);
47-
52+
bar = new ProgressBar(':bar :percent :elapseds total, completes in :etas', { total: 10 });
53+
bar.tick();
4854
results.push(
4955
await standard("LinkedStack Push", linkedStack.push.bind(linkedStack), 1),
5056
await standard("UArrayStack Push", uArrayStack.push.bind(uArrayStack), 1),

lib/queues.js

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
/**
2+
* Implements an unbounded queue using the linked list method.
3+
*/
14
class LinkedQueue {
25
constructor () {
36
this.first = {};
@@ -50,6 +53,9 @@ class LinkedQueue {
5053
}
5154
}
5255

56+
/**
57+
* Implements an unbounded queue using an array.
58+
*/
5359
class UArrayQueue {
5460
constructor () {
5561
this.queue = [];
@@ -76,9 +82,19 @@ class UArrayQueue {
7682
}
7783
}
7884

79-
class BArrayQueue {
85+
/**
86+
* Implements a bounded queue using an array with the floating front method.
87+
*/
88+
class BFltArrayQueue {
8089
constructor () {
90+
const DEFAULT_SIZE = 100;
91+
let use = !!size ? size : DEFAULT_SIZE;
8192
this.queue = [];
93+
for(let i = 0; i < use; i++) {
94+
this.queue[i] = null;
95+
}
96+
this.front = 0;
97+
this.rear = null;
8298
}
8399

84100
enqueue(data) {

lib/stacks.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
/**
2+
* Implements an unbounded stack using a linked list
3+
*/
14
class LinkedStack {
25
constructor () {
36
this.topNode = null;
@@ -35,6 +38,9 @@ class LinkedStack {
3538
}
3639
}
3740

41+
/**
42+
* Implements an unbounded stack using an array.
43+
*/
3844
class UArrayStack {
3945
constructor() {
4046
this.stack = [];
@@ -61,6 +67,9 @@ class UArrayStack {
6167
}
6268
}
6369

70+
/**
71+
* Implements a bounded stack using an array.
72+
*/
6473
class BArrayStack {
6574
constructor(size) {
6675
const DEFAULT_SIZE = 100;

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
},
1919
"dependencies": {
2020
"cli-table": "^0.3.1",
21+
"progress": "^2.0.3",
2122
"quick-ptime": "^1.0.0"
2223
}
2324
}

yarn-error.log

Lines changed: 232 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,232 @@
1+
Arguments:
2+
/usr/local/Cellar/node/10.11.0/bin/node /usr/local/Cellar/yarn/1.10.1/libexec/bin/yarn.js add progress...
3+
4+
PATH:
5+
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/Wireshark.app/Contents/MacOS:/Users/joseph/Library/Python/3.6/bin:/Users/joseph/go/bin:/usr/local/opt/go/libexec/bin:/Users/joseph/.cargo/bin:/Applications/Visual Studio Code.app/Contents/Resources/app/bin
6+
7+
Yarn version:
8+
1.10.1
9+
10+
Node version:
11+
10.11.0
12+
13+
Platform:
14+
darwin x64
15+
16+
Trace:
17+
Error: https://registry.yarnpkg.com/progress...: Not found
18+
at Request.params.callback [as _callback] (/usr/local/Cellar/yarn/1.10.1/libexec/lib/cli.js:61073:18)
19+
at Request.self.callback (/usr/local/Cellar/yarn/1.10.1/libexec/lib/cli.js:120166:22)
20+
at Request.emit (events.js:182:13)
21+
at Request.<anonymous> (/usr/local/Cellar/yarn/1.10.1/libexec/lib/cli.js:121138:10)
22+
at Request.emit (events.js:182:13)
23+
at IncomingMessage.<anonymous> (/usr/local/Cellar/yarn/1.10.1/libexec/lib/cli.js:121060:12)
24+
at Object.onceWrapper (events.js:273:13)
25+
at IncomingMessage.emit (events.js:187:15)
26+
at endReadableNT (_stream_readable.js:1092:12)
27+
at process._tickCallback (internal/process/next_tick.js:63:19)
28+
29+
npm manifest:
30+
{
31+
"name": "data-theory",
32+
"version": "1.0.0",
33+
"description": "A collection of data theory and structures in JavaScript.",
34+
"main": "index.js",
35+
"repository": "https://github.com/shadowcodex/data-theory.git",
36+
"author": "shadowcodex <[email protected]>",
37+
"license": "MIT",
38+
"private": false,
39+
"scripts": {
40+
"test": "npx mocha",
41+
"bench:all": "node benchmark/stacks.js && node benchmark/queues.js",
42+
"bench:stacks": "node benchmark/stacks.js",
43+
"bench:queues": "node benchmark/queues.js"
44+
},
45+
"devDependencies": {
46+
"mocha": "^5.2.0"
47+
},
48+
"dependencies": {
49+
"cli-table": "^0.3.1",
50+
"quick-ptime": "^1.0.0"
51+
}
52+
}
53+
54+
yarn manifest:
55+
No manifest
56+
57+
Lockfile:
58+
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
59+
# yarn lockfile v1
60+
61+
62+
balanced-match@^1.0.0:
63+
version "1.0.0"
64+
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
65+
integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
66+
67+
brace-expansion@^1.1.7:
68+
version "1.1.11"
69+
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
70+
integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
71+
dependencies:
72+
balanced-match "^1.0.0"
73+
concat-map "0.0.1"
74+
75+
76+
version "1.3.1"
77+
resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60"
78+
integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==
79+
80+
cli-table@^0.3.1:
81+
version "0.3.1"
82+
resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23"
83+
integrity sha1-9TsFJmqLGguTSz0IIebi3FkUriM=
84+
dependencies:
85+
colors "1.0.3"
86+
87+
88+
version "1.0.3"
89+
resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b"
90+
integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=
91+
92+
93+
version "2.15.1"
94+
resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f"
95+
integrity sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==
96+
97+
98+
version "0.0.1"
99+
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
100+
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
101+
102+
103+
version "3.1.0"
104+
resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
105+
integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
106+
dependencies:
107+
ms "2.0.0"
108+
109+
110+
version "3.5.0"
111+
resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
112+
integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==
113+
114+
115+
version "1.0.5"
116+
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
117+
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
118+
119+
fs.realpath@^1.0.0:
120+
version "1.0.0"
121+
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
122+
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
123+
124+
125+
version "7.1.2"
126+
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
127+
integrity sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==
128+
dependencies:
129+
fs.realpath "^1.0.0"
130+
inflight "^1.0.4"
131+
inherits "2"
132+
minimatch "^3.0.4"
133+
once "^1.3.0"
134+
path-is-absolute "^1.0.0"
135+
136+
137+
version "1.10.5"
138+
resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e"
139+
integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==
140+
141+
has-flag@^3.0.0:
142+
version "3.0.0"
143+
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
144+
integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
145+
146+
147+
version "1.1.1"
148+
resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
149+
integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0=
150+
151+
inflight@^1.0.4:
152+
version "1.0.6"
153+
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
154+
integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
155+
dependencies:
156+
once "^1.3.0"
157+
wrappy "1"
158+
159+
inherits@2:
160+
version "2.0.3"
161+
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
162+
integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
163+
164+
[email protected], minimatch@^3.0.4:
165+
version "3.0.4"
166+
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
167+
integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
168+
dependencies:
169+
brace-expansion "^1.1.7"
170+
171+
172+
version "0.0.8"
173+
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
174+
integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
175+
176+
177+
version "0.5.1"
178+
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
179+
integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
180+
dependencies:
181+
minimist "0.0.8"
182+
183+
mocha@^5.2.0:
184+
version "5.2.0"
185+
resolved "https://registry.yarnpkg.com/mocha/-/mocha-5.2.0.tgz#6d8ae508f59167f940f2b5b3c4a612ae50c90ae6"
186+
integrity sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==
187+
dependencies:
188+
browser-stdout "1.3.1"
189+
commander "2.15.1"
190+
debug "3.1.0"
191+
diff "3.5.0"
192+
escape-string-regexp "1.0.5"
193+
glob "7.1.2"
194+
growl "1.10.5"
195+
he "1.1.1"
196+
minimatch "3.0.4"
197+
mkdirp "0.5.1"
198+
supports-color "5.4.0"
199+
200+
201+
version "2.0.0"
202+
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
203+
integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
204+
205+
once@^1.3.0:
206+
version "1.4.0"
207+
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
208+
integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
209+
dependencies:
210+
wrappy "1"
211+
212+
path-is-absolute@^1.0.0:
213+
version "1.0.1"
214+
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
215+
integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
216+
217+
quick-ptime@^1.0.0:
218+
version "1.0.0"
219+
resolved "https://registry.yarnpkg.com/quick-ptime/-/quick-ptime-1.0.0.tgz#506c0191849e29f02be89a39f5b3d595b043ceae"
220+
integrity sha512-Wx1rzsGxgrd+KjPvNUGlfYPE+xkpbejrTNc9ePXwvCEV6W4L0Cc8/i/J+ay5alCt/6yVAHAIFz7H/kMwU+K6sA==
221+
222+
223+
version "5.4.0"
224+
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54"
225+
integrity sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==
226+
dependencies:
227+
has-flag "^3.0.0"
228+
229+
wrappy@1:
230+
version "1.0.2"
231+
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
232+
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=

yarn.lock

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,11 @@ path-is-absolute@^1.0.0:
157157
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
158158
integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
159159

160+
progress@^2.0.3:
161+
version "2.0.3"
162+
resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
163+
integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
164+
160165
quick-ptime@^1.0.0:
161166
version "1.0.0"
162167
resolved "https://registry.yarnpkg.com/quick-ptime/-/quick-ptime-1.0.0.tgz#506c0191849e29f02be89a39f5b3d595b043ceae"

0 commit comments

Comments
 (0)