var assert = require('assert'); var stringify = require('json-stable-stringify'); var objectTest = {}; for (var i = 35; i < 91; i++) { objectTest[String.fromCharCode(i)] = i; } var objectExpected = stringify(objectTest); var names = []; var values = []; var objKeys = Object.keys || function(obj) { var keys = []; for (var name in obj) { if (obj[name] !== undefined) { keys.push(name); } } return keys; }; suite('iter', function() { var minSamples = 120; benchmark('keys-while', function() { // only object is left var val = objectTest; var key; var keys = objKeys(val).sort(); var max = keys.length; var str = ""; var i = 0; while (i < max) { key = keys[i++]; if (val[key] !== undefined) { if (str) { str += ','; } str += '"' + key + '":' + val[key]; } } assert.equal('{' + str + '}', objectExpected); }, { minSamples: minSamples }); benchmark('keys-for', function() { // only object is left var val = objectTest; var key; var keys = objKeys(val).sort(); var max = keys.length; var str = ""; var i = 0; for (; i < max; i++) { key = keys[i]; if (val[key] !== undefined) { if (str) { str += ','; } str += '"' + key + '":' + val[key]; } } assert.equal('{' + str + '}', objectExpected); }, { minSamples: minSamples }); benchmark('incr-for', function() { names.length = 0; values.length = 0; var val = objectTest; var name; var i; var max = -1; for (name in val) { i = max; while (names[i] > name) i--; names.splice(i + 1, 0, name); values.splice(i + 1, 0, '"' + name + '":' + JSON.stringify(val[name])); max++; } assert.equal('{' + values.join(',') + '}', objectExpected); }, { minSamples: minSamples }); });