diff options
author | talasila <talasila@research.att.com> | 2017-02-07 15:03:57 -0500 |
---|---|---|
committer | talasila <talasila@research.att.com> | 2017-02-07 15:05:15 -0500 |
commit | 4ad39a5c96dd99acf819ce189b13fec946d7506b (patch) | |
tree | a1449286441947cc3d07a45227fa0d6f978e1a7d /ecomp-portal-FE/client/bower_components/lodash/perf | |
parent | 5500448cbd1f374d0ac743ee2fd636fe2d3c0027 (diff) |
Initial OpenECOMP Portal commit
Change-Id: I804b80e0830c092e307da1599bd9fbb5c3e2da77
Signed-off-by: talasila <talasila@research.att.com>
Diffstat (limited to 'ecomp-portal-FE/client/bower_components/lodash/perf')
3 files changed, 2177 insertions, 0 deletions
diff --git a/ecomp-portal-FE/client/bower_components/lodash/perf/asset/perf-ui.js b/ecomp-portal-FE/client/bower_components/lodash/perf/asset/perf-ui.js new file mode 100644 index 00000000..e3ed64b2 --- /dev/null +++ b/ecomp-portal-FE/client/bower_components/lodash/perf/asset/perf-ui.js @@ -0,0 +1,131 @@ +;(function(window) { + 'use strict'; + + /** The base path of the lodash builds. */ + var basePath = '../'; + + /** The lodash build to load. */ + var build = (build = /build=([^&]+)/.exec(location.search)) && decodeURIComponent(build[1]); + + /** The other library to load. */ + var other = (other = /other=([^&]+)/.exec(location.search)) && decodeURIComponent(other[1]); + + /** The `ui` object. */ + var ui = {}; + + /*--------------------------------------------------------------------------*/ + + /** + * Registers an event listener on an element. + * + * @private + * @param {Element} element The element. + * @param {string} eventName The name of the event. + * @param {Function} handler The event handler. + * @returns {Element} The element. + */ + function addListener(element, eventName, handler) { + if (typeof element.addEventListener != 'undefined') { + element.addEventListener(eventName, handler, false); + } else if (typeof element.attachEvent != 'undefined') { + element.attachEvent('on' + eventName, handler); + } + } + + /*--------------------------------------------------------------------------*/ + + // Initialize controls. + addListener(window, 'load', function() { + function eventHandler(event) { + var buildIndex = buildList.selectedIndex, + otherIndex = otherList.selectedIndex, + search = location.search.replace(/^\?|&?(?:build|other)=[^&]*&?/g, ''); + + if (event.stopPropagation) { + event.stopPropagation(); + } else { + event.cancelBubble = true; + } + location.href = + location.href.split('?')[0] + '?' + + (search ? search + '&' : '') + + 'build=' + (buildIndex < 0 ? build : buildList[buildIndex].value) + '&' + + 'other=' + (otherIndex < 0 ? other : otherList[otherIndex].value); + } + + var span1 = document.createElement('span'); + span1.style.cssText = 'float:right'; + span1.innerHTML = + '<label for="perf-build">Build: </label>' + + '<select id="perf-build">' + + '<option value="lodash">lodash</option>' + + '</select>'; + + var span2 = document.createElement('span'); + span2.style.cssText = 'float:right'; + span2.innerHTML = + '<label for="perf-other">Other Library: </label>' + + '<select id="perf-other">' + + '<option value="underscore-dev">Underscore (development)</option>' + + '<option value="underscore">Underscore (production)</option>' + + '<option value="lodash">lodash</option>' + + '</select>'; + + var buildList = span1.lastChild, + otherList = span2.lastChild, + toolbar = document.getElementById('perf-toolbar'); + + toolbar.appendChild(span2); + toolbar.appendChild(span1); + + buildList.selectedIndex = (function() { + switch (build) { + case 'lodash': + case null: return 0; + } + return -1; + }()); + + otherList.selectedIndex = (function() { + switch (other) { + case 'underscore-dev': return 0; + case 'lodash': return 2; + case 'underscore': + case null: return 1; + } + return -1; + }()); + + addListener(buildList, 'change', eventHandler); + addListener(otherList, 'change', eventHandler); + }); + + // The lodash build file path. + ui.buildPath = (function() { + var result; + switch (build) { + case null: build = 'lodash'; + case 'lodash': result = 'dist/lodash.min.js'; break; + default: return build; + } + return basePath + result; + }()); + + // The other library file path. + ui.otherPath = (function() { + var result; + switch (other) { + case 'lodash': result = 'dist/lodash.min.js'; break; + case 'underscore-dev': result = 'vendor/underscore/underscore.js'; break; + case null: other = 'underscore'; + case 'underscore': result = 'vendor/underscore/underscore-min.js'; break; + default: return other; + } + return basePath + result; + }()); + + ui.urlParams = { 'build': build, 'other': other }; + + window.ui = ui; + +}(this)); diff --git a/ecomp-portal-FE/client/bower_components/lodash/perf/index.html b/ecomp-portal-FE/client/bower_components/lodash/perf/index.html new file mode 100644 index 00000000..16d41bf3 --- /dev/null +++ b/ecomp-portal-FE/client/bower_components/lodash/perf/index.html @@ -0,0 +1,69 @@ +<!doctype html> +<html lang="en"> + <head> + <meta charset="utf-8"> + <title>lodash Performance Suite</title> + <style> + html, body { + margin: 0; + padding: 0; + height: 100%; + } + #FirebugUI { + top: 2em; + } + #perf-toolbar { + background-color: #EEE; + color: #5E740B; + font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif; + font-size: small; + padding: 0.5em 0 0.5em 2em; + overflow: hidden; + } + </style> + </head> + <body> + <div id="perf-toolbar"></div> + <script src="../lodash.js"></script> + <script src="../node_modules/platform/platform.js"></script> + <script src="../node_modules/benchmark/benchmark.js"></script> + <script src="../vendor/firebug-lite/src/firebug-lite-debug.js"></script> + <script src="./asset/perf-ui.js"></script> + <script> + document.write('<script src="' + ui.buildPath + '"><\/script>'); + </script> + <script> + var lodash = _.noConflict(); + </script> + <script> + document.write('<script src="' + ui.otherPath + '"><\/script>'); + </script> + <script src="perf.js"></script> + <script> + (function() { + var measured, + perfNow, + begin = new Date; + + function init() { + var fbUI = document.getElementById('FirebugUI'), + fbDoc = fbUI && (fbDoc = fbUI.contentWindow || fbUI.contentDocument).document || fbDoc, + fbCommandLine = fbDoc && fbDoc.getElementById('fbCommandLine'); + + if (!fbCommandLine) { + return setTimeout(init, 15); + } + fbUI.style.height = ( + Math.max(document.documentElement.clientHeight, document.body.clientHeight) - + document.getElementById('perf-toolbar').clientHeight + ) + 'px'; + + fbDoc.body.style.height = fbDoc.documentElement.style.height = '100%'; + setTimeout(run, 15); + } + + window.onload = init; + }()); + </script> + </body> +</html> diff --git a/ecomp-portal-FE/client/bower_components/lodash/perf/perf.js b/ecomp-portal-FE/client/bower_components/lodash/perf/perf.js new file mode 100644 index 00000000..baee142b --- /dev/null +++ b/ecomp-portal-FE/client/bower_components/lodash/perf/perf.js @@ -0,0 +1,1977 @@ +;(function() { + + /** 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)); |