Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

test: add benchmark #430

Merged
merged 9 commits into from May 1, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
10 changes: 10 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
@@ -0,0 +1,10 @@
<!--
Thank you for your contribution!

If your pull request contains considerable changes please run the benchmark before and after your
changes and include the results in the pull request description. To run the benchmark execute:

npm run test:benchmark

from the root of this repository.
-->
21 changes: 21 additions & 0 deletions examples/benchmark/README.md
@@ -0,0 +1,21 @@
# uuid Benchmark

```
npm install
npm test
```

To run the benchmark in the browser open `benchmark.html` and check the console.

Example output (`uuid@8.0.0`, MacBook Pro (Retina, 13-inch, Early 2015), 3.1 GHz Dual-Core Intel Core i7):

```
Starting. Tests take ~1 minute to run ...
uuidv1() x 1,306,861 ops/sec ±2.62% (85 runs sampled)
uuidv1() fill existing array x 4,750,515 ops/sec ±2.76% (88 runs sampled)
uuidv4() x 302,174 ops/sec ±3.06% (81 runs sampled)
uuidv4() fill existing array x 359,703 ops/sec ±3.67% (82 runs sampled)
uuidv3() x 105,667 ops/sec ±3.84% (79 runs sampled)
uuidv5() x 110,886 ops/sec ±2.55% (81 runs sampled)
Fastest is uuidv1() fill existing array
```
10 changes: 10 additions & 0 deletions examples/benchmark/benchmark.html
@@ -0,0 +1,10 @@
<!DOCTYPE html>
<title>UUID Benchmark</title>
<p>Please open the Developer Console to view output</p>
<script src="./node_modules/uuid/dist/umd/uuidv1.min.js"></script>
<script src="./node_modules/uuid/dist/umd/uuidv3.min.js"></script>
<script src="./node_modules/uuid/dist/umd/uuidv4.min.js"></script>
<script src="./node_modules/uuid/dist/umd/uuidv5.min.js"></script>
<script src="./node_modules/lodash/lodash.js"></script>
<script src="./node_modules/benchmark/benchmark.js"></script>
<script src="./benchmark.js"></script>
37 changes: 37 additions & 0 deletions examples/benchmark/benchmark.js
@@ -0,0 +1,37 @@
/* global Benchmark:false, uuidv1:false, uuidv3:false, uuidv4:false, uuidv5:false */
const Benchmark = (typeof window !== 'undefined' && window.Benchmark) || require('benchmark');
const uuidv1 = (typeof window !== 'undefined' && window.uuidv1) || require('uuid').v1;
const uuidv4 = (typeof window !== 'undefined' && window.uuidv4) || require('uuid').v4;
const uuidv3 = (typeof window !== 'undefined' && window.uuidv3) || require('uuid').v3;
const uuidv5 = (typeof window !== 'undefined' && window.uuidv5) || require('uuid').v5;

console.log('Starting. Tests take ~1 minute to run ...');

ctavan marked this conversation as resolved.
Show resolved Hide resolved
const array = new Array(16);
const suite = new Benchmark.Suite();
suite
.add('uuidv1()', function () {
uuidv1();
})
.add('uuidv1() fill existing array', function () {
uuidv1(null, array, 0);
})
.add('uuidv4()', function () {
uuidv4();
})
.add('uuidv4() fill existing array', function () {
uuidv4(null, array, 0);
})
.add('uuidv3()', function () {
uuidv3('hello.example.com', uuidv3.DNS);
})
.add('uuidv5()', function () {
uuidv5('hello.example.com', uuidv5.DNS);
})
.on('cycle', function (event) {
console.log(String(event.target));
})
.on('complete', function () {
console.log('Fastest is ' + this.filter('fastest').map('name'));
})
.run();
33 changes: 33 additions & 0 deletions examples/benchmark/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 14 additions & 0 deletions examples/benchmark/package.json
@@ -0,0 +1,14 @@
{
"name": "uuid-benchmark",
"version": "0.0.0",
"private": true,
"scripts": {
"test": "node benchmark.js"
},
"dependencies": {
"uuid": "file:../../.local"
},
"devDependencies": {
"benchmark": "^2.1.4"
}
}
2 changes: 2 additions & 0 deletions package.json
Expand Up @@ -81,6 +81,8 @@
"pretest:node": "npm run build",
"test:node": "npm-run-all --parallel examples:node:**",
"test:pack": "./scripts/testpack.sh",
"pretest:benchmark": "npm run build",
"test:benchmark": "cd examples/benchmark && npm install && npm test",
"prettier:check": "prettier --ignore-path .prettierignore --check '**/*.{js,jsx,json,md}'",
"prettier:fix": "prettier --ignore-path .prettierignore --write '**/*.{js,jsx,json,md}'",
"bundlewatch": "npm run pretest:browser && bundlewatch --config bundlewatch.config.json",
Expand Down