| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978 |
- ;(function() {
- 'use strict';
- /** Used to access the Firebug Lite panel (set by `run`). */
- var fbPanel;
- /** Used as a safe reference for `undefined` in pre ES5 environments. */
- var undefined;
- /** Used as a reference to the global object. */
- var root = typeof global == 'object' && global || this;
- /** Method and object shortcuts. */
- var phantom = root.phantom,
- amd = root.define && define.amd,
- argv = root.process && process.argv,
- document = !phantom && root.document,
- noop = function() {},
- params = root.arguments,
- system = root.system;
- /** Add `console.log()` support for Rhino and RingoJS. */
- var console = root.console || (root.console = { 'log': root.print });
- /** The file path of the lodash file to test. */
- var filePath = (function() {
- var min = 0,
- result = [];
- if (phantom) {
- result = params = phantom.args;
- } else if (system) {
- min = 1;
- result = params = system.args;
- } else if (argv) {
- min = 2;
- result = params = argv;
- } else if (params) {
- result = params;
- }
- var last = result[result.length - 1];
- result = (result.length > min && !/perf(?:\.js)?$/.test(last)) ? last : '../lodash.js';
- if (!amd) {
- try {
- result = require('fs').realpathSync(result);
- } catch (e) {}
- try {
- result = require.resolve(result);
- } catch (e) {}
- }
- return result;
- }());
- /** Used to match path separators. */
- var rePathSeparator = /[\/\\]/;
- /** Used to detect primitive types. */
- var rePrimitive = /^(?:boolean|number|string|undefined)$/;
- /** Used to match RegExp special characters. */
- var reSpecialChars = /[.*+?^=!:${}()|[\]\/\\]/g;
- /** The `ui` object. */
- var ui = root.ui || (root.ui = {
- 'buildPath': basename(filePath, '.js'),
- 'otherPath': 'underscore'
- });
- /** The lodash build basename. */
- var buildName = root.buildName = basename(ui.buildPath, '.js');
- /** The other library basename. */
- var otherName = root.otherName = (function() {
- var result = basename(ui.otherPath, '.js');
- return result + (result == buildName ? ' (2)' : '');
- }());
- /** Used to score performance. */
- var score = { 'a': [], 'b': [] };
- /** Used to queue benchmark suites. */
- var suites = [];
- /** Use a single "load" function. */
- var load = (typeof require == 'function' && !amd)
- ? require
- : noop;
- /** Load lodash. */
- var lodash = root.lodash || (root.lodash = (
- lodash = load(filePath) || root._,
- lodash = lodash._ || lodash,
- (lodash.runInContext ? lodash.runInContext(root) : lodash),
- lodash.noConflict()
- ));
- /** Load Underscore. */
- var _ = root.underscore || (root.underscore = (
- _ = load('../vendor/underscore/underscore.js') || root._,
- _._ || _
- ));
- /** Load Benchmark.js. */
- var Benchmark = root.Benchmark || (root.Benchmark = (
- Benchmark = load('../node_modules/benchmark/benchmark.js') || root.Benchmark,
- Benchmark = Benchmark.Benchmark || Benchmark,
- Benchmark.runInContext(lodash.extend({}, root, { '_': lodash }))
- ));
- /*--------------------------------------------------------------------------*/
- /**
- * Gets the basename of the given `filePath`. If the file `extension` is passed,
- * it will be removed from the basename.
- *
- * @private
- * @param {string} path The file path to inspect.
- * @param {string} extension The extension to remove.
- * @returns {string} Returns the basename.
- */
- function basename(filePath, extension) {
- var result = (filePath || '').split(rePathSeparator).pop();
- return (arguments.length < 2)
- ? result
- : result.replace(RegExp(extension.replace(reSpecialChars, '\\$&') + '$'), '');
- }
- /**
- * Computes the geometric mean (log-average) of an array of values.
- * See http://en.wikipedia.org/wiki/Geometric_mean#Relationship_with_arithmetic_mean_of_logarithms.
- *
- * @private
- * @param {Array} array The array of values.
- * @returns {number} The geometric mean.
- */
- function getGeometricMean(array) {
- return Math.pow(Math.E, lodash.reduce(array, function(sum, x) {
- return sum + Math.log(x);
- }, 0) / array.length) || 0;
- }
- /**
- * Gets the Hz, i.e. operations per second, of `bench` adjusted for the
- * margin of error.
- *
- * @private
- * @param {Object} bench The benchmark object.
- * @returns {number} Returns the adjusted Hz.
- */
- function getHz(bench) {
- var result = 1 / (bench.stats.mean + bench.stats.moe);
- return isFinite(result) ? result : 0;
- }
- /**
- * Host objects can return type values that are different from their actual
- * data type. The objects we are concerned with usually return non-primitive
- * types of "object", "function", or "unknown".
- *
- * @private
- * @param {*} object The owner of the property.
- * @param {string} property The property to check.
- * @returns {boolean} Returns `true` if the property value is a non-primitive, else `false`.
- */
- function isHostType(object, property) {
- if (object == null) {
- return false;
- }
- var type = typeof object[property];
- return !rePrimitive.test(type) && (type != 'object' || !!object[property]);
- }
- /**
- * Logs text to the console.
- *
- * @private
- * @param {string} text The text to log.
- */
- function log(text) {
- console.log(text + '');
- if (fbPanel) {
- // Scroll the Firebug Lite panel down.
- fbPanel.scrollTop = fbPanel.scrollHeight;
- }
- }
- /**
- * Runs all benchmark suites.
- *
- * @private (@public in the browser)
- */
- function run() {
- fbPanel = (fbPanel = root.document && document.getElementById('FirebugUI')) &&
- (fbPanel = (fbPanel = fbPanel.contentWindow || fbPanel.contentDocument).document || fbPanel) &&
- fbPanel.getElementById('fbPanel1');
- log('\nSit back and relax, this may take a while.');
- suites[0].run({ 'async': true });
- }
- /*--------------------------------------------------------------------------*/
- lodash.extend(Benchmark.Suite.options, {
- 'onStart': function() {
- log('\n' + this.name + ':');
- },
- 'onCycle': function(event) {
- log(event.target);
- },
- 'onComplete': function() {
- for (var index = 0, length = this.length; index < length; index++) {
- var bench = this[index];
- if (bench.error) {
- var errored = true;
- }
- }
- if (errored) {
- log('There was a problem, skipping...');
- }
- else {
- var formatNumber = Benchmark.formatNumber,
- fastest = this.filter('fastest'),
- fastestHz = getHz(fastest[0]),
- slowest = this.filter('slowest'),
- slowestHz = getHz(slowest[0]),
- aHz = getHz(this[0]),
- bHz = getHz(this[1]);
- if (fastest.length > 1) {
- log('It\'s too close to call.');
- aHz = bHz = slowestHz;
- }
- else {
- var percent = ((fastestHz / slowestHz) - 1) * 100;
- log(
- fastest[0].name + ' is ' +
- formatNumber(percent < 1 ? percent.toFixed(2) : Math.round(percent)) +
- '% faster.'
- );
- }
- // Add score adjusted for margin of error.
- score.a.push(aHz);
- score.b.push(bHz);
- }
- // Remove current suite from queue.
- suites.shift();
- if (suites.length) {
- // Run next suite.
- suites[0].run({ 'async': true });
- }
- else {
- var aMeanHz = getGeometricMean(score.a),
- bMeanHz = getGeometricMean(score.b),
- fastestMeanHz = Math.max(aMeanHz, bMeanHz),
- slowestMeanHz = Math.min(aMeanHz, bMeanHz),
- xFaster = fastestMeanHz / slowestMeanHz,
- percentFaster = formatNumber(Math.round((xFaster - 1) * 100)),
- message = 'is ' + percentFaster + '% ' + (xFaster == 1 ? '' : '(' + formatNumber(xFaster.toFixed(2)) + 'x) ') + 'faster than';
- // Report results.
- if (aMeanHz >= bMeanHz) {
- log('\n' + buildName + ' ' + message + ' ' + otherName + '.');
- } else {
- log('\n' + otherName + ' ' + message + ' ' + buildName + '.');
- }
- }
- }
- });
- /*--------------------------------------------------------------------------*/
- lodash.extend(Benchmark.options, {
- 'async': true,
- 'setup': '\
- var _ = global.underscore,\
- lodash = global.lodash,\
- belt = this.name == buildName ? lodash : _;\
- \
- var date = new Date,\
- limit = 50,\
- regexp = /x/,\
- object = {},\
- objects = Array(limit),\
- numbers = Array(limit),\
- fourNumbers = [5, 25, 10, 30],\
- nestedNumbers = [1, [2], [3, [[4]]]],\
- nestedObjects = [{}, [{}], [{}, [[{}]]]],\
- twoNumbers = [12, 23];\
- \
- for (var index = 0; index < limit; index++) {\
- numbers[index] = index;\
- object["key" + index] = index;\
- objects[index] = { "num": index };\
- }\
- var strNumbers = numbers + "";\
- \
- if (typeof assign != "undefined") {\
- var _assign = _.assign || _.extend,\
- lodashAssign = lodash.assign;\
- }\
- if (typeof bind != "undefined") {\
- var thisArg = { "name": "fred" };\
- \
- var func = function(greeting, punctuation) {\
- return (greeting || "hi") + " " + this.name + (punctuation || ".");\
- };\
- \
- var _boundNormal = _.bind(func, thisArg),\
- _boundMultiple = _boundNormal,\
- _boundPartial = _.bind(func, thisArg, "hi");\
- \
- var lodashBoundNormal = lodash.bind(func, thisArg),\
- lodashBoundMultiple = lodashBoundNormal,\
- lodashBoundPartial = lodash.bind(func, thisArg, "hi");\
- \
- for (index = 0; index < 10; index++) {\
- _boundMultiple = _.bind(_boundMultiple, { "name": "fred" + index });\
- lodashBoundMultiple = lodash.bind(lodashBoundMultiple, { "name": "fred" + index });\
- }\
- }\
- if (typeof bindAll != "undefined") {\
- var bindAllCount = -1,\
- bindAllObjects = Array(this.count);\
- \
- var funcNames = belt.reject(belt.functions(belt).slice(0, 40), function(funcName) {\
- return /^_/.test(funcName);\
- });\
- \
- // Potentially expensive.\n\
- for (index = 0; index < this.count; index++) {\
- bindAllObjects[index] = belt.reduce(funcNames, function(object, funcName) {\
- object[funcName] = belt[funcName];\
- return object;\
- }, {});\
- }\
- }\
- if (typeof chaining != "undefined") {\
- var even = function(v) { return v % 2 == 0; },\
- square = function(v) { return v * v; };\
- \
- var largeArray = belt.range(10000),\
- _chaining = _(largeArray).chain(),\
- lodashChaining = lodash(largeArray).chain();\
- }\
- if (typeof compact != "undefined") {\
- var uncompacted = numbers.slice();\
- uncompacted[2] = false;\
- uncompacted[6] = null;\
- uncompacted[18] = "";\
- }\
- if (typeof flowRight != "undefined") {\
- var compAddOne = function(n) { return n + 1; },\
- compAddTwo = function(n) { return n + 2; },\
- compAddThree = function(n) { return n + 3; };\
- \
- var _composed = _.flowRight && _.flowRight(compAddThree, compAddTwo, compAddOne),\
- lodashComposed = lodash.flowRight && lodash.flowRight(compAddThree, compAddTwo, compAddOne);\
- }\
- if (typeof countBy != "undefined" || typeof omit != "undefined") {\
- var wordToNumber = {\
- "one": 1,\
- "two": 2,\
- "three": 3,\
- "four": 4,\
- "five": 5,\
- "six": 6,\
- "seven": 7,\
- "eight": 8,\
- "nine": 9,\
- "ten": 10,\
- "eleven": 11,\
- "twelve": 12,\
- "thirteen": 13,\
- "fourteen": 14,\
- "fifteen": 15,\
- "sixteen": 16,\
- "seventeen": 17,\
- "eighteen": 18,\
- "nineteen": 19,\
- "twenty": 20,\
- "twenty-one": 21,\
- "twenty-two": 22,\
- "twenty-three": 23,\
- "twenty-four": 24,\
- "twenty-five": 25,\
- "twenty-six": 26,\
- "twenty-seven": 27,\
- "twenty-eight": 28,\
- "twenty-nine": 29,\
- "thirty": 30,\
- "thirty-one": 31,\
- "thirty-two": 32,\
- "thirty-three": 33,\
- "thirty-four": 34,\
- "thirty-five": 35,\
- "thirty-six": 36,\
- "thirty-seven": 37,\
- "thirty-eight": 38,\
- "thirty-nine": 39,\
- "forty": 40\
- };\
- \
- var words = belt.keys(wordToNumber).slice(0, limit);\
- }\
- if (typeof flatten != "undefined") {\
- var _flattenDeep = _.flatten([[1]])[0] !== 1,\
- lodashFlattenDeep = lodash.flatten([[1]])[0] !== 1;\
- }\
- if (typeof isEqual != "undefined") {\
- var objectOfPrimitives = {\
- "boolean": true,\
- "number": 1,\
- "string": "a"\
- };\
- \
- var objectOfObjects = {\
- "boolean": new Boolean(true),\
- "number": new Number(1),\
- "string": new String("a")\
- };\
- \
- var objectOfObjects2 = {\
- "boolean": new Boolean(true),\
- "number": new Number(1),\
- "string": new String("A")\
- };\
- \
- var object2 = {},\
- object3 = {},\
- objects2 = Array(limit),\
- objects3 = Array(limit),\
- numbers2 = Array(limit),\
- numbers3 = Array(limit),\
- nestedNumbers2 = [1, [2], [3, [[4]]]],\
- nestedNumbers3 = [1, [2], [3, [[6]]]];\
- \
- for (index = 0; index < limit; index++) {\
- object2["key" + index] = index;\
- object3["key" + index] = index;\
- objects2[index] = { "num": index };\
- objects3[index] = { "num": index };\
- numbers2[index] = index;\
- numbers3[index] = index;\
- }\
- object3["key" + (limit - 1)] = -1;\
- objects3[limit - 1].num = -1;\
- numbers3[limit - 1] = -1;\
- }\
- if (typeof matches != "undefined") {\
- var source = { "num": 9 };\
- \
- var _matcher = (_.matches || _.noop)(source),\
- lodashMatcher = (lodash.matches || lodash.noop)(source);\
- }\
- if (typeof multiArrays != "undefined") {\
- var twentyValues = belt.shuffle(belt.range(20)),\
- fortyValues = belt.shuffle(belt.range(40)),\
- hundredSortedValues = belt.range(100),\
- hundredValues = belt.shuffle(hundredSortedValues),\
- hundredValues2 = belt.shuffle(hundredValues),\
- hundredTwentyValues = belt.shuffle(belt.range(120)),\
- hundredTwentyValues2 = belt.shuffle(hundredTwentyValues),\
- twoHundredValues = belt.shuffle(belt.range(200)),\
- twoHundredValues2 = belt.shuffle(twoHundredValues);\
- }\
- if (typeof partial != "undefined") {\
- var func = function(greeting, punctuation) {\
- return greeting + " fred" + (punctuation || ".");\
- };\
- \
- var _partial = _.partial(func, "hi"),\
- lodashPartial = lodash.partial(func, "hi");\
- }\
- if (typeof template != "undefined") {\
- var tplData = {\
- "header1": "Header1",\
- "header2": "Header2",\
- "header3": "Header3",\
- "header4": "Header4",\
- "header5": "Header5",\
- "header6": "Header6",\
- "list": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]\
- };\
- \
- var tpl =\
- "<div>" +\
- "<h1 class=\'header1\'><%= header1 %></h1>" +\
- "<h2 class=\'header2\'><%= header2 %></h2>" +\
- "<h3 class=\'header3\'><%= header3 %></h3>" +\
- "<h4 class=\'header4\'><%= header4 %></h4>" +\
- "<h5 class=\'header5\'><%= header5 %></h5>" +\
- "<h6 class=\'header6\'><%= header6 %></h6>" +\
- "<ul class=\'list\'>" +\
- "<% for (var index = 0, length = list.length; index < length; index++) { %>" +\
- "<li class=\'item\'><%= list[index] %></li>" +\
- "<% } %>" +\
- "</ul>" +\
- "</div>";\
- \
- var tplVerbose =\
- "<div>" +\
- "<h1 class=\'header1\'><%= data.header1 %></h1>" +\
- "<h2 class=\'header2\'><%= data.header2 %></h2>" +\
- "<h3 class=\'header3\'><%= data.header3 %></h3>" +\
- "<h4 class=\'header4\'><%= data.header4 %></h4>" +\
- "<h5 class=\'header5\'><%= data.header5 %></h5>" +\
- "<h6 class=\'header6\'><%= data.header6 %></h6>" +\
- "<ul class=\'list\'>" +\
- "<% for (var index = 0, length = data.list.length; index < length; index++) { %>" +\
- "<li class=\'item\'><%= data.list[index] %></li>" +\
- "<% } %>" +\
- "</ul>" +\
- "</div>";\
- \
- var settingsObject = { "variable": "data" };\
- \
- var _tpl = _.template(tpl),\
- _tplVerbose = _.template(tplVerbose, null, settingsObject);\
- \
- var lodashTpl = lodash.template(tpl),\
- lodashTplVerbose = lodash.template(tplVerbose, null, settingsObject);\
- }\
- if (typeof wrap != "undefined") {\
- var add = function(a, b) {\
- return a + b;\
- };\
- \
- var average = function(func, a, b) {\
- return (func(a, b) / 2).toFixed(2);\
- };\
- \
- var _wrapped = _.wrap(add, average);\
- lodashWrapped = lodash.wrap(add, average);\
- }\
- if (typeof zip != "undefined") {\
- var unzipped = [["a", "b", "c"], [1, 2, 3], [true, false, true]];\
- }'
- });
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_(...).map(...).filter(...).take(...).value()`')
- .add(buildName, {
- 'fn': 'lodashChaining.map(square).filter(even).take(100).value()',
- 'teardown': 'function chaining(){}'
- })
- .add(otherName, {
- 'fn': '_chaining.map(square).filter(even).take(100).value()',
- 'teardown': 'function chaining(){}'
- })
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.assign`')
- .add(buildName, {
- 'fn': 'lodashAssign({}, { "a": 1, "b": 2, "c": 3 })',
- 'teardown': 'function assign(){}'
- })
- .add(otherName, {
- 'fn': '_assign({}, { "a": 1, "b": 2, "c": 3 })',
- 'teardown': 'function assign(){}'
- })
- );
- suites.push(
- Benchmark.Suite('`_.assign` with multiple sources')
- .add(buildName, {
- 'fn': 'lodashAssign({}, { "a": 1, "b": 2 }, { "c": 3, "d": 4 })',
- 'teardown': 'function assign(){}'
- })
- .add(otherName, {
- 'fn': '_assign({}, { "a": 1, "b": 2 }, { "c": 3, "d": 4 })',
- 'teardown': 'function assign(){}'
- })
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.bind` (slow path)')
- .add(buildName, {
- 'fn': 'lodash.bind(function() { return this.name; }, { "name": "fred" })',
- 'teardown': 'function bind(){}'
- })
- .add(otherName, {
- 'fn': '_.bind(function() { return this.name; }, { "name": "fred" })',
- 'teardown': 'function bind(){}'
- })
- );
- suites.push(
- Benchmark.Suite('bound call with arguments')
- .add(buildName, {
- 'fn': 'lodashBoundNormal("hi", "!")',
- 'teardown': 'function bind(){}'
- })
- .add(otherName, {
- 'fn': '_boundNormal("hi", "!")',
- 'teardown': 'function bind(){}'
- })
- );
- suites.push(
- Benchmark.Suite('bound and partially applied call with arguments')
- .add(buildName, {
- 'fn': 'lodashBoundPartial("!")',
- 'teardown': 'function bind(){}'
- })
- .add(otherName, {
- 'fn': '_boundPartial("!")',
- 'teardown': 'function bind(){}'
- })
- );
- suites.push(
- Benchmark.Suite('bound multiple times')
- .add(buildName, {
- 'fn': 'lodashBoundMultiple()',
- 'teardown': 'function bind(){}'
- })
- .add(otherName, {
- 'fn': '_boundMultiple()',
- 'teardown': 'function bind(){}'
- })
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.bindAll`')
- .add(buildName, {
- 'fn': 'lodash.bindAll(bindAllObjects[++bindAllCount], funcNames)',
- 'teardown': 'function bindAll(){}'
- })
- .add(otherName, {
- 'fn': '_.bindAll(bindAllObjects[++bindAllCount], funcNames)',
- 'teardown': 'function bindAll(){}'
- })
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.clone` with an array')
- .add(buildName, '\
- lodash.clone(numbers)'
- )
- .add(otherName, '\
- _.clone(numbers)'
- )
- );
- suites.push(
- Benchmark.Suite('`_.clone` with an object')
- .add(buildName, '\
- lodash.clone(object)'
- )
- .add(otherName, '\
- _.clone(object)'
- )
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.compact`')
- .add(buildName, {
- 'fn': 'lodash.compact(uncompacted)',
- 'teardown': 'function compact(){}'
- })
- .add(otherName, {
- 'fn': '_.compact(uncompacted)',
- 'teardown': 'function compact(){}'
- })
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.countBy` with `callback` iterating an array')
- .add(buildName, '\
- lodash.countBy(numbers, function(num) { return num >> 1; })'
- )
- .add(otherName, '\
- _.countBy(numbers, function(num) { return num >> 1; })'
- )
- );
- suites.push(
- Benchmark.Suite('`_.countBy` with `property` name iterating an array')
- .add(buildName, {
- 'fn': 'lodash.countBy(words, "length")',
- 'teardown': 'function countBy(){}'
- })
- .add(otherName, {
- 'fn': '_.countBy(words, "length")',
- 'teardown': 'function countBy(){}'
- })
- );
- suites.push(
- Benchmark.Suite('`_.countBy` with `callback` iterating an object')
- .add(buildName, {
- 'fn': 'lodash.countBy(wordToNumber, function(num) { return num >> 1; })',
- 'teardown': 'function countBy(){}'
- })
- .add(otherName, {
- 'fn': '_.countBy(wordToNumber, function(num) { return num >> 1; })',
- 'teardown': 'function countBy(){}'
- })
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.defaults`')
- .add(buildName, '\
- lodash.defaults({ "key2": 2, "key6": 6, "key18": 18 }, object)'
- )
- .add(otherName, '\
- _.defaults({ "key2": 2, "key6": 6, "key18": 18 }, object)'
- )
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.difference`')
- .add(buildName, '\
- lodash.difference(numbers, twoNumbers, fourNumbers)'
- )
- .add(otherName, '\
- _.difference(numbers, twoNumbers, fourNumbers)'
- )
- );
- suites.push(
- Benchmark.Suite('`_.difference` iterating 20 and 40 elements')
- .add(buildName, {
- 'fn': 'lodash.difference(twentyValues, fortyValues)',
- 'teardown': 'function multiArrays(){}'
- })
- .add(otherName, {
- 'fn': '_.difference(twentyValues, fortyValues)',
- 'teardown': 'function multiArrays(){}'
- })
- );
- suites.push(
- Benchmark.Suite('`_.difference` iterating 200 elements')
- .add(buildName, {
- 'fn': 'lodash.difference(twoHundredValues, twoHundredValues2)',
- 'teardown': 'function multiArrays(){}'
- })
- .add(otherName, {
- 'fn': '_.difference(twoHundredValues, twoHundredValues2)',
- 'teardown': 'function multiArrays(){}'
- })
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.each` iterating an array')
- .add(buildName, '\
- var result = [];\
- lodash.each(numbers, function(num) {\
- result.push(num * 2);\
- })'
- )
- .add(otherName, '\
- var result = [];\
- _.each(numbers, function(num) {\
- result.push(num * 2);\
- })'
- )
- );
- suites.push(
- Benchmark.Suite('`_.each` iterating an object')
- .add(buildName, '\
- var result = [];\
- lodash.each(object, function(num) {\
- result.push(num * 2);\
- })'
- )
- .add(otherName, '\
- var result = [];\
- _.each(object, function(num) {\
- result.push(num * 2);\
- })'
- )
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.every` iterating an array')
- .add(buildName, '\
- lodash.every(numbers, function(num) {\
- return num < limit;\
- })'
- )
- .add(otherName, '\
- _.every(numbers, function(num) {\
- return num < limit;\
- })'
- )
- );
- suites.push(
- Benchmark.Suite('`_.every` iterating an object')
- .add(buildName, '\
- lodash.every(object, function(num) {\
- return num < limit;\
- })'
- )
- .add(otherName, '\
- _.every(object, function(num) {\
- return num < limit;\
- })'
- )
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.filter` iterating an array')
- .add(buildName, '\
- lodash.filter(numbers, function(num) {\
- return num % 2;\
- })'
- )
- .add(otherName, '\
- _.filter(numbers, function(num) {\
- return num % 2;\
- })'
- )
- );
- suites.push(
- Benchmark.Suite('`_.filter` iterating an object')
- .add(buildName, '\
- lodash.filter(object, function(num) {\
- return num % 2\
- })'
- )
- .add(otherName, '\
- _.filter(object, function(num) {\
- return num % 2\
- })'
- )
- );
- suites.push(
- Benchmark.Suite('`_.filter` with `_.matches` shorthand')
- .add(buildName, {
- 'fn': 'lodash.filter(objects, source)',
- 'teardown': 'function matches(){}'
- })
- .add(otherName, {
- 'fn': '_.filter(objects, source)',
- 'teardown': 'function matches(){}'
- })
- );
- suites.push(
- Benchmark.Suite('`_.filter` with `_.matches` predicate')
- .add(buildName, {
- 'fn': 'lodash.filter(objects, lodashMatcher)',
- 'teardown': 'function matches(){}'
- })
- .add(otherName, {
- 'fn': '_.filter(objects, _matcher)',
- 'teardown': 'function matches(){}'
- })
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.find` iterating an array')
- .add(buildName, '\
- lodash.find(numbers, function(num) {\
- return num === (limit - 1);\
- })'
- )
- .add(otherName, '\
- _.find(numbers, function(num) {\
- return num === (limit - 1);\
- })'
- )
- );
- suites.push(
- Benchmark.Suite('`_.find` iterating an object')
- .add(buildName, '\
- lodash.find(object, function(value, key) {\
- return /\D9$/.test(key);\
- })'
- )
- .add(otherName, '\
- _.find(object, function(value, key) {\
- return /\D9$/.test(key);\
- })'
- )
- );
- // Avoid Underscore induced `OutOfMemoryError` in Rhino and Ringo.
- suites.push(
- Benchmark.Suite('`_.find` with `_.matches` shorthand')
- .add(buildName, {
- 'fn': 'lodash.find(objects, source)',
- 'teardown': 'function matches(){}'
- })
- .add(otherName, {
- 'fn': '_.find(objects, source)',
- 'teardown': 'function matches(){}'
- })
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.flatten`')
- .add(buildName, {
- 'fn': 'lodash.flatten(nestedNumbers, !lodashFlattenDeep)',
- 'teardown': 'function flatten(){}'
- })
- .add(otherName, {
- 'fn': '_.flatten(nestedNumbers, !_flattenDeep)',
- 'teardown': 'function flatten(){}'
- })
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.flattenDeep` nested arrays of numbers')
- .add(buildName, {
- 'fn': 'lodash.flattenDeep(nestedNumbers)',
- 'teardown': 'function flatten(){}'
- })
- .add(otherName, {
- 'fn': '_.flattenDeep(nestedNumbers)',
- 'teardown': 'function flatten(){}'
- })
- );
- suites.push(
- Benchmark.Suite('`_.flattenDeep` nest arrays of objects')
- .add(buildName, {
- 'fn': 'lodash.flattenDeep(nestedObjects)',
- 'teardown': 'function flatten(){}'
- })
- .add(otherName, {
- 'fn': '_.flattenDeep(nestedObjects)',
- 'teardown': 'function flatten(){}'
- })
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.flowRight`')
- .add(buildName, {
- 'fn': 'lodash.flowRight(compAddThree, compAddTwo, compAddOne)',
- 'teardown': 'function flowRight(){}'
- })
- .add(otherName, {
- 'fn': '_.flowRight(compAddThree, compAddTwo, compAddOne)',
- 'teardown': 'function flowRight(){}'
- })
- );
- suites.push(
- Benchmark.Suite('composed call')
- .add(buildName, {
- 'fn': 'lodashComposed(0)',
- 'teardown': 'function flowRight(){}'
- })
- .add(otherName, {
- 'fn': '_composed(0)',
- 'teardown': 'function flowRight(){}'
- })
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.functions`')
- .add(buildName, '\
- lodash.functions(lodash)'
- )
- .add(otherName, '\
- _.functions(lodash)'
- )
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.groupBy` with `callback` iterating an array')
- .add(buildName, '\
- lodash.groupBy(numbers, function(num) { return num >> 1; })'
- )
- .add(otherName, '\
- _.groupBy(numbers, function(num) { return num >> 1; })'
- )
- );
- suites.push(
- Benchmark.Suite('`_.groupBy` with `property` name iterating an array')
- .add(buildName, {
- 'fn': 'lodash.groupBy(words, "length")',
- 'teardown': 'function countBy(){}'
- })
- .add(otherName, {
- 'fn': '_.groupBy(words, "length")',
- 'teardown': 'function countBy(){}'
- })
- );
- suites.push(
- Benchmark.Suite('`_.groupBy` with `callback` iterating an object')
- .add(buildName, {
- 'fn': 'lodash.groupBy(wordToNumber, function(num) { return num >> 1; })',
- 'teardown': 'function countBy(){}'
- })
- .add(otherName, {
- 'fn': '_.groupBy(wordToNumber, function(num) { return num >> 1; })',
- 'teardown': 'function countBy(){}'
- })
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.includes` searching an array')
- .add(buildName, '\
- lodash.includes(numbers, limit - 1)'
- )
- .add(otherName, '\
- _.includes(numbers, limit - 1)'
- )
- );
- suites.push(
- Benchmark.Suite('`_.includes` searching an object')
- .add(buildName, '\
- lodash.includes(object, limit - 1)'
- )
- .add(otherName, '\
- _.includes(object, limit - 1)'
- )
- );
- if (lodash.includes('ab', 'ab') && _.includes('ab', 'ab')) {
- suites.push(
- Benchmark.Suite('`_.includes` searching a string')
- .add(buildName, '\
- lodash.includes(strNumbers, "," + (limit - 1))'
- )
- .add(otherName, '\
- _.includes(strNumbers, "," + (limit - 1))'
- )
- );
- }
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.indexOf`')
- .add(buildName, {
- 'fn': 'lodash.indexOf(hundredSortedValues, 99)',
- 'teardown': 'function multiArrays(){}'
- })
- .add(otherName, {
- 'fn': '_.indexOf(hundredSortedValues, 99)',
- 'teardown': 'function multiArrays(){}'
- })
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.intersection`')
- .add(buildName, '\
- lodash.intersection(numbers, twoNumbers, fourNumbers)'
- )
- .add(otherName, '\
- _.intersection(numbers, twoNumbers, fourNumbers)'
- )
- );
- suites.push(
- Benchmark.Suite('`_.intersection` iterating 120 elements')
- .add(buildName, {
- 'fn': 'lodash.intersection(hundredTwentyValues, hundredTwentyValues2)',
- 'teardown': 'function multiArrays(){}'
- })
- .add(otherName, {
- 'fn': '_.intersection(hundredTwentyValues, hundredTwentyValues2)',
- 'teardown': 'function multiArrays(){}'
- })
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.invert`')
- .add(buildName, '\
- lodash.invert(object)'
- )
- .add(otherName, '\
- _.invert(object)'
- )
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.invokeMap` iterating an array')
- .add(buildName, '\
- lodash.invokeMap(numbers, "toFixed")'
- )
- .add(otherName, '\
- _.invokeMap(numbers, "toFixed")'
- )
- );
- suites.push(
- Benchmark.Suite('`_.invokeMap` with arguments iterating an array')
- .add(buildName, '\
- lodash.invokeMap(numbers, "toFixed", 1)'
- )
- .add(otherName, '\
- _.invokeMap(numbers, "toFixed", 1)'
- )
- );
- suites.push(
- Benchmark.Suite('`_.invokeMap` with a function for `path` iterating an array')
- .add(buildName, '\
- lodash.invokeMap(numbers, Number.prototype.toFixed, 1)'
- )
- .add(otherName, '\
- _.invokeMap(numbers, Number.prototype.toFixed, 1)'
- )
- );
- suites.push(
- Benchmark.Suite('`_.invokeMap` iterating an object')
- .add(buildName, '\
- lodash.invokeMap(object, "toFixed", 1)'
- )
- .add(otherName, '\
- _.invokeMap(object, "toFixed", 1)'
- )
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.isEqual` comparing primitives')
- .add(buildName, {
- 'fn': '\
- lodash.isEqual(1, "1");\
- lodash.isEqual(1, 1)',
- 'teardown': 'function isEqual(){}'
- })
- .add(otherName, {
- 'fn': '\
- _.isEqual(1, "1");\
- _.isEqual(1, 1);',
- 'teardown': 'function isEqual(){}'
- })
- );
- suites.push(
- Benchmark.Suite('`_.isEqual` comparing primitives and their object counterparts (edge case)')
- .add(buildName, {
- 'fn': '\
- lodash.isEqual(objectOfPrimitives, objectOfObjects);\
- lodash.isEqual(objectOfPrimitives, objectOfObjects2)',
- 'teardown': 'function isEqual(){}'
- })
- .add(otherName, {
- 'fn': '\
- _.isEqual(objectOfPrimitives, objectOfObjects);\
- _.isEqual(objectOfPrimitives, objectOfObjects2)',
- 'teardown': 'function isEqual(){}'
- })
- );
- suites.push(
- Benchmark.Suite('`_.isEqual` comparing arrays')
- .add(buildName, {
- 'fn': '\
- lodash.isEqual(numbers, numbers2);\
- lodash.isEqual(numbers2, numbers3)',
- 'teardown': 'function isEqual(){}'
- })
- .add(otherName, {
- 'fn': '\
- _.isEqual(numbers, numbers2);\
- _.isEqual(numbers2, numbers3)',
- 'teardown': 'function isEqual(){}'
- })
- );
- suites.push(
- Benchmark.Suite('`_.isEqual` comparing nested arrays')
- .add(buildName, {
- 'fn': '\
- lodash.isEqual(nestedNumbers, nestedNumbers2);\
- lodash.isEqual(nestedNumbers2, nestedNumbers3)',
- 'teardown': 'function isEqual(){}'
- })
- .add(otherName, {
- 'fn': '\
- _.isEqual(nestedNumbers, nestedNumbers2);\
- _.isEqual(nestedNumbers2, nestedNumbers3)',
- 'teardown': 'function isEqual(){}'
- })
- );
- suites.push(
- Benchmark.Suite('`_.isEqual` comparing arrays of objects')
- .add(buildName, {
- 'fn': '\
- lodash.isEqual(objects, objects2);\
- lodash.isEqual(objects2, objects3)',
- 'teardown': 'function isEqual(){}'
- })
- .add(otherName, {
- 'fn': '\
- _.isEqual(objects, objects2);\
- _.isEqual(objects2, objects3)',
- 'teardown': 'function isEqual(){}'
- })
- );
- suites.push(
- Benchmark.Suite('`_.isEqual` comparing objects')
- .add(buildName, {
- 'fn': '\
- lodash.isEqual(object, object2);\
- lodash.isEqual(object2, object3)',
- 'teardown': 'function isEqual(){}'
- })
- .add(otherName, {
- 'fn': '\
- _.isEqual(object, object2);\
- _.isEqual(object2, object3)',
- 'teardown': 'function isEqual(){}'
- })
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.isArguments`, `_.isDate`, `_.isFunction`, `_.isNumber`, `_.isObject`, `_.isRegExp`')
- .add(buildName, '\
- lodash.isArguments(arguments);\
- lodash.isArguments(object);\
- lodash.isDate(date);\
- lodash.isDate(object);\
- lodash.isFunction(lodash);\
- lodash.isFunction(object);\
- lodash.isNumber(1);\
- lodash.isNumber(object);\
- lodash.isObject(object);\
- lodash.isObject(1);\
- lodash.isRegExp(regexp);\
- lodash.isRegExp(object)'
- )
- .add(otherName, '\
- _.isArguments(arguments);\
- _.isArguments(object);\
- _.isDate(date);\
- _.isDate(object);\
- _.isFunction(_);\
- _.isFunction(object);\
- _.isNumber(1);\
- _.isNumber(object);\
- _.isObject(object);\
- _.isObject(1);\
- _.isRegExp(regexp);\
- _.isRegExp(object)'
- )
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.keys` (uses native `Object.keys` if available)')
- .add(buildName, '\
- lodash.keys(object)'
- )
- .add(otherName, '\
- _.keys(object)'
- )
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.lastIndexOf`')
- .add(buildName, {
- 'fn': 'lodash.lastIndexOf(hundredSortedValues, 0)',
- 'teardown': 'function multiArrays(){}'
- })
- .add(otherName, {
- 'fn': '_.lastIndexOf(hundredSortedValues, 0)',
- 'teardown': 'function multiArrays(){}'
- })
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.map` iterating an array')
- .add(buildName, '\
- lodash.map(objects, function(value) {\
- return value.num;\
- })'
- )
- .add(otherName, '\
- _.map(objects, function(value) {\
- return value.num;\
- })'
- )
- );
- suites.push(
- Benchmark.Suite('`_.map` iterating an object')
- .add(buildName, '\
- lodash.map(object, function(value) {\
- return value;\
- })'
- )
- .add(otherName, '\
- _.map(object, function(value) {\
- return value;\
- })'
- )
- );
- suites.push(
- Benchmark.Suite('`_.map` with `_.property` shorthand')
- .add(buildName, '\
- lodash.map(objects, "num")'
- )
- .add(otherName, '\
- _.map(objects, "num")'
- )
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.max`')
- .add(buildName, '\
- lodash.max(numbers)'
- )
- .add(otherName, '\
- _.max(numbers)'
- )
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.min`')
- .add(buildName, '\
- lodash.min(numbers)'
- )
- .add(otherName, '\
- _.min(numbers)'
- )
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.omit` iterating 20 properties, omitting 2 keys')
- .add(buildName, '\
- lodash.omit(object, "key6", "key13")'
- )
- .add(otherName, '\
- _.omit(object, "key6", "key13")'
- )
- );
- suites.push(
- Benchmark.Suite('`_.omit` iterating 40 properties, omitting 20 keys')
- .add(buildName, {
- 'fn': 'lodash.omit(wordToNumber, words)',
- 'teardown': 'function omit(){}'
- })
- .add(otherName, {
- 'fn': '_.omit(wordToNumber, words)',
- 'teardown': 'function omit(){}'
- })
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.partial` (slow path)')
- .add(buildName, {
- 'fn': 'lodash.partial(function(greeting) { return greeting + " " + this.name; }, "hi")',
- 'teardown': 'function partial(){}'
- })
- .add(otherName, {
- 'fn': '_.partial(function(greeting) { return greeting + " " + this.name; }, "hi")',
- 'teardown': 'function partial(){}'
- })
- );
- suites.push(
- Benchmark.Suite('partially applied call with arguments')
- .add(buildName, {
- 'fn': 'lodashPartial("!")',
- 'teardown': 'function partial(){}'
- })
- .add(otherName, {
- 'fn': '_partial("!")',
- 'teardown': 'function partial(){}'
- })
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.partition` iterating an array')
- .add(buildName, '\
- lodash.partition(numbers, function(num) {\
- return num % 2;\
- })'
- )
- .add(otherName, '\
- _.partition(numbers, function(num) {\
- return num % 2;\
- })'
- )
- );
- suites.push(
- Benchmark.Suite('`_.partition` iterating an object')
- .add(buildName, '\
- lodash.partition(object, function(num) {\
- return num % 2;\
- })'
- )
- .add(otherName, '\
- _.partition(object, function(num) {\
- return num % 2;\
- })'
- )
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.pick`')
- .add(buildName, '\
- lodash.pick(object, "key6", "key13")'
- )
- .add(otherName, '\
- _.pick(object, "key6", "key13")'
- )
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.reduce` iterating an array')
- .add(buildName, '\
- lodash.reduce(numbers, function(result, value, index) {\
- result[index] = value;\
- return result;\
- }, {})'
- )
- .add(otherName, '\
- _.reduce(numbers, function(result, value, index) {\
- result[index] = value;\
- return result;\
- }, {})'
- )
- );
- suites.push(
- Benchmark.Suite('`_.reduce` iterating an object')
- .add(buildName, '\
- lodash.reduce(object, function(result, value, key) {\
- result.push(key, value);\
- return result;\
- }, [])'
- )
- .add(otherName, '\
- _.reduce(object, function(result, value, key) {\
- result.push(key, value);\
- return result;\
- }, [])'
- )
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.reduceRight` iterating an array')
- .add(buildName, '\
- lodash.reduceRight(numbers, function(result, value, index) {\
- result[index] = value;\
- return result;\
- }, {})'
- )
- .add(otherName, '\
- _.reduceRight(numbers, function(result, value, index) {\
- result[index] = value;\
- return result;\
- }, {})'
- )
- );
- suites.push(
- Benchmark.Suite('`_.reduceRight` iterating an object')
- .add(buildName, '\
- lodash.reduceRight(object, function(result, value, key) {\
- result.push(key, value);\
- return result;\
- }, [])'
- )
- .add(otherName, '\
- _.reduceRight(object, function(result, value, key) {\
- result.push(key, value);\
- return result;\
- }, [])'
- )
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.reject` iterating an array')
- .add(buildName, '\
- lodash.reject(numbers, function(num) {\
- return num % 2;\
- })'
- )
- .add(otherName, '\
- _.reject(numbers, function(num) {\
- return num % 2;\
- })'
- )
- );
- suites.push(
- Benchmark.Suite('`_.reject` iterating an object')
- .add(buildName, '\
- lodash.reject(object, function(num) {\
- return num % 2;\
- })'
- )
- .add(otherName, '\
- _.reject(object, function(num) {\
- return num % 2;\
- })'
- )
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.sampleSize`')
- .add(buildName, '\
- lodash.sampleSize(numbers, limit / 2)'
- )
- .add(otherName, '\
- _.sampleSize(numbers, limit / 2)'
- )
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.shuffle`')
- .add(buildName, '\
- lodash.shuffle(numbers)'
- )
- .add(otherName, '\
- _.shuffle(numbers)'
- )
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.size` with an object')
- .add(buildName, '\
- lodash.size(object)'
- )
- .add(otherName, '\
- _.size(object)'
- )
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.some` iterating an array')
- .add(buildName, '\
- lodash.some(numbers, function(num) {\
- return num == (limit - 1);\
- })'
- )
- .add(otherName, '\
- _.some(numbers, function(num) {\
- return num == (limit - 1);\
- })'
- )
- );
- suites.push(
- Benchmark.Suite('`_.some` iterating an object')
- .add(buildName, '\
- lodash.some(object, function(num) {\
- return num == (limit - 1);\
- })'
- )
- .add(otherName, '\
- _.some(object, function(num) {\
- return num == (limit - 1);\
- })'
- )
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.sortBy` with `callback`')
- .add(buildName, '\
- lodash.sortBy(numbers, function(num) { return Math.sin(num); })'
- )
- .add(otherName, '\
- _.sortBy(numbers, function(num) { return Math.sin(num); })'
- )
- );
- suites.push(
- Benchmark.Suite('`_.sortBy` with `property` name')
- .add(buildName, {
- 'fn': 'lodash.sortBy(words, "length")',
- 'teardown': 'function countBy(){}'
- })
- .add(otherName, {
- 'fn': '_.sortBy(words, "length")',
- 'teardown': 'function countBy(){}'
- })
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.sortedIndex`')
- .add(buildName, '\
- lodash.sortedIndex(numbers, limit)'
- )
- .add(otherName, '\
- _.sortedIndex(numbers, limit)'
- )
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.sortedIndexBy`')
- .add(buildName, {
- 'fn': '\
- lodash.sortedIndexBy(words, "twenty-five", function(value) {\
- return wordToNumber[value];\
- })',
- 'teardown': 'function countBy(){}'
- })
- .add(otherName, {
- 'fn': '\
- _.sortedIndexBy(words, "twenty-five", function(value) {\
- return wordToNumber[value];\
- })',
- 'teardown': 'function countBy(){}'
- })
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.sortedIndexOf`')
- .add(buildName, {
- 'fn': 'lodash.sortedIndexOf(hundredSortedValues, 99)',
- 'teardown': 'function multiArrays(){}'
- })
- .add(otherName, {
- 'fn': '_.sortedIndexOf(hundredSortedValues, 99)',
- 'teardown': 'function multiArrays(){}'
- })
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.sortedLastIndexOf`')
- .add(buildName, {
- 'fn': 'lodash.sortedLastIndexOf(hundredSortedValues, 0)',
- 'teardown': 'function multiArrays(){}'
- })
- .add(otherName, {
- 'fn': '_.sortedLastIndexOf(hundredSortedValues, 0)',
- 'teardown': 'function multiArrays(){}'
- })
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.sum`')
- .add(buildName, '\
- lodash.sum(numbers)'
- )
- .add(otherName, '\
- _.sum(numbers)'
- )
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.template` (slow path)')
- .add(buildName, {
- 'fn': 'lodash.template(tpl)(tplData)',
- 'teardown': 'function template(){}'
- })
- .add(otherName, {
- 'fn': '_.template(tpl)(tplData)',
- 'teardown': 'function template(){}'
- })
- );
- suites.push(
- Benchmark.Suite('compiled template')
- .add(buildName, {
- 'fn': 'lodashTpl(tplData)',
- 'teardown': 'function template(){}'
- })
- .add(otherName, {
- 'fn': '_tpl(tplData)',
- 'teardown': 'function template(){}'
- })
- );
- suites.push(
- Benchmark.Suite('compiled template without a with-statement')
- .add(buildName, {
- 'fn': 'lodashTplVerbose(tplData)',
- 'teardown': 'function template(){}'
- })
- .add(otherName, {
- 'fn': '_tplVerbose(tplData)',
- 'teardown': 'function template(){}'
- })
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.times`')
- .add(buildName, '\
- var result = [];\
- lodash.times(limit, function(n) { result.push(n); })'
- )
- .add(otherName, '\
- var result = [];\
- _.times(limit, function(n) { result.push(n); })'
- )
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.toArray` with an array (edge case)')
- .add(buildName, '\
- lodash.toArray(numbers)'
- )
- .add(otherName, '\
- _.toArray(numbers)'
- )
- );
- suites.push(
- Benchmark.Suite('`_.toArray` with an object')
- .add(buildName, '\
- lodash.toArray(object)'
- )
- .add(otherName, '\
- _.toArray(object)'
- )
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.toPairs`')
- .add(buildName, '\
- lodash.toPairs(object)'
- )
- .add(otherName, '\
- _.toPairs(object)'
- )
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.unescape` string without html entities')
- .add(buildName, '\
- lodash.unescape("`&`, `<`, `>`, `\\"`, and `\'`")'
- )
- .add(otherName, '\
- _.unescape("`&`, `<`, `>`, `\\"`, and `\'`")'
- )
- );
- suites.push(
- Benchmark.Suite('`_.unescape` string with html entities')
- .add(buildName, '\
- lodash.unescape("`&`, `<`, `>`, `"`, and `'`")'
- )
- .add(otherName, '\
- _.unescape("`&`, `<`, `>`, `"`, and `'`")'
- )
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.union`')
- .add(buildName, '\
- lodash.union(numbers, twoNumbers, fourNumbers)'
- )
- .add(otherName, '\
- _.union(numbers, twoNumbers, fourNumbers)'
- )
- );
- suites.push(
- Benchmark.Suite('`_.union` iterating an array of 200 elements')
- .add(buildName, {
- 'fn': 'lodash.union(hundredValues, hundredValues2)',
- 'teardown': 'function multiArrays(){}'
- })
- .add(otherName, {
- 'fn': '_.union(hundredValues, hundredValues2)',
- 'teardown': 'function multiArrays(){}'
- })
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.uniq`')
- .add(buildName, '\
- lodash.uniq(numbers.concat(twoNumbers, fourNumbers))'
- )
- .add(otherName, '\
- _.uniq(numbers.concat(twoNumbers, fourNumbers))'
- )
- );
- suites.push(
- Benchmark.Suite('`_.uniq` iterating an array of 200 elements')
- .add(buildName, {
- 'fn': 'lodash.uniq(twoHundredValues)',
- 'teardown': 'function multiArrays(){}'
- })
- .add(otherName, {
- 'fn': '_.uniq(twoHundredValues)',
- 'teardown': 'function multiArrays(){}'
- })
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.uniqBy`')
- .add(buildName, '\
- lodash.uniqBy(numbers.concat(twoNumbers, fourNumbers), function(num) {\
- return num % 2;\
- })'
- )
- .add(otherName, '\
- _.uniqBy(numbers.concat(twoNumbers, fourNumbers), function(num) {\
- return num % 2;\
- })'
- )
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.values`')
- .add(buildName, '\
- lodash.values(object)'
- )
- .add(otherName, '\
- _.values(object)'
- )
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.without`')
- .add(buildName, '\
- lodash.without(numbers, 9, 12, 14, 15)'
- )
- .add(otherName, '\
- _.without(numbers, 9, 12, 14, 15)'
- )
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.wrap` result called')
- .add(buildName, {
- 'fn': 'lodashWrapped(2, 5)',
- 'teardown': 'function wrap(){}'
- })
- .add(otherName, {
- 'fn': '_wrapped(2, 5)',
- 'teardown': 'function wrap(){}'
- })
- );
- /*--------------------------------------------------------------------------*/
- suites.push(
- Benchmark.Suite('`_.zip`')
- .add(buildName, {
- 'fn': 'lodash.zip.apply(lodash, unzipped)',
- 'teardown': 'function zip(){}'
- })
- .add(otherName, {
- 'fn': '_.zip.apply(_, unzipped)',
- 'teardown': 'function zip(){}'
- })
- );
- /*--------------------------------------------------------------------------*/
- if (Benchmark.platform + '') {
- log(Benchmark.platform);
- }
- // Expose `run` to be called later when executing in a browser.
- if (document) {
- root.run = run;
- } else {
- run();
- }
- }.call(this));
|