Skip to content

Commit

Permalink
benchmark: add assert.deep[Strict]Equal benchmarks
Browse files Browse the repository at this point in the history
* Move numbers into configuration
* Add buffer comparison benchmark
* Add assert.deepStrictEqual benchmarks

PR-URL: #11092
Reviewed-By: James M Snell <jasnell@gmail.com>
  • Loading branch information
joyeecheung authored and jasnell committed Mar 7, 2017
1 parent 4a4b84b commit b5bbd8b
Show file tree
Hide file tree
Showing 4 changed files with 134 additions and 47 deletions.
40 changes: 40 additions & 0 deletions benchmark/assert/deepequal-buffer.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
'use strict';
const common = require('../common.js');
const assert = require('assert');
const bench = common.createBenchmark(main, {
n: [1e3],
len: [1e2],
method: ['strict', 'nonstrict']
});

function main(conf) {
const n = +conf.n;
const len = +conf.len;
var i;

const data = Buffer.allocUnsafe(len);
const actual = Buffer.alloc(len);
const expected = Buffer.alloc(len);
data.copy(actual);
data.copy(expected);

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');
}
}
52 changes: 33 additions & 19 deletions benchmark/assert/deepequal-prims-and-objs-big-array.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use strict';
var common = require('../common.js');
var assert = require('assert');
const common = require('../common.js');
const assert = require('assert');

const primValues = {
'null': null,
Expand All @@ -13,29 +13,43 @@ const primValues = {
'new-array': new Array([1, 2, 3])
};

var bench = common.createBenchmark(main, {
const bench = common.createBenchmark(main, {
prim: Object.keys(primValues),
n: [25]
n: [25],
len: [1e5],
method: ['strict', 'nonstrict']
});

function main(conf) {
var prim = primValues[conf.prim];
var n = +conf.n;
var primArray;
var primArrayCompare;
var x;
const prim = primValues[conf.prim];
const n = +conf.n;
const len = +conf.len;
const actual = [];
const expected = [];
var i;

primArray = new Array();
primArrayCompare = new Array();
for (x = 0; x < (1e5); x++) {
primArray.push(prim);
primArrayCompare.push(prim);
for (var x = 0; x < len; x++) {
actual.push(prim);
expected.push(prim);
}

bench.start();
for (x = 0; x < n; x++) {
// eslint-disable-next-line no-restricted-properties
assert.deepEqual(primArray, primArrayCompare);
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');
}
bench.end(n);
}
43 changes: 29 additions & 14 deletions benchmark/assert/deepequal-prims-and-objs-big-loop.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
'use strict';
var common = require('../common.js');
var assert = require('assert');
const common = require('../common.js');
const assert = require('assert');

const primValues = {
'null': null,
Expand All @@ -13,22 +13,37 @@ const primValues = {
'new-array': new Array([1, 2, 3])
};

var bench = common.createBenchmark(main, {
const bench = common.createBenchmark(main, {
prim: Object.keys(primValues),
n: [1e5]
n: [1e6],
method: ['strict', 'nonstrict']
});

function main(conf) {
var prim = primValues[conf.prim];
var n = +conf.n;
var x;
const prim = primValues[conf.prim];
const n = +conf.n;
const actual = prim;
const expected = prim;
var i;

bench.start();

for (x = 0; x < n; x++) {
// eslint-disable-next-line no-restricted-properties
assert.deepEqual(new Array([prim]), new Array([prim]));
// Creates new array to avoid loop invariant code motion
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');
}

bench.end(n);
}
46 changes: 32 additions & 14 deletions benchmark/assert/deepequal-typedarrays.js
Original file line number Diff line number Diff line change
@@ -1,23 +1,41 @@
'use strict';
var common = require('../common.js');
var assert = require('assert');
var bench = common.createBenchmark(main, {
const common = require('../common.js');
const assert = require('assert');
const bench = common.createBenchmark(main, {
type: ('Int8Array Uint8Array Int16Array Uint16Array Int32Array Uint32Array ' +
'Float32Array Float64Array Uint8ClampedArray').split(' '),
n: [1]
n: [1],
method: ['strict', 'nonstrict'],
len: [1e6]
});

function main(conf) {
var type = conf.type;
var clazz = global[type];
var n = +conf.n;
const type = conf.type;
const clazz = global[type];
const n = +conf.n;
const len = +conf.len;

bench.start();
var actual = new clazz(n * 1e6);
var expected = new clazz(n * 1e6);
const actual = new clazz(len);
const expected = new clazz(len);
var i;

// eslint-disable-next-line no-restricted-properties
assert.deepEqual(actual, expected);

bench.end(n);
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');
}
}

0 comments on commit b5bbd8b

Please sign in to comment.