summaryrefslogtreecommitdiff
path: root/benchmark/assert
diff options
context:
space:
mode:
Diffstat (limited to 'benchmark/assert')
-rw-r--r--benchmark/assert/deepequal-buffer.js35
-rw-r--r--benchmark/assert/deepequal-object.js73
-rw-r--r--benchmark/assert/deepequal-prims-and-objs-big-array-set.js119
-rw-r--r--benchmark/assert/deepequal-prims-and-objs-big-array.js55
-rw-r--r--benchmark/assert/deepequal-prims-and-objs-big-loop.js27
-rw-r--r--benchmark/assert/deepequal-typedarrays.js29
-rw-r--r--benchmark/assert/throws.js57
7 files changed, 328 insertions, 67 deletions
diff --git a/benchmark/assert/deepequal-buffer.js b/benchmark/assert/deepequal-buffer.js
index 2a7d9e3bed..9e86aa231e 100644
--- a/benchmark/assert/deepequal-buffer.js
+++ b/benchmark/assert/deepequal-buffer.js
@@ -1,10 +1,16 @@
'use strict';
const common = require('../common.js');
const assert = require('assert');
+
const bench = common.createBenchmark(main, {
- n: [1e3],
- len: [1e2],
- method: ['strict', 'nonstrict']
+ n: [1e5],
+ len: [1e2, 1e4],
+ method: [
+ 'deepEqual',
+ 'deepStrictEqual',
+ 'notDeepEqual',
+ 'notDeepStrictEqual'
+ ]
});
function main(conf) {
@@ -12,14 +18,16 @@ function main(conf) {
const len = +conf.len;
var i;
- const data = Buffer.allocUnsafe(len);
+ const data = Buffer.allocUnsafe(len + 1);
const actual = Buffer.alloc(len);
const expected = Buffer.alloc(len);
+ const expectedWrong = Buffer.alloc(len + 1);
data.copy(actual);
data.copy(expected);
+ data.copy(expectedWrong);
switch (conf.method) {
- case 'strict':
+ case 'deepEqual':
bench.start();
for (i = 0; i < n; ++i) {
// eslint-disable-next-line no-restricted-properties
@@ -27,13 +35,28 @@ function main(conf) {
}
bench.end(n);
break;
- case 'nonstrict':
+ case 'deepStrictEqual':
bench.start();
for (i = 0; i < n; ++i) {
assert.deepStrictEqual(actual, expected);
}
bench.end(n);
break;
+ case 'notDeepEqual':
+ bench.start();
+ for (i = 0; i < n; ++i) {
+ // eslint-disable-next-line no-restricted-properties
+ assert.notDeepEqual(actual, expectedWrong);
+ }
+ bench.end(n);
+ break;
+ case 'notDeepStrictEqual':
+ bench.start();
+ for (i = 0; i < n; ++i) {
+ assert.notDeepStrictEqual(actual, expectedWrong);
+ }
+ bench.end(n);
+ break;
default:
throw new Error('Unsupported method');
}
diff --git a/benchmark/assert/deepequal-object.js b/benchmark/assert/deepequal-object.js
new file mode 100644
index 0000000000..d1a6cb6994
--- /dev/null
+++ b/benchmark/assert/deepequal-object.js
@@ -0,0 +1,73 @@
+'use strict';
+
+const common = require('../common.js');
+const assert = require('assert');
+
+const bench = common.createBenchmark(main, {
+ n: [1e6],
+ size: [1e2, 1e3, 1e4],
+ method: [
+ 'deepEqual',
+ 'deepStrictEqual',
+ 'notDeepEqual',
+ 'notDeepStrictEqual'
+ ]
+});
+
+function createObj(source, add = '') {
+ return source.map((n) => ({
+ foo: 'yarp',
+ nope: {
+ bar: `123${add}`,
+ a: [1, 2, 3],
+ baz: n
+ }
+ }));
+}
+
+function main(conf) {
+ const size = +conf.size;
+ // TODO: Fix this "hack"
+ const n = (+conf.n) / size;
+ var i;
+
+ const source = Array.apply(null, Array(size));
+ const actual = createObj(source);
+ const expected = createObj(source);
+ const expectedWrong = createObj(source, '4');
+
+ switch (conf.method) {
+ case 'deepEqual':
+ bench.start();
+ for (i = 0; i < n; ++i) {
+ // eslint-disable-next-line no-restricted-properties
+ assert.deepEqual(actual, expected);
+ }
+ bench.end(n);
+ break;
+ case 'deepStrictEqual':
+ bench.start();
+ for (i = 0; i < n; ++i) {
+ assert.deepStrictEqual(actual, expected);
+ }
+ bench.end(n);
+ break;
+ case 'notDeepEqual':
+ bench.start();
+ for (i = 0; i < n; ++i) {
+ // eslint-disable-next-line no-restricted-properties
+ assert.notDeepEqual(actual, expectedWrong);
+ }
+ bench.end(n);
+ break;
+ case 'notDeepStrictEqual':
+ bench.start();
+ for (i = 0; i < n; ++i) {
+ assert.notDeepStrictEqual(actual, expectedWrong);
+ }
+ bench.end(n);
+ break;
+ default:
+ throw new Error('Unsupported method');
+ }
+}
diff --git a/benchmark/assert/deepequal-prims-and-objs-big-array-set.js b/benchmark/assert/deepequal-prims-and-objs-big-array-set.js
new file mode 100644
index 0000000000..1e356cea51
--- /dev/null
+++ b/benchmark/assert/deepequal-prims-and-objs-big-array-set.js
@@ -0,0 +1,119 @@
+'use strict';
+
+const common = require('../common.js');
+const assert = require('assert');
+
+const primValues = {
+ 'null': null,
+ 'undefined': undefined,
+ 'string': 'a',
+ 'number': 1,
+ 'boolean': true,
+ 'object': { 0: 'a' },
+ 'array': [1, 2, 3],
+ 'new-array': new Array([1, 2, 3])
+};
+
+const bench = common.createBenchmark(main, {
+ prim: Object.keys(primValues),
+ n: [25],
+ len: [1e5],
+ method: [
+ 'deepEqual_Array',
+ 'deepStrictEqual_Array',
+ 'notDeepEqual_Array',
+ 'notDeepStrictEqual_Array',
+ 'deepEqual_Set',
+ 'deepStrictEqual_Set',
+ 'notDeepEqual_Set',
+ 'notDeepStrictEqual_Set'
+ ]
+});
+
+function main(conf) {
+ const prim = primValues[conf.prim];
+ const n = +conf.n;
+ const len = +conf.len;
+ const actual = [];
+ const expected = [];
+ const expectedWrong = [];
+ var i;
+
+ for (var x = 0; x < len; x++) {
+ actual.push(prim);
+ expected.push(prim);
+ expectedWrong.push(prim);
+ }
+ expectedWrong.pop();
+ expectedWrong.push('b');
+
+ // Note: primitives are only added once to a set
+ const actualSet = new Set(actual);
+ const expectedSet = new Set(expected);
+ const expectedWrongSet = new Set(expectedWrong);
+
+ switch (conf.method) {
+ case 'deepEqual_Array':
+ bench.start();
+ for (i = 0; i < n; ++i) {
+ // eslint-disable-next-line no-restricted-properties
+ assert.deepEqual(actual, expected);
+ }
+ bench.end(n);
+ break;
+ case 'deepStrictEqual_Array':
+ bench.start();
+ for (i = 0; i < n; ++i) {
+ assert.deepStrictEqual(actual, expected);
+ }
+ bench.end(n);
+ break;
+ case 'notDeepEqual_Array':
+ bench.start();
+ for (i = 0; i < n; ++i) {
+ // eslint-disable-next-line no-restricted-properties
+ assert.notDeepEqual(actual, expectedWrong);
+ }
+ bench.end(n);
+ break;
+ case 'notDeepStrictEqual_Array':
+ bench.start();
+ for (i = 0; i < n; ++i) {
+ assert.notDeepStrictEqual(actual, expectedWrong);
+ }
+ bench.end(n);
+ break;
+ case 'deepEqual_Set':
+ bench.start();
+ for (i = 0; i < n; ++i) {
+ // eslint-disable-next-line no-restricted-properties
+ assert.deepEqual(actualSet, expectedSet);
+ }
+ bench.end(n);
+ break;
+ case 'deepStrictEqual_Set':
+ bench.start();
+ for (i = 0; i < n; ++i) {
+ assert.deepStrictEqual(actualSet, expectedSet);
+ }
+ bench.end(n);
+ break;
+ case 'notDeepEqual_Set':
+ bench.start();
+ for (i = 0; i < n; ++i) {
+ // eslint-disable-next-line no-restricted-properties
+ assert.notDeepEqual(actualSet, expectedWrongSet);
+ }
+ bench.end(n);
+ break;
+ case 'notDeepStrictEqual_Set':
+ bench.start();
+ for (i = 0; i < n; ++i) {
+ assert.notDeepStrictEqual(actualSet, expectedWrongSet);
+ }
+ bench.end(n);
+ break;
+ default:
+ throw new Error('Unsupported method');
+ }
+}
diff --git a/benchmark/assert/deepequal-prims-and-objs-big-array.js b/benchmark/assert/deepequal-prims-and-objs-big-array.js
deleted file mode 100644
index 69eda8af08..0000000000
--- a/benchmark/assert/deepequal-prims-and-objs-big-array.js
+++ /dev/null
@@ -1,55 +0,0 @@
-'use strict';
-const common = require('../common.js');
-const assert = require('assert');
-
-const primValues = {
- 'null': null,
- 'undefined': undefined,
- 'string': 'a',
- 'number': 1,
- 'boolean': true,
- 'object': { 0: 'a' },
- 'array': [1, 2, 3],
- 'new-array': new Array([1, 2, 3])
-};
-
-const bench = common.createBenchmark(main, {
- prim: Object.keys(primValues),
- n: [25],
- len: [1e5],
- method: ['strict', 'nonstrict']
-});
-
-function main(conf) {
- const prim = primValues[conf.prim];
- const n = +conf.n;
- const len = +conf.len;
- const actual = [];
- const expected = [];
- var i;
-
- for (var x = 0; x < len; x++) {
- actual.push(prim);
- expected.push(prim);
- }
-
- switch (conf.method) {
- case 'strict':
- bench.start();
- for (i = 0; i < n; ++i) {
- // eslint-disable-next-line no-restricted-properties
- assert.deepEqual(actual, expected);
- }
- bench.end(n);
- break;
- case 'nonstrict':
- bench.start();
- for (i = 0; i < n; ++i) {
- assert.deepStrictEqual(actual, expected);
- }
- bench.end(n);
- break;
- default:
- throw new Error('Unsupported method');
- }
-}
diff --git a/benchmark/assert/deepequal-prims-and-objs-big-loop.js b/benchmark/assert/deepequal-prims-and-objs-big-loop.js
index 781c5ad754..2800b51c49 100644
--- a/benchmark/assert/deepequal-prims-and-objs-big-loop.js
+++ b/benchmark/assert/deepequal-prims-and-objs-big-loop.js
@@ -16,7 +16,12 @@ const primValues = {
const bench = common.createBenchmark(main, {
prim: Object.keys(primValues),
n: [1e6],
- method: ['strict', 'nonstrict']
+ method: [
+ 'deepEqual',
+ 'deepStrictEqual',
+ 'notDeepEqual',
+ 'notDeepStrictEqual'
+ ]
});
function main(conf) {
@@ -24,11 +29,12 @@ function main(conf) {
const n = +conf.n;
const actual = prim;
const expected = prim;
+ const expectedWrong = 'b';
var i;
// Creates new array to avoid loop invariant code motion
switch (conf.method) {
- case 'strict':
+ case 'deepEqual':
bench.start();
for (i = 0; i < n; ++i) {
// eslint-disable-next-line no-restricted-properties
@@ -36,13 +42,28 @@ function main(conf) {
}
bench.end(n);
break;
- case 'nonstrict':
+ case 'deepStrictEqual':
bench.start();
for (i = 0; i < n; ++i) {
assert.deepStrictEqual([actual], [expected]);
}
bench.end(n);
break;
+ case 'notDeepEqual':
+ bench.start();
+ for (i = 0; i < n; ++i) {
+ // eslint-disable-next-line no-restricted-properties
+ assert.notDeepEqual([actual], [expectedWrong]);
+ }
+ bench.end(n);
+ break;
+ case 'notDeepStrictEqual':
+ bench.start();
+ for (i = 0; i < n; ++i) {
+ assert.notDeepStrictEqual([actual], [expectedWrong]);
+ }
+ bench.end(n);
+ break;
default:
throw new Error('Unsupported method');
}
diff --git a/benchmark/assert/deepequal-typedarrays.js b/benchmark/assert/deepequal-typedarrays.js
index 00c6ca5adf..5d51d53d13 100644
--- a/benchmark/assert/deepequal-typedarrays.js
+++ b/benchmark/assert/deepequal-typedarrays.js
@@ -1,6 +1,7 @@
'use strict';
const common = require('../common.js');
const assert = require('assert');
+
const bench = common.createBenchmark(main, {
type: [
'Int8Array',
@@ -14,7 +15,12 @@ const bench = common.createBenchmark(main, {
'Uint8ClampedArray',
],
n: [1],
- method: ['strict', 'nonstrict'],
+ method: [
+ 'deepEqual',
+ 'deepStrictEqual',
+ 'notDeepEqual',
+ 'notDeepStrictEqual'
+ ],
len: [1e6]
});
@@ -26,10 +32,12 @@ function main(conf) {
const actual = new clazz(len);
const expected = new clazz(len);
+ const expectedWrong = Buffer.alloc(len);
+ expectedWrong[100] = 123;
var i;
switch (conf.method) {
- case 'strict':
+ case 'deepEqual':
bench.start();
for (i = 0; i < n; ++i) {
// eslint-disable-next-line no-restricted-properties
@@ -37,13 +45,28 @@ function main(conf) {
}
bench.end(n);
break;
- case 'nonstrict':
+ case 'deepStrictEqual':
bench.start();
for (i = 0; i < n; ++i) {
assert.deepStrictEqual(actual, expected);
}
bench.end(n);
break;
+ case 'notDeepEqual':
+ bench.start();
+ for (i = 0; i < n; ++i) {
+ // eslint-disable-next-line no-restricted-properties
+ assert.notDeepEqual(actual, expectedWrong);
+ }
+ bench.end(n);
+ break;
+ case 'notDeepStrictEqual':
+ bench.start();
+ for (i = 0; i < n; ++i) {
+ assert.notDeepStrictEqual(actual, expectedWrong);
+ }
+ bench.end(n);
+ break;
default:
throw new Error('Unsupported method');
}
diff --git a/benchmark/assert/throws.js b/benchmark/assert/throws.js
new file mode 100644
index 0000000000..9043799256
--- /dev/null
+++ b/benchmark/assert/throws.js
@@ -0,0 +1,57 @@
+'use strict';
+
+const common = require('../common.js');
+const assert = require('assert');
+
+const bench = common.createBenchmark(main, {
+ n: [1e6],
+ method: [
+ 'doesNotThrow',
+ 'throws',
+ 'throws_TypeError',
+ 'throws_RegExp'
+ ]
+});
+
+function main(conf) {
+ const n = +conf.n;
+ const throws = () => { throw new TypeError('foobar'); };
+ const doesNotThrow = () => { return 'foobar'; };
+ const regExp = /foobar/;
+ const message = 'failure';
+ var i;
+
+ switch (conf.method) {
+ case 'doesNotThrow':
+ bench.start();
+ for (i = 0; i < n; ++i) {
+ assert.doesNotThrow(doesNotThrow);
+ }
+ bench.end(n);
+ break;
+ case 'throws':
+ bench.start();
+ for (i = 0; i < n; ++i) {
+ // eslint-disable-next-line no-restricted-syntax
+ assert.throws(throws);
+ }
+ bench.end(n);
+ break;
+ case 'throws_TypeError':
+ bench.start();
+ for (i = 0; i < n; ++i) {
+ assert.throws(throws, TypeError, message);
+ }
+ bench.end(n);
+ break;
+ case 'throws_RegExp':
+ bench.start();
+ for (i = 0; i < n; ++i) {
+ assert.throws(throws, regExp, message);
+ }
+ bench.end(n);
+ break;
+ default:
+ throw new Error(`Unsupported method ${conf.method}`);
+ }
+}