Skip to content

Instantly share code, notes, and snippets.

@Hypercubed
Last active June 3, 2016 00:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Hypercubed/bad6ff5d40ee0252f560f2544ec2310e to your computer and use it in GitHub Desktop.
Save Hypercubed/bad6ff5d40ee0252f560f2544ec2310e to your computer and use it in GitHub Desktop.
chuhai async
node_modules
/* eslint no-var: "off", prefer-arrow-callback: "off" */
/* eslint no-loop-func: "off" */
var test = require('blue-tape');
var suite = require('chuhai');
test('timeouts - demostrate bug', function (t) {
return suite('timeouts - demostrate bug', function (s) {
s.set('maxTime', 0.01);
s.set('minSamples', 10);
s.set('defer', true);
var value = null;
s.cycle(function () {
t.equal(value, 3628800);
value = null;
});
s.set('defer', false);
s.burn('max', function (deferred) {
value = 1;
var N = 10;
(function () {
for (var i = 1; i <= N; i++) {
value *= i;
}
})();
N = N*N; // in this case has no impact
});
s.set('defer', true);
s.bench('nextTick', function (deferred) {
value = 1;
var N = 10;
process.nextTick(function () {
for (var i = 1; i <= N; i++) {
value *= i;
}
deferred.resolve();
});
N = N * N; // this is a common mistake, value changes before callback
});
s.bench('setTimeout', function (deferred) {
value = 1;
var N = 10;
setTimeout(function () {
for (var i = 1; i <= N; i++) {
value *= i;
}
deferred.resolve();
}, 0);
N = N*N; // this is a common mistake, value changes before callback
});
s.bench('setImmediate', function (deferred) {
value = 1;
var N = 10;
setImmediate(function () {
for (var i = 1; i <= N; i++) {
value *= i;
}
deferred.resolve();
});
N = 1; // this is a common mistake, value changes before callback, not a fair test
});
});
});
/* eslint no-var: "off", prefer-arrow-callback: "off" */
/* eslint no-loop-func: "off" */
var test = require('blue-tape');
var suite = require('chuhai');
test('timeouts', function (t) {
return suite('timeouts', function (s) {
s.set('maxTime', 0.01);
s.set('minSamples', 10);
var value = null;
s.cycle(function () {
t.equal(value, 3628800);
value = null;
});
s.set('defer', false);
s.burn('max', function () {
value = 1;
var N = 10;
(function () {
for (var i = 1; i <= N; i++) {
value *= i;
}
})();
});
s.set('defer', true);
s.bench('nextTick', function (deferred) {
value = 1;
var N = 10;
process.nextTick(function () {
for (var i = 1; i <= N; i++) {
value *= i;
}
deferred.resolve();
});
});
s.bench('setTimeout', function (deferred) {
value = 1;
var N = 10;
setTimeout(function () {
for (var i = 1; i <= N; i++) {
value *= i;
}
deferred.resolve();
}, 0);
});
s.bench('setImmediate', function (deferred) {
value = 1;
var N = 10;
setImmediate(function () {
for (var i = 1; i <= N; i++) {
value *= i;
}
deferred.resolve();
});
});
});
});
{
"name": "async-bench",
"version": "0.0.0",
"private": true,
"description": "",
"main": "async.js",
"scripts": {
"test": "grunion *.js --raw | tap-markdown"
},
"repository": {
"type": "git",
"url": "git+ssh://git@gist.github.com/bad6ff5d40ee0252f560f2544ec2310e.git"
},
"author": "J. Harshbarger",
"license": "MIT",
"bugs": {
"url": "https://gist.github.com/bad6ff5d40ee0252f560f2544ec2310e"
},
"homepage": "https://gist.github.com/bad6ff5d40ee0252f560f2544ec2310e",
"dependencies": {
"blue-tape": "^0.2.0",
"chuhai": "^1.0.1",
"grunion": "^1.1.0",
"tap-markdown": "^1.0.1"
}
}

Tests

✔ timeouts [pass: 4, fail: 0, duration: 150ms]
✖ timeouts - demostrate bug [pass: 1, fail: 3, duration: 7ms]

Summary

  • duration: 157ms
  • assertions: 8
  • pass: 5
  • fail: 3

Fails

timeouts - demostrate bug

  ✖ should be equal
    operator: equal
    expected: 3628800
    actual:   9.33262154439441e+157
    at: Suite.<anonymous> (/Users/jayson/workspace/temp/bad6ff5d40ee0252f560f2544ec2310e/async-bad.js:16:9)
  ✖ should be equal
    operator: equal
    expected: 3628800
    actual:   9.33262154439441e+157
    at: Suite.<anonymous> (/Users/jayson/workspace/temp/bad6ff5d40ee0252f560f2544ec2310e/async-bad.js:16:9)
  ✖ should be equal
    operator: equal
    expected: 3628800
    actual:   1
    at: Suite.<anonymous> (/Users/jayson/workspace/temp/bad6ff5d40ee0252f560f2544ec2310e/async-bad.js:16:9)

Comments

timeouts

timeouts

max x 11,937,967 ops/sec ±12.03% (10 runs sampled) *burn in*
nextTick x 2,455,454 ops/sec ±9.60% (10 runs sampled)
setImmediate x 504,168 ops/sec ±11.54% (10 runs sampled)
setTimeout x 737 ops/sec ±1.46% (10 runs sampled)

Fastest is nextTick

timeouts - demostrate bug

timeouts - demostrate bug

max x 9,554,912 ops/sec ±6.22% (10 runs sampled) *burn in*
setImmediate x 515,649 ops/sec ±12.07% (10 runs sampled)
nextTick x 457,551 ops/sec ±11.75% (10 runs sampled)
setTimeout x 730 ops/sec ±2.66% (10 runs sampled)

Fastest is setImmediate

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment