uuid 2.0.2 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.json +46 -0
- package/AUTHORS +5 -0
- package/HISTORY.md +28 -0
- package/LICENSE.md +21 -2
- package/README.md +123 -101
- package/bin/uuid +50 -0
- package/index.js +8 -0
- package/lib/bytesToUuid.js +23 -0
- package/lib/rng-browser.js +33 -0
- package/lib/rng.js +10 -0
- package/lib/sha1-browser.js +85 -0
- package/lib/sha1.js +21 -0
- package/package.json +9 -27
- package/{uuid.js → v1.js} +6 -89
- package/v4.js +29 -0
- package/v5.js +42 -0
- package/.npmignore +0 -2
- package/.travis.yml +0 -5
- package/benchmark/README.md +0 -53
- package/benchmark/bench.gnu +0 -174
- package/benchmark/bench.sh +0 -34
- package/benchmark/benchmark-native.c +0 -34
- package/benchmark/benchmark.js +0 -84
- package/benchmark/package.json +0 -9
- package/misc/compare.js +0 -62
- package/misc/perf.js +0 -102
- package/rng-browser.js +0 -31
- package/rng.js +0 -4
- package/test/mocha.opts +0 -1
- package/test/test.js +0 -105
package/package.json
CHANGED
|
@@ -1,46 +1,28 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "uuid",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "3.1.0",
|
|
4
|
+
"description": "RFC4122 (v1, v4, and v5) UUIDs",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"uuid",
|
|
7
7
|
"guid",
|
|
8
8
|
"rfc4122"
|
|
9
9
|
],
|
|
10
|
-
"author": "Robert Kieffer <robert@broofa.com>",
|
|
11
|
-
"contributors": [
|
|
12
|
-
{
|
|
13
|
-
"name": "Christoph Tavan <dev@tavan.de>",
|
|
14
|
-
"github": "https://github.com/ctavan"
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
"name": "Vincent Voyer <vincent@zeroload.net>",
|
|
18
|
-
"github": "https://github.com/vvo"
|
|
19
|
-
}
|
|
20
|
-
],
|
|
21
10
|
"license": "MIT",
|
|
22
|
-
"
|
|
11
|
+
"bin": {
|
|
12
|
+
"uuid": "./bin/uuid"
|
|
13
|
+
},
|
|
23
14
|
"devDependencies": {
|
|
24
|
-
"mocha": "1.
|
|
15
|
+
"mocha": "3.1.2"
|
|
25
16
|
},
|
|
26
17
|
"scripts": {
|
|
27
18
|
"test": "mocha test/test.js"
|
|
28
19
|
},
|
|
29
20
|
"browser": {
|
|
30
|
-
"./rng.js": "./rng-browser.js"
|
|
21
|
+
"./lib/rng.js": "./lib/rng-browser.js",
|
|
22
|
+
"./lib/sha1.js": "./lib/sha1-browser.js"
|
|
31
23
|
},
|
|
32
24
|
"repository": {
|
|
33
25
|
"type": "git",
|
|
34
|
-
"url": "https://github.com/
|
|
35
|
-
},
|
|
36
|
-
"testling": {
|
|
37
|
-
"browsers": [
|
|
38
|
-
"ie6..latest",
|
|
39
|
-
"firefox/3.6..latest",
|
|
40
|
-
"chrome/22..latest",
|
|
41
|
-
"safari/5.1..latest"
|
|
42
|
-
],
|
|
43
|
-
"harness": "mocha-tdd",
|
|
44
|
-
"files": "test/*.js"
|
|
26
|
+
"url": "https://github.com/kelektiv/node-uuid.git"
|
|
45
27
|
}
|
|
46
28
|
}
|
package/{uuid.js → v1.js}
RENAMED
|
@@ -1,52 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
// Copyright (c) 2010-2012 Robert Kieffer
|
|
4
|
-
// MIT License - http://opensource.org/licenses/mit-license.php
|
|
5
|
-
|
|
6
|
-
// Unique ID creation requires a high quality random # generator. We feature
|
|
7
|
-
// detect to determine the best RNG source, normalizing to a function that
|
|
8
|
-
// returns 128-bits of randomness, since that's what's usually required
|
|
9
|
-
var _rng = require('./rng');
|
|
10
|
-
|
|
11
|
-
// Maps for number <-> hex string conversion
|
|
12
|
-
var _byteToHex = [];
|
|
13
|
-
var _hexToByte = {};
|
|
14
|
-
for (var i = 0; i < 256; i++) {
|
|
15
|
-
_byteToHex[i] = (i + 0x100).toString(16).substr(1);
|
|
16
|
-
_hexToByte[_byteToHex[i]] = i;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
// **`parse()` - Parse a UUID into it's component bytes**
|
|
20
|
-
function parse(s, buf, offset) {
|
|
21
|
-
var i = (buf && offset) || 0, ii = 0;
|
|
22
|
-
|
|
23
|
-
buf = buf || [];
|
|
24
|
-
s.toLowerCase().replace(/[0-9a-f]{2}/g, function(oct) {
|
|
25
|
-
if (ii < 16) { // Don't overflow!
|
|
26
|
-
buf[i + ii++] = _hexToByte[oct];
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
// Zero out remaining bytes if string was short
|
|
31
|
-
while (ii < 16) {
|
|
32
|
-
buf[i + ii++] = 0;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
return buf;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
// **`unparse()` - Convert UUID byte array (ala parse()) into a string**
|
|
39
|
-
function unparse(buf, offset) {
|
|
40
|
-
var i = offset || 0, bth = _byteToHex;
|
|
41
|
-
return bth[buf[i++]] + bth[buf[i++]] +
|
|
42
|
-
bth[buf[i++]] + bth[buf[i++]] + '-' +
|
|
43
|
-
bth[buf[i++]] + bth[buf[i++]] + '-' +
|
|
44
|
-
bth[buf[i++]] + bth[buf[i++]] + '-' +
|
|
45
|
-
bth[buf[i++]] + bth[buf[i++]] + '-' +
|
|
46
|
-
bth[buf[i++]] + bth[buf[i++]] +
|
|
47
|
-
bth[buf[i++]] + bth[buf[i++]] +
|
|
48
|
-
bth[buf[i++]] + bth[buf[i++]];
|
|
49
|
-
}
|
|
1
|
+
var rng = require('./lib/rng');
|
|
2
|
+
var bytesToUuid = require('./lib/bytesToUuid');
|
|
50
3
|
|
|
51
4
|
// **`v1()` - Generate time-based UUID**
|
|
52
5
|
//
|
|
@@ -54,7 +7,7 @@ function unparse(buf, offset) {
|
|
|
54
7
|
// and http://docs.python.org/library/uuid.html
|
|
55
8
|
|
|
56
9
|
// random #'s we need to init node and clockseq
|
|
57
|
-
var _seedBytes =
|
|
10
|
+
var _seedBytes = rng();
|
|
58
11
|
|
|
59
12
|
// Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)
|
|
60
13
|
var _nodeId = [
|
|
@@ -137,47 +90,11 @@ function v1(options, buf, offset) {
|
|
|
137
90
|
|
|
138
91
|
// `node`
|
|
139
92
|
var node = options.node || _nodeId;
|
|
140
|
-
for (var n = 0; n < 6; n
|
|
93
|
+
for (var n = 0; n < 6; ++n) {
|
|
141
94
|
b[i + n] = node[n];
|
|
142
95
|
}
|
|
143
96
|
|
|
144
|
-
return buf ? buf :
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
// **`v4()` - Generate random UUID**
|
|
148
|
-
|
|
149
|
-
// See https://github.com/broofa/node-uuid for API details
|
|
150
|
-
function v4(options, buf, offset) {
|
|
151
|
-
// Deprecated - 'format' argument, as supported in v1.2
|
|
152
|
-
var i = buf && offset || 0;
|
|
153
|
-
|
|
154
|
-
if (typeof(options) == 'string') {
|
|
155
|
-
buf = options == 'binary' ? new Array(16) : null;
|
|
156
|
-
options = null;
|
|
157
|
-
}
|
|
158
|
-
options = options || {};
|
|
159
|
-
|
|
160
|
-
var rnds = options.random || (options.rng || _rng)();
|
|
161
|
-
|
|
162
|
-
// Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
|
|
163
|
-
rnds[6] = (rnds[6] & 0x0f) | 0x40;
|
|
164
|
-
rnds[8] = (rnds[8] & 0x3f) | 0x80;
|
|
165
|
-
|
|
166
|
-
// Copy bytes to buffer, if provided
|
|
167
|
-
if (buf) {
|
|
168
|
-
for (var ii = 0; ii < 16; ii++) {
|
|
169
|
-
buf[i + ii] = rnds[ii];
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
return buf || unparse(rnds);
|
|
97
|
+
return buf ? buf : bytesToUuid(b);
|
|
174
98
|
}
|
|
175
99
|
|
|
176
|
-
|
|
177
|
-
var uuid = v4;
|
|
178
|
-
uuid.v1 = v1;
|
|
179
|
-
uuid.v4 = v4;
|
|
180
|
-
uuid.parse = parse;
|
|
181
|
-
uuid.unparse = unparse;
|
|
182
|
-
|
|
183
|
-
module.exports = uuid;
|
|
100
|
+
module.exports = v1;
|
package/v4.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
var rng = require('./lib/rng');
|
|
2
|
+
var bytesToUuid = require('./lib/bytesToUuid');
|
|
3
|
+
|
|
4
|
+
function v4(options, buf, offset) {
|
|
5
|
+
var i = buf && offset || 0;
|
|
6
|
+
|
|
7
|
+
if (typeof(options) == 'string') {
|
|
8
|
+
buf = options == 'binary' ? new Array(16) : null;
|
|
9
|
+
options = null;
|
|
10
|
+
}
|
|
11
|
+
options = options || {};
|
|
12
|
+
|
|
13
|
+
var rnds = options.random || (options.rng || rng)();
|
|
14
|
+
|
|
15
|
+
// Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
|
|
16
|
+
rnds[6] = (rnds[6] & 0x0f) | 0x40;
|
|
17
|
+
rnds[8] = (rnds[8] & 0x3f) | 0x80;
|
|
18
|
+
|
|
19
|
+
// Copy bytes to buffer, if provided
|
|
20
|
+
if (buf) {
|
|
21
|
+
for (var ii = 0; ii < 16; ++ii) {
|
|
22
|
+
buf[i + ii] = rnds[ii];
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return buf || bytesToUuid(rnds);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
module.exports = v4;
|
package/v5.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
var sha1 = require('./lib/sha1-browser');
|
|
2
|
+
var bytesToUuid = require('./lib/bytesToUuid');
|
|
3
|
+
|
|
4
|
+
function uuidToBytes(uuid) {
|
|
5
|
+
// Note: We assume we're being passed a valid uuid string
|
|
6
|
+
var bytes = [];
|
|
7
|
+
uuid.replace(/[a-fA-F0-9]{2}/g, function(hex) {
|
|
8
|
+
bytes.push(parseInt(hex, 16));
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
return bytes;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function stringToBytes(str) {
|
|
15
|
+
str = unescape(encodeURIComponent(str)); // UTF8 escape
|
|
16
|
+
var bytes = new Array(str.length);
|
|
17
|
+
for (var i = 0; i < str.length; i++) {
|
|
18
|
+
bytes[i] = str.charCodeAt(i);
|
|
19
|
+
}
|
|
20
|
+
return bytes;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function v5(name, namespace, buf, offset) {
|
|
24
|
+
if (typeof(name) == 'string') name = stringToBytes(name);
|
|
25
|
+
if (typeof(namespace) == 'string') namespace = uuidToBytes(namespace);
|
|
26
|
+
|
|
27
|
+
if (!Array.isArray(name)) throw TypeError('name must be an array of bytes');
|
|
28
|
+
if (!Array.isArray(namespace) || namespace.length != 16) throw TypeError('namespace must be uuid string or an Array of 16 byte values');
|
|
29
|
+
|
|
30
|
+
// Per 4.3
|
|
31
|
+
var bytes = sha1(namespace.concat(name));
|
|
32
|
+
bytes[6] = (bytes[6] & 0x0f) | 0x50;
|
|
33
|
+
bytes[8] = (bytes[8] & 0x3f) | 0x80;
|
|
34
|
+
|
|
35
|
+
return buf || bytesToUuid(bytes);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Pre-defined namespaces, per Appendix C
|
|
39
|
+
v5.DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';
|
|
40
|
+
v5.URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';
|
|
41
|
+
|
|
42
|
+
module.exports = v5;
|
package/.npmignore
DELETED
package/.travis.yml
DELETED
package/benchmark/README.md
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
# node-uuid Benchmarks
|
|
2
|
-
|
|
3
|
-
### Results
|
|
4
|
-
|
|
5
|
-
To see the results of our benchmarks visit https://github.com/broofa/node-uuid/wiki/Benchmark
|
|
6
|
-
|
|
7
|
-
### Run them yourself
|
|
8
|
-
|
|
9
|
-
node-uuid comes with some benchmarks to measure performance of generating UUIDs. These can be run using node.js. node-uuid is being benchmarked against some other uuid modules, that are available through npm namely `uuid` and `uuid-js`.
|
|
10
|
-
|
|
11
|
-
To prepare and run the benchmark issue;
|
|
12
|
-
|
|
13
|
-
```
|
|
14
|
-
npm install uuid uuid-js
|
|
15
|
-
node benchmark/benchmark.js
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
You'll see an output like this one:
|
|
19
|
-
|
|
20
|
-
```
|
|
21
|
-
# v4
|
|
22
|
-
nodeuuid.v4(): 854700 uuids/second
|
|
23
|
-
nodeuuid.v4('binary'): 788643 uuids/second
|
|
24
|
-
nodeuuid.v4('binary', buffer): 1336898 uuids/second
|
|
25
|
-
uuid(): 479386 uuids/second
|
|
26
|
-
uuid('binary'): 582072 uuids/second
|
|
27
|
-
uuidjs.create(4): 312304 uuids/second
|
|
28
|
-
|
|
29
|
-
# v1
|
|
30
|
-
nodeuuid.v1(): 938086 uuids/second
|
|
31
|
-
nodeuuid.v1('binary'): 683060 uuids/second
|
|
32
|
-
nodeuuid.v1('binary', buffer): 1644736 uuids/second
|
|
33
|
-
uuidjs.create(1): 190621 uuids/second
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
* The `uuid()` entries are for Nikhil Marathe's [uuid module](https://bitbucket.org/nikhilm/uuidjs) which is a wrapper around the native libuuid library.
|
|
37
|
-
* The `uuidjs()` entries are for Patrick Negri's [uuid-js module](https://github.com/pnegri/uuid-js) which is a pure javascript implementation based on [UUID.js](https://github.com/LiosK/UUID.js) by LiosK.
|
|
38
|
-
|
|
39
|
-
If you want to get more reliable results you can run the benchmark multiple times and write the output into a log file:
|
|
40
|
-
|
|
41
|
-
```
|
|
42
|
-
for i in {0..9}; do node benchmark/benchmark.js >> benchmark/bench_0.4.12.log; done;
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
If you're interested in how performance varies between different node versions, you can issue the above command multiple times.
|
|
46
|
-
|
|
47
|
-
You can then use the shell script `bench.sh` provided in this directory to calculate the averages over all benchmark runs and draw a nice plot:
|
|
48
|
-
|
|
49
|
-
```
|
|
50
|
-
(cd benchmark/ && ./bench.sh)
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
This assumes you have [gnuplot](http://www.gnuplot.info/) and [ImageMagick](http://www.imagemagick.org/) installed. You'll find a nice `bench.png` graph in the `benchmark/` directory then.
|
package/benchmark/bench.gnu
DELETED
|
@@ -1,174 +0,0 @@
|
|
|
1
|
-
#!/opt/local/bin/gnuplot -persist
|
|
2
|
-
#
|
|
3
|
-
#
|
|
4
|
-
# G N U P L O T
|
|
5
|
-
# Version 4.4 patchlevel 3
|
|
6
|
-
# last modified March 2011
|
|
7
|
-
# System: Darwin 10.8.0
|
|
8
|
-
#
|
|
9
|
-
# Copyright (C) 1986-1993, 1998, 2004, 2007-2010
|
|
10
|
-
# Thomas Williams, Colin Kelley and many others
|
|
11
|
-
#
|
|
12
|
-
# gnuplot home: http://www.gnuplot.info
|
|
13
|
-
# faq, bugs, etc: type "help seeking-assistance"
|
|
14
|
-
# immediate help: type "help"
|
|
15
|
-
# plot window: hit 'h'
|
|
16
|
-
set terminal postscript eps noenhanced defaultplex \
|
|
17
|
-
leveldefault color colortext \
|
|
18
|
-
solid linewidth 1.2 butt noclip \
|
|
19
|
-
palfuncparam 2000,0.003 \
|
|
20
|
-
"Helvetica" 14
|
|
21
|
-
set output 'bench.eps'
|
|
22
|
-
unset clip points
|
|
23
|
-
set clip one
|
|
24
|
-
unset clip two
|
|
25
|
-
set bar 1.000000 front
|
|
26
|
-
set border 31 front linetype -1 linewidth 1.000
|
|
27
|
-
set xdata
|
|
28
|
-
set ydata
|
|
29
|
-
set zdata
|
|
30
|
-
set x2data
|
|
31
|
-
set y2data
|
|
32
|
-
set timefmt x "%d/%m/%y,%H:%M"
|
|
33
|
-
set timefmt y "%d/%m/%y,%H:%M"
|
|
34
|
-
set timefmt z "%d/%m/%y,%H:%M"
|
|
35
|
-
set timefmt x2 "%d/%m/%y,%H:%M"
|
|
36
|
-
set timefmt y2 "%d/%m/%y,%H:%M"
|
|
37
|
-
set timefmt cb "%d/%m/%y,%H:%M"
|
|
38
|
-
set boxwidth
|
|
39
|
-
set style fill empty border
|
|
40
|
-
set style rectangle back fc lt -3 fillstyle solid 1.00 border lt -1
|
|
41
|
-
set style circle radius graph 0.02, first 0, 0
|
|
42
|
-
set dummy x,y
|
|
43
|
-
set format x "% g"
|
|
44
|
-
set format y "% g"
|
|
45
|
-
set format x2 "% g"
|
|
46
|
-
set format y2 "% g"
|
|
47
|
-
set format z "% g"
|
|
48
|
-
set format cb "% g"
|
|
49
|
-
set angles radians
|
|
50
|
-
unset grid
|
|
51
|
-
set key title ""
|
|
52
|
-
set key outside left top horizontal Right noreverse enhanced autotitles columnhead nobox
|
|
53
|
-
set key noinvert samplen 4 spacing 1 width 0 height 0
|
|
54
|
-
set key maxcolumns 2 maxrows 0
|
|
55
|
-
unset label
|
|
56
|
-
unset arrow
|
|
57
|
-
set style increment default
|
|
58
|
-
unset style line
|
|
59
|
-
set style line 1 linetype 1 linewidth 2.000 pointtype 1 pointsize default pointinterval 0
|
|
60
|
-
unset style arrow
|
|
61
|
-
set style histogram clustered gap 2 title offset character 0, 0, 0
|
|
62
|
-
unset logscale
|
|
63
|
-
set offsets graph 0.05, 0.15, 0, 0
|
|
64
|
-
set pointsize 1.5
|
|
65
|
-
set pointintervalbox 1
|
|
66
|
-
set encoding default
|
|
67
|
-
unset polar
|
|
68
|
-
unset parametric
|
|
69
|
-
unset decimalsign
|
|
70
|
-
set view 60, 30, 1, 1
|
|
71
|
-
set samples 100, 100
|
|
72
|
-
set isosamples 10, 10
|
|
73
|
-
set surface
|
|
74
|
-
unset contour
|
|
75
|
-
set clabel '%8.3g'
|
|
76
|
-
set mapping cartesian
|
|
77
|
-
set datafile separator whitespace
|
|
78
|
-
unset hidden3d
|
|
79
|
-
set cntrparam order 4
|
|
80
|
-
set cntrparam linear
|
|
81
|
-
set cntrparam levels auto 5
|
|
82
|
-
set cntrparam points 5
|
|
83
|
-
set size ratio 0 1,1
|
|
84
|
-
set origin 0,0
|
|
85
|
-
set style data points
|
|
86
|
-
set style function lines
|
|
87
|
-
set xzeroaxis linetype -2 linewidth 1.000
|
|
88
|
-
set yzeroaxis linetype -2 linewidth 1.000
|
|
89
|
-
set zzeroaxis linetype -2 linewidth 1.000
|
|
90
|
-
set x2zeroaxis linetype -2 linewidth 1.000
|
|
91
|
-
set y2zeroaxis linetype -2 linewidth 1.000
|
|
92
|
-
set ticslevel 0.5
|
|
93
|
-
set mxtics default
|
|
94
|
-
set mytics default
|
|
95
|
-
set mztics default
|
|
96
|
-
set mx2tics default
|
|
97
|
-
set my2tics default
|
|
98
|
-
set mcbtics default
|
|
99
|
-
set xtics border in scale 1,0.5 mirror norotate offset character 0, 0, 0
|
|
100
|
-
set xtics norangelimit
|
|
101
|
-
set xtics ()
|
|
102
|
-
set ytics border in scale 1,0.5 mirror norotate offset character 0, 0, 0
|
|
103
|
-
set ytics autofreq norangelimit
|
|
104
|
-
set ztics border in scale 1,0.5 nomirror norotate offset character 0, 0, 0
|
|
105
|
-
set ztics autofreq norangelimit
|
|
106
|
-
set nox2tics
|
|
107
|
-
set noy2tics
|
|
108
|
-
set cbtics border in scale 1,0.5 mirror norotate offset character 0, 0, 0
|
|
109
|
-
set cbtics autofreq norangelimit
|
|
110
|
-
set title ""
|
|
111
|
-
set title offset character 0, 0, 0 font "" norotate
|
|
112
|
-
set timestamp bottom
|
|
113
|
-
set timestamp ""
|
|
114
|
-
set timestamp offset character 0, 0, 0 font "" norotate
|
|
115
|
-
set rrange [ * : * ] noreverse nowriteback # (currently [8.98847e+307:-8.98847e+307] )
|
|
116
|
-
set autoscale rfixmin
|
|
117
|
-
set autoscale rfixmax
|
|
118
|
-
set trange [ * : * ] noreverse nowriteback # (currently [-5.00000:5.00000] )
|
|
119
|
-
set autoscale tfixmin
|
|
120
|
-
set autoscale tfixmax
|
|
121
|
-
set urange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] )
|
|
122
|
-
set autoscale ufixmin
|
|
123
|
-
set autoscale ufixmax
|
|
124
|
-
set vrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] )
|
|
125
|
-
set autoscale vfixmin
|
|
126
|
-
set autoscale vfixmax
|
|
127
|
-
set xlabel ""
|
|
128
|
-
set xlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate
|
|
129
|
-
set x2label ""
|
|
130
|
-
set x2label offset character 0, 0, 0 font "" textcolor lt -1 norotate
|
|
131
|
-
set xrange [ * : * ] noreverse nowriteback # (currently [-0.150000:3.15000] )
|
|
132
|
-
set autoscale xfixmin
|
|
133
|
-
set autoscale xfixmax
|
|
134
|
-
set x2range [ * : * ] noreverse nowriteback # (currently [0.00000:3.00000] )
|
|
135
|
-
set autoscale x2fixmin
|
|
136
|
-
set autoscale x2fixmax
|
|
137
|
-
set ylabel ""
|
|
138
|
-
set ylabel offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270
|
|
139
|
-
set y2label ""
|
|
140
|
-
set y2label offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270
|
|
141
|
-
set yrange [ 0.00000 : 1.90000e+06 ] noreverse nowriteback # (currently [:] )
|
|
142
|
-
set autoscale yfixmin
|
|
143
|
-
set autoscale yfixmax
|
|
144
|
-
set y2range [ * : * ] noreverse nowriteback # (currently [0.00000:1.90000e+06] )
|
|
145
|
-
set autoscale y2fixmin
|
|
146
|
-
set autoscale y2fixmax
|
|
147
|
-
set zlabel ""
|
|
148
|
-
set zlabel offset character 0, 0, 0 font "" textcolor lt -1 norotate
|
|
149
|
-
set zrange [ * : * ] noreverse nowriteback # (currently [-10.0000:10.0000] )
|
|
150
|
-
set autoscale zfixmin
|
|
151
|
-
set autoscale zfixmax
|
|
152
|
-
set cblabel ""
|
|
153
|
-
set cblabel offset character 0, 0, 0 font "" textcolor lt -1 rotate by -270
|
|
154
|
-
set cbrange [ * : * ] noreverse nowriteback # (currently [8.98847e+307:-8.98847e+307] )
|
|
155
|
-
set autoscale cbfixmin
|
|
156
|
-
set autoscale cbfixmax
|
|
157
|
-
set zero 1e-08
|
|
158
|
-
set lmargin -1
|
|
159
|
-
set bmargin -1
|
|
160
|
-
set rmargin -1
|
|
161
|
-
set tmargin -1
|
|
162
|
-
set pm3d explicit at s
|
|
163
|
-
set pm3d scansautomatic
|
|
164
|
-
set pm3d interpolate 1,1 flush begin noftriangles nohidden3d corners2color mean
|
|
165
|
-
set palette positive nops_allcF maxcolors 0 gamma 1.5 color model RGB
|
|
166
|
-
set palette rgbformulae 7, 5, 15
|
|
167
|
-
set colorbox default
|
|
168
|
-
set colorbox vertical origin screen 0.9, 0.2, 0 size screen 0.05, 0.6, 0 front bdefault
|
|
169
|
-
set loadpath
|
|
170
|
-
set fontpath
|
|
171
|
-
set fit noerrorvariables
|
|
172
|
-
GNUTERM = "aqua"
|
|
173
|
-
plot 'bench_results.txt' using 2:xticlabel(1) w lp lw 2, '' using 3:xticlabel(1) w lp lw 2, '' using 4:xticlabel(1) w lp lw 2, '' using 5:xticlabel(1) w lp lw 2, '' using 6:xticlabel(1) w lp lw 2, '' using 7:xticlabel(1) w lp lw 2, '' using 8:xticlabel(1) w lp lw 2, '' using 9:xticlabel(1) w lp lw 2
|
|
174
|
-
# EOF
|
package/benchmark/bench.sh
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
|
|
3
|
-
# for a given node version run:
|
|
4
|
-
# for i in {0..9}; do node benchmark.js >> bench_0.6.2.log; done;
|
|
5
|
-
|
|
6
|
-
PATTERNS=('nodeuuid.v1()' "nodeuuid.v1('binary'," 'nodeuuid.v4()' "nodeuuid.v4('binary'," "uuid()" "uuid('binary')" 'uuidjs.create(1)' 'uuidjs.create(4)' '140byte')
|
|
7
|
-
FILES=(node_uuid_v1_string node_uuid_v1_buf node_uuid_v4_string node_uuid_v4_buf libuuid_v4_string libuuid_v4_binary uuidjs_v1_string uuidjs_v4_string 140byte_es)
|
|
8
|
-
INDICES=(2 3 2 3 2 2 2 2 2)
|
|
9
|
-
VERSIONS=$( ls bench_*.log | sed -e 's/^bench_\([0-9\.]*\)\.log/\1/' | tr "\\n" " " )
|
|
10
|
-
TMPJOIN="tmp_join"
|
|
11
|
-
OUTPUT="bench_results.txt"
|
|
12
|
-
|
|
13
|
-
for I in ${!FILES[*]}; do
|
|
14
|
-
F=${FILES[$I]}
|
|
15
|
-
P=${PATTERNS[$I]}
|
|
16
|
-
INDEX=${INDICES[$I]}
|
|
17
|
-
echo "version $F" > $F
|
|
18
|
-
for V in $VERSIONS; do
|
|
19
|
-
(VAL=$( grep "$P" bench_$V.log | LC_ALL=en_US awk '{ sum += $'$INDEX' } END { print sum/NR }' ); echo $V $VAL) >> $F
|
|
20
|
-
done
|
|
21
|
-
if [ $I == 0 ]; then
|
|
22
|
-
cat $F > $TMPJOIN
|
|
23
|
-
else
|
|
24
|
-
join $TMPJOIN $F > $OUTPUT
|
|
25
|
-
cp $OUTPUT $TMPJOIN
|
|
26
|
-
fi
|
|
27
|
-
rm $F
|
|
28
|
-
done
|
|
29
|
-
|
|
30
|
-
rm $TMPJOIN
|
|
31
|
-
|
|
32
|
-
gnuplot bench.gnu
|
|
33
|
-
convert -density 200 -resize 800x560 -flatten bench.eps bench.png
|
|
34
|
-
rm bench.eps
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
Test performance of native C UUID generation
|
|
3
|
-
|
|
4
|
-
To Compile: cc -luuid benchmark-native.c -o benchmark-native
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
#include <stdio.h>
|
|
8
|
-
#include <unistd.h>
|
|
9
|
-
#include <sys/time.h>
|
|
10
|
-
#include <uuid/uuid.h>
|
|
11
|
-
|
|
12
|
-
int main() {
|
|
13
|
-
uuid_t myid;
|
|
14
|
-
char buf[36+1];
|
|
15
|
-
int i;
|
|
16
|
-
struct timeval t;
|
|
17
|
-
double start, finish;
|
|
18
|
-
|
|
19
|
-
gettimeofday(&t, NULL);
|
|
20
|
-
start = t.tv_sec + t.tv_usec/1e6;
|
|
21
|
-
|
|
22
|
-
int n = 2e5;
|
|
23
|
-
for (i = 0; i < n; i++) {
|
|
24
|
-
uuid_generate(myid);
|
|
25
|
-
uuid_unparse(myid, buf);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
gettimeofday(&t, NULL);
|
|
29
|
-
finish = t.tv_sec + t.tv_usec/1e6;
|
|
30
|
-
double dur = finish - start;
|
|
31
|
-
|
|
32
|
-
printf("%d uuids/sec", (int)(n/dur));
|
|
33
|
-
return 0;
|
|
34
|
-
}
|
package/benchmark/benchmark.js
DELETED
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
try {
|
|
2
|
-
var nodeuuid = require('../uuid');
|
|
3
|
-
} catch (e) {
|
|
4
|
-
console.error('node-uuid require failed - skipping tests');
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
try {
|
|
8
|
-
var uuid = require('uuid');
|
|
9
|
-
} catch (e) {
|
|
10
|
-
console.error('uuid require failed - skipping tests');
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
try {
|
|
14
|
-
var uuidjs = require('uuid-js');
|
|
15
|
-
} catch (e) {
|
|
16
|
-
console.error('uuid-js require failed - skipping tests');
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
var N = 5e5;
|
|
20
|
-
|
|
21
|
-
function rate(msg, t) {
|
|
22
|
-
console.log(msg + ': ' +
|
|
23
|
-
(N / (Date.now() - t) * 1e3 | 0) +
|
|
24
|
-
' uuids/second');
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
console.log('# v4');
|
|
28
|
-
|
|
29
|
-
// node-uuid - string form
|
|
30
|
-
if (nodeuuid) {
|
|
31
|
-
for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4();
|
|
32
|
-
rate('nodeuuid.v4() - using node.js crypto RNG', t);
|
|
33
|
-
|
|
34
|
-
for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4({rng: nodeuuid.mathRNG});
|
|
35
|
-
rate('nodeuuid.v4() - using Math.random() RNG', t);
|
|
36
|
-
|
|
37
|
-
for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4('binary');
|
|
38
|
-
rate('nodeuuid.v4(\'binary\')', t);
|
|
39
|
-
|
|
40
|
-
var buffer = new nodeuuid.BufferClass(16);
|
|
41
|
-
for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v4('binary', buffer);
|
|
42
|
-
rate('nodeuuid.v4(\'binary\', buffer)', t);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
// libuuid - string form
|
|
46
|
-
if (uuid) {
|
|
47
|
-
for (var i = 0, t = Date.now(); i < N; i++) uuid();
|
|
48
|
-
rate('uuid()', t);
|
|
49
|
-
|
|
50
|
-
for (var i = 0, t = Date.now(); i < N; i++) uuid('binary');
|
|
51
|
-
rate('uuid(\'binary\')', t);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
// uuid-js - string form
|
|
55
|
-
if (uuidjs) {
|
|
56
|
-
for (var i = 0, t = Date.now(); i < N; i++) uuidjs.create(4);
|
|
57
|
-
rate('uuidjs.create(4)', t);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// 140byte.es
|
|
61
|
-
for (var i = 0, t = Date.now(); i < N; i++) 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,function(s,r){r=Math.random()*16|0;return (s=='x'?r:r&0x3|0x8).toString(16)});
|
|
62
|
-
rate('140byte.es_v4', t);
|
|
63
|
-
|
|
64
|
-
console.log('');
|
|
65
|
-
console.log('# v1');
|
|
66
|
-
|
|
67
|
-
// node-uuid - v1 string form
|
|
68
|
-
if (nodeuuid) {
|
|
69
|
-
for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1();
|
|
70
|
-
rate('nodeuuid.v1()', t);
|
|
71
|
-
|
|
72
|
-
for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1('binary');
|
|
73
|
-
rate('nodeuuid.v1(\'binary\')', t);
|
|
74
|
-
|
|
75
|
-
var buffer = new nodeuuid.BufferClass(16);
|
|
76
|
-
for (var i = 0, t = Date.now(); i < N; i++) nodeuuid.v1('binary', buffer);
|
|
77
|
-
rate('nodeuuid.v1(\'binary\', buffer)', t);
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
// uuid-js - v1 string form
|
|
81
|
-
if (uuidjs) {
|
|
82
|
-
for (var i = 0, t = Date.now(); i < N; i++) uuidjs.create(1);
|
|
83
|
-
rate('uuidjs.create(1)', t);
|
|
84
|
-
}
|