# Benchmark.js v1.0.0

## `Benchmark`
* [`Benchmark`](#benchmarkname-fn--options)
* [`Benchmark.version`](#benchmarkversion)
* [`Benchmark.deepClone`](#benchmarkdeepclonevalue)
* [`Benchmark.each`](#benchmarkeachobject-callback-thisarg)
* [`Benchmark.extend`](#benchmarkextenddestination--source)
* [`Benchmark.filter`](#benchmarkfilterarray-callback-thisarg)
* [`Benchmark.forEach`](#benchmarkforeacharray-callback-thisarg)
* [`Benchmark.formatNumber`](#benchmarkformatnumbernumber)
* [`Benchmark.forOwn`](#benchmarkforownobject-callback-thisarg)
* [`Benchmark.hasKey`](#benchmarkhaskeyobject-key)
* [`Benchmark.indexOf`](#benchmarkindexofarray-value--fromindex0)
* [`Benchmark.interpolate`](#benchmarkinterpolatestring-object)
* [`Benchmark.invoke`](#benchmarkinvokebenches-name--arg1-arg2-)
* [`Benchmark.join`](#benchmarkjoinobject--separator1--separator2:)
* [`Benchmark.map`](#benchmarkmaparray-callback-thisarg)
* [`Benchmark.pluck`](#benchmarkpluckarray-property)
* [`Benchmark.reduce`](#benchmarkreducearray-callback-accumulator)






## `Benchmark.prototype`
* [`Benchmark.prototype.aborted`](#benchmarkprototypeaborted)
* [`Benchmark.prototype.compiled`](#benchmarkprototypecompiled)
* [`Benchmark.prototype.count`](#benchmarkprototypecount)
* [`Benchmark.prototype.cycles`](#benchmarkprototypecycles)
* [`Benchmark.prototype.fn`](#benchmarkprototypefn)
* [`Benchmark.prototype.hz`](#benchmarkprototypehz)
* [`Benchmark.prototype.running`](#benchmarkprototyperunning)
* [`Benchmark.prototype.setup`](#benchmarkprototypesetup)
* [`Benchmark.prototype.teardown`](#benchmarkprototypeteardown)
* [`Benchmark.prototype.abort`](#benchmarkprototypeabort)
* [`Benchmark.prototype.clone`](#benchmarkprototypecloneoptions)
* [`Benchmark.prototype.compare`](#benchmarkprototypecompareother)
* [`Benchmark.prototype.emit`](#benchmarkprototypeemittype)
* [`Benchmark.prototype.listeners`](#benchmarkprototypelistenerstype)
* [`Benchmark.prototype.off`](#benchmarkprototypeofftype-listener)
* [`Benchmark.prototype.on`](#benchmarkprototypeontype-listener)
* [`Benchmark.prototype.reset`](#benchmarkprototypereset)
* [`Benchmark.prototype.run`](#benchmarkprototyperunoptions)
* [`Benchmark.prototype.toString`](#benchmarkprototypetostring)






## `Benchmark.options`
* [`Benchmark.options`](#benchmarkoptions)
* [`Benchmark.options.async`](#benchmarkoptionsasync)
* [`Benchmark.options.defer`](#benchmarkoptionsdefer)
* [`Benchmark.options.delay`](#benchmarkoptionsdelay)
* [`Benchmark.options.id`](#benchmarkoptionsid)
* [`Benchmark.options.initCount`](#benchmarkoptionsinitcount)
* [`Benchmark.options.maxTime`](#benchmarkoptionsmaxtime)
* [`Benchmark.options.minSamples`](#benchmarkoptionsminsamples)
* [`Benchmark.options.minTime`](#benchmarkoptionsmintime)
* [`Benchmark.options.name`](#benchmarkoptionsname)
* [`Benchmark.options.onAbort`](#benchmarkoptionsonabort)
* [`Benchmark.options.onComplete`](#benchmarkoptionsoncomplete)
* [`Benchmark.options.onCycle`](#benchmarkoptionsoncycle)
* [`Benchmark.options.onError`](#benchmarkoptionsonerror)
* [`Benchmark.options.onReset`](#benchmarkoptionsonreset)
* [`Benchmark.options.onStart`](#benchmarkoptionsonstart)






## `Benchmark.platform`
* [`Benchmark.platform`](#benchmarkplatform)
* [`Benchmark.platform.description`](#benchmarkplatformdescription)
* [`Benchmark.platform.layout`](#benchmarkplatformlayout)
* [`Benchmark.platform.manufacturer`](#benchmarkplatformmanufacturer)
* [`Benchmark.platform.name`](#benchmarkplatformname)
* [`Benchmark.platform.os`](#benchmarkplatformos)
* [`Benchmark.platform.prerelease`](#benchmarkplatformprerelease)
* [`Benchmark.platform.product`](#benchmarkplatformproduct)
* [`Benchmark.platform.version`](#benchmarkplatformversion)
* [`Benchmark.platform.toString`](#benchmarkplatformtostring)






## `Benchmark.support`
* [`Benchmark.support`](#benchmarksupport)
* [`Benchmark.support.air`](#benchmarksupportair)
* [`Benchmark.support.argumentsClass`](#benchmarksupportargumentsclass)
* [`Benchmark.support.browser`](#benchmarksupportbrowser)
* [`Benchmark.support.charByIndex`](#benchmarksupportcharbyindex)
* [`Benchmark.support.charByOwnIndex`](#benchmarksupportcharbyownindex)
* [`Benchmark.support.decompilation`](#benchmarksupportdecompilation)
* [`Benchmark.support.descriptors`](#benchmarksupportdescriptors)
* [`Benchmark.support.getAllKeys`](#benchmarksupportgetallkeys)
* [`Benchmark.support.iteratesOwnLast`](#benchmarksupportiteratesownfirst)
* [`Benchmark.support.java`](#benchmarksupportjava)
* [`Benchmark.support.nodeClass`](#benchmarksupportnodeclass)
* [`Benchmark.support.timeout`](#benchmarksupporttimeout)






## `Benchmark.prototype.error`
* [`Benchmark.prototype.error`](#benchmarkprototypeerror)






## `Benchmark.prototype.stats`
* [`Benchmark.prototype.stats`](#benchmarkprototypestats)
* [`Benchmark.prototype.stats.deviation`](#benchmark-statsdeviation)
* [`Benchmark.prototype.stats.mean`](#benchmark-statsmean)
* [`Benchmark.prototype.stats.moe`](#benchmark-statsmoe)
* [`Benchmark.prototype.stats.rme`](#benchmark-statsrme)
* [`Benchmark.prototype.stats.sample`](#benchmark-statssample)
* [`Benchmark.prototype.stats.sem`](#benchmark-statssem)
* [`Benchmark.prototype.stats.variance`](#benchmark-statsvariance)






## `Benchmark.prototype.times`
* [`Benchmark.prototype.times`](#benchmarkprototypetimes)
* [`Benchmark.prototype.times.cycle`](#benchmark-timescycle)
* [`Benchmark.prototype.times.elapsed`](#benchmark-timeselapsed)
* [`Benchmark.prototype.times.period`](#benchmark-timesperiod)
* [`Benchmark.prototype.times.timeStamp`](#benchmark-timestimestamp)






## `Benchmark.Deferred`
* [`Benchmark.Deferred`](#benchmarkdeferredclone)






## `Benchmark.Deferred.prototype`
* [`Benchmark.Deferred.prototype.benchmark`](#benchmarkdeferredprototypebenchmark)
* [`Benchmark.Deferred.prototype.cycles`](#benchmarkdeferredprototypecycles)
* [`Benchmark.Deferred.prototype.elapsed`](#benchmarkdeferredprototypeelapsed)
* [`Benchmark.Deferred.prototype.resolve`](#benchmarkdeferredprototyperesolve)
* [`Benchmark.Deferred.prototype.timeStamp`](#benchmarkdeferredprototypetimestamp)






## `Benchmark.Event`
* [`Benchmark.Event`](#benchmarkeventtype)






## `Benchmark.Event.prototype`
* [`Benchmark.Event.prototype.aborted`](#benchmarkeventprototypeaborted)
* [`Benchmark.Event.prototype.cancelled`](#benchmarkeventprototypecancelled)
* [`Benchmark.Event.prototype.result`](#benchmarkeventprototyperesult)
* [`Benchmark.Event.prototype.timeStamp`](#benchmarkeventprototypetimestamp)
* [`Benchmark.Event.prototype.type`](#benchmarkeventprototypetype)






## `Benchmark.Event.prototype.currentTarget`
* [`Benchmark.Event.prototype.currentTarget`](#benchmarkeventprototypecurrenttarget)






## `Benchmark.Event.prototype.target`
* [`Benchmark.Event.prototype.target`](#benchmarkeventprototypetarget)






## `Benchmark.Suite`
* [`Benchmark.Suite`](#benchmarksuitename--options)






## `Benchmark.Suite.prototype`
* [`Benchmark.Suite.prototype.aborted`](#benchmarksuiteprototypeaborted)
* [`Benchmark.Suite.prototype.length`](#benchmarksuiteprototypelength)
* [`Benchmark.Suite.prototype.running`](#benchmarksuiteprototyperunning)
* [`Benchmark.Suite.prototype.abort`](#benchmarksuiteprototypeabort)
* [`Benchmark.Suite.prototype.add`](#benchmarksuiteprototypeaddname-fn--options)
* [`Benchmark.Suite.prototype.clone`](#benchmarksuiteprototypecloneoptions)
* [`Benchmark.Suite.prototype.emit`](#benchmarkprototypeemittype)
* [`Benchmark.Suite.prototype.filter`](#benchmarksuiteprototypefiltercallback)
* [`Benchmark.Suite.prototype.forEach`](#benchmarksuiteprototypeforeachcallback)
* [`Benchmark.Suite.prototype.indexOf`](#benchmarksuiteprototypeindexofvalue)
* [`Benchmark.Suite.prototype.invoke`](#benchmarksuiteprototypeinvokename--arg1-arg2-)
* [`Benchmark.Suite.prototype.join`](#benchmarksuiteprototypejoinseparator-)
* [`Benchmark.Suite.prototype.listeners`](#benchmarkprototypelistenerstype)
* [`Benchmark.Suite.prototype.map`](#benchmarksuiteprototypemapcallback)
* [`Benchmark.Suite.prototype.off`](#benchmarkprototypeofftype-listener)
* [`Benchmark.Suite.prototype.on`](#benchmarkprototypeontype-listener)
* [`Benchmark.Suite.prototype.pluck`](#benchmarksuiteprototypepluckproperty)
* [`Benchmark.Suite.prototype.pop`](#benchmarksuiteprototypepop)
* [`Benchmark.Suite.prototype.push`](#benchmarksuiteprototypepush)
* [`Benchmark.Suite.prototype.reduce`](#benchmarksuiteprototypereducecallback-accumulator)
* [`Benchmark.Suite.prototype.reset`](#benchmarksuiteprototypereset)
* [`Benchmark.Suite.prototype.reverse`](#benchmarksuiteprototypereverse)
* [`Benchmark.Suite.prototype.run`](#benchmarksuiteprototyperunoptions)
* [`Benchmark.Suite.prototype.shift`](#benchmarksuiteprototypeshift)
* [`Benchmark.Suite.prototype.slice`](#benchmarksuiteprototypeslicestart-end)
* [`Benchmark.Suite.prototype.sort`](#benchmarksuiteprototypesortcomparefnnull)
* [`Benchmark.Suite.prototype.splice`](#benchmarksuiteprototypesplicestart-deletecount--val1-val2-)
* [`Benchmark.Suite.prototype.unshift`](#benchmarksuiteprototypeunshift)






## `Benchmark.Suite.options`
* [`Benchmark.Suite.options`](#benchmarksuiteoptions)
* [`Benchmark.Suite.options.name`](#benchmarksuiteoptionsname)












## `Benchmark`

### `Benchmark(name, fn [, options={}])`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L404 "View in source") [Ⓣ][1]

The Benchmark constructor.

#### Arguments
1. `name` *(String)*: A name to identify the benchmark.
2. `fn` *(Function|String)*: The test to benchmark.
3. `[options={}]` *(Object)*: Options object.

#### Example
~~~ js
// basic usage (the `new` operator is optional)
var bench = new Benchmark(fn);

// or using a name first
var bench = new Benchmark('foo', fn);

// or with options
var bench = new Benchmark('foo', fn, {

  // displayed by Benchmark#toString if `name` is not available
  'id': 'xyz',

  // called when the benchmark starts running
  'onStart': onStart,

  // called after each run cycle
  'onCycle': onCycle,

  // called when aborted
  'onAbort': onAbort,

  // called when a test errors
  'onError': onError,

  // called when reset
  'onReset': onReset,

  // called when the benchmark completes running
  'onComplete': onComplete,

  // compiled/called before the test loop
  'setup': setup,

  // compiled/called after the test loop
  'teardown': teardown
});

// or name and options
var bench = new Benchmark('foo', {

  // a flag to indicate the benchmark is deferred
  'defer': true,

  // benchmark test function
  'fn': function(deferred) {
    // call resolve() when the deferred test is finished
    deferred.resolve();
  }
});

// or options only
var bench = new Benchmark({

  // benchmark name
  'name': 'foo',

  // benchmark test as a string
  'fn': '[1,2,3,4].sort()'
});

// a test's `this` binding is set to the benchmark instance
var bench = new Benchmark('foo', function() {
  'My name is '.concat(this.name); // My name is foo
});
~~~

* * *

### `Benchmark.version`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3267 "View in source") [Ⓣ][1]

*(String)*: The semantic version number.

* * *

### `Benchmark.deepClone(value)`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L1225 "View in source") [Ⓣ][1]

A deep clone utility.

#### Arguments
1. `value` *(Mixed)*: The value to clone.

#### Returns
*(Mixed)*: The cloned value.

* * *

### `Benchmark.each(object, callback, thisArg)`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L1400 "View in source") [Ⓣ][1]

An iteration utility for arrays and objects. Callbacks may terminate the loop by explicitly returning `false`.

#### Arguments
1. `object` *(Array|Object)*: The object to iterate over.
2. `callback` *(Function)*: The function called per iteration.
3. `thisArg` *(Mixed)*: The `this` binding for the callback.

#### Returns
*(Array, Object)*: Returns the object iterated over.

* * *

### `Benchmark.extend(destination [, source={}])`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L1446 "View in source") [Ⓣ][1]

Copies enumerable properties from the source(s) object to the destination object.

#### Arguments
1. `destination` *(Object)*: The destination object.
2. `[source={}]` *(Object)*: The source object.

#### Returns
*(Object)*: The destination object.

* * *

### `Benchmark.filter(array, callback, thisArg)`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L1485 "View in source") [Ⓣ][1]

A generic `Array#filter` like method.

#### Arguments
1. `array` *(Array)*: The array to iterate over.
2. `callback` *(Function|String)*: The function/alias called per iteration.
3. `thisArg` *(Mixed)*: The `this` binding for the callback.

#### Returns
*(Array)*: A new array of values that passed callback filter.

#### Example
~~~ js
// get odd numbers
Benchmark.filter([1, 2, 3, 4, 5], function(n) {
  return n % 2;
}); // -> [1, 3, 5];

// get fastest benchmarks
Benchmark.filter(benches, 'fastest');

// get slowest benchmarks
Benchmark.filter(benches, 'slowest');

// get benchmarks that completed without erroring
Benchmark.filter(benches, 'successful');
~~~

* * *

### `Benchmark.forEach(array, callback, thisArg)`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L1518 "View in source") [Ⓣ][1]

A generic `Array#forEach` like method. Callbacks may terminate the loop by explicitly returning `false`.

#### Arguments
1. `array` *(Array)*: The array to iterate over.
2. `callback` *(Function)*: The function called per iteration.
3. `thisArg` *(Mixed)*: The `this` binding for the callback.

#### Returns
*(Array)*: Returns the array iterated over.

* * *

### `Benchmark.formatNumber(number)`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L1557 "View in source") [Ⓣ][1]

Converts a number to a more readable comma-separated string representation.

#### Arguments
1. `number` *(Number)*: The number to convert.

#### Returns
*(String)*: The more readable string representation.

* * *

### `Benchmark.forOwn(object, callback, thisArg)`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L1545 "View in source") [Ⓣ][1]

Iterates over an object's own properties, executing the `callback` for each. Callbacks may terminate the loop by explicitly returning `false`.

#### Arguments
1. `object` *(Object)*: The object to iterate over.
2. `callback` *(Function)*: The function executed per own property.
3. `thisArg` *(Mixed)*: The `this` binding for the callback.

#### Returns
*(Object)*: Returns the object iterated over.

* * *

### `Benchmark.hasKey(object, key)`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L1572 "View in source") [Ⓣ][1]

Checks if an object has the specified key as a direct property.

#### Arguments
1. `object` *(Object)*: The object to check.
2. `key` *(String)*: The key to check for.

#### Returns
*(Boolean)*: Returns `true` if key is a direct property, else `false`.

* * *

### `Benchmark.indexOf(array, value [, fromIndex=0])`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L1608 "View in source") [Ⓣ][1]

A generic `Array#indexOf` like method.

#### Arguments
1. `array` *(Array)*: The array to iterate over.
2. `value` *(Mixed)*: The value to search for.
3. `[fromIndex=0]` *(Number)*: The index to start searching from.

#### Returns
*(Number)*: The index of the matched value or `-1`.

* * *

### `Benchmark.interpolate(string, object)`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L1630 "View in source") [Ⓣ][1]

Modify a string by replacing named tokens with matching object property values.

#### Arguments
1. `string` *(String)*: The string to modify.
2. `object` *(Object)*: The template object.

#### Returns
*(String)*: The modified string.

* * *

### `Benchmark.invoke(benches, name [, arg1, arg2, ...])`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L1677 "View in source") [Ⓣ][1]

Invokes a method on all items in an array.

#### Arguments
1. `benches` *(Array)*: Array of benchmarks to iterate over.
2. `name` *(String|Object)*: The name of the method to invoke OR options object.
3. `[arg1, arg2, ...]` *(Mixed)*: Arguments to invoke the method with.

#### Returns
*(Array)*: A new array of values returned from each method invoked.

#### Example
~~~ js
// invoke `reset` on all benchmarks
Benchmark.invoke(benches, 'reset');

// invoke `emit` with arguments
Benchmark.invoke(benches, 'emit', 'complete', listener);

// invoke `run(true)`, treat benchmarks as a queue, and register invoke callbacks
Benchmark.invoke(benches, {

  // invoke the `run` method
  'name': 'run',

  // pass a single argument
  'args': true,

  // treat as queue, removing benchmarks from front of `benches` until empty
  'queued': true,

  // called before any benchmarks have been invoked.
  'onStart': onStart,

  // called between invoking benchmarks
  'onCycle': onCycle,

  // called after all benchmarks have been invoked.
  'onComplete': onComplete
});
~~~

* * *

### `Benchmark.join(object [, separator1=',', separator2=': '])`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L1831 "View in source") [Ⓣ][1]

Creates a string of joined array values or object key-value pairs.

#### Arguments
1. `object` *(Array|Object)*: The object to operate on.
2. `[separator1=',']` *(String)*: The separator used between key-value pairs.
3. `[separator2=': ']` *(String)*: The separator used between keys and values.

#### Returns
*(String)*: The joined result.

* * *

### `Benchmark.map(array, callback, thisArg)`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L1853 "View in source") [Ⓣ][1]

A generic `Array#map` like method.

#### Arguments
1. `array` *(Array)*: The array to iterate over.
2. `callback` *(Function)*: The function called per iteration.
3. `thisArg` *(Mixed)*: The `this` binding for the callback.

#### Returns
*(Array)*: A new array of values returned by the callback.

* * *

### `Benchmark.pluck(array, property)`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L1869 "View in source") [Ⓣ][1]

Retrieves the value of a specified property from all items in an array.

#### Arguments
1. `array` *(Array)*: The array to iterate over.
2. `property` *(String)*: The property to pluck.

#### Returns
*(Array)*: A new array of property values.

* * *

### `Benchmark.reduce(array, callback, accumulator)`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L1885 "View in source") [Ⓣ][1]

A generic `Array#reduce` like method.

#### Arguments
1. `array` *(Array)*: The array to iterate over.
2. `callback` *(Function)*: The function called per iteration.
3. `accumulator` *(Mixed)*: Initial value of the accumulator.

#### Returns
*(Mixed)*: The accumulator.

* * *









## `Benchmark.prototype`

### `Benchmark.prototype.aborted`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3377 "View in source") [Ⓣ][1]

*(Boolean)*: A flag to indicate if the benchmark is aborted.

* * *

### `Benchmark.prototype.compiled`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3353 "View in source") [Ⓣ][1]

*(Function, String)*: The compiled test function.

* * *

### `Benchmark.prototype.count`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3329 "View in source") [Ⓣ][1]

*(Number)*: The number of times a test was executed.

* * *

### `Benchmark.prototype.cycles`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3337 "View in source") [Ⓣ][1]

*(Number)*: The number of cycles performed while benchmarking.

* * *

### `Benchmark.prototype.fn`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3369 "View in source") [Ⓣ][1]

*(Function, String)*: The test to benchmark.

* * *

### `Benchmark.prototype.hz`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3345 "View in source") [Ⓣ][1]

*(Number)*: The number of executions per second.

* * *

### `Benchmark.prototype.running`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3385 "View in source") [Ⓣ][1]

*(Boolean)*: A flag to indicate if the benchmark is running.

* * *

### `Benchmark.prototype.setup`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3448 "View in source") [Ⓣ][1]

*(Function, String)*: Compiled into the test and executed immediately **before** the test loop.

#### Example
~~~ js
// basic usage
var bench = Benchmark({
  'setup': function() {
    var c = this.count,
        element = document.getElementById('container');
    while (c--) {
      element.appendChild(document.createElement('div'));
    }
  },
  'fn': function() {
    element.removeChild(element.lastChild);
  }
});

// compiles to something like:
var c = this.count,
    element = document.getElementById('container');
while (c--) {
  element.appendChild(document.createElement('div'));
}
var start = new Date;
while (count--) {
  element.removeChild(element.lastChild);
}
var end = new Date - start;

// or using strings
var bench = Benchmark({
  'setup': '\
    var a = 0;\n\
    (function() {\n\
      (function() {\n\
        (function() {',
  'fn': 'a += 1;',
  'teardown': '\
         }())\n\
       }())\n\
     }())'
});

// compiles to something like:
var a = 0;
(function() {
  (function() {
    (function() {
      var start = new Date;
      while (count--) {
        a += 1;
      }
      var end = new Date - start;
    }())
  }())
}())
~~~

* * *

### `Benchmark.prototype.teardown`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3456 "View in source") [Ⓣ][1]

*(Function, String)*: Compiled into the test and executed immediately **after** the test loop.

* * *

### `Benchmark.prototype.abort()`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L2218 "View in source") [Ⓣ][1]

Aborts the benchmark without recording times.

#### Returns
*(Object)*: The benchmark instance.

* * *

### `Benchmark.prototype.clone(options)`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L2257 "View in source") [Ⓣ][1]

Creates a new benchmark using the same test and options.

#### Arguments
1. `options` *(Object)*: Options object to overwrite cloned options.

#### Returns
*(Object)*: The new benchmark instance.

#### Example
~~~ js
var bizarro = bench.clone({
  'name': 'doppelganger'
});
~~~

* * *

### `Benchmark.prototype.compare(other)`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L2280 "View in source") [Ⓣ][1]

Determines if a benchmark is faster than another.

#### Arguments
1. `other` *(Object)*: The benchmark to compare.

#### Returns
*(Number)*: Returns `-1` if slower, `1` if faster, and `0` if indeterminate.

* * *

### `Benchmark.Suite.prototype.emit(type)`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L2095 "View in source") [Ⓣ][1]

Executes all registered listeners of the specified event type.

#### Arguments
1. `type` *(String|Object)*: The event type or object.

#### Returns
*(Mixed)*: Returns the return value of the last listener executed.

* * *

### `Benchmark.Suite.prototype.listeners(type)`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L2125 "View in source") [Ⓣ][1]

Returns an array of event listeners for a given type that can be manipulated to add or remove listeners.

#### Arguments
1. `type` *(String)*: The event type.

#### Returns
*(Array)*: The listeners array.

* * *

### `Benchmark.Suite.prototype.off([type, listener])`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L2158 "View in source") [Ⓣ][1]

Unregisters a listener for the specified event type(s), or unregisters all listeners for the specified event type(s), or unregisters all listeners for all event types.

#### Arguments
1. `[type]` *(String)*: The event type.
2. `[listener]` *(Function)*: The function to unregister.

#### Returns
*(Object)*: The benchmark instance.

#### Example
~~~ js
// unregister a listener for an event type
bench.off('cycle', listener);

// unregister a listener for multiple event types
bench.off('start cycle', listener);

// unregister all listeners for an event type
bench.off('cycle');

// unregister all listeners for multiple event types
bench.off('start cycle complete');

// unregister all listeners for all event types
bench.off();
~~~

* * *

### `Benchmark.Suite.prototype.on(type, listener)`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L2197 "View in source") [Ⓣ][1]

Registers a listener for the specified event type(s).

#### Arguments
1. `type` *(String)*: The event type.
2. `listener` *(Function)*: The function to register.

#### Returns
*(Object)*: The benchmark instance.

#### Example
~~~ js
// register a listener for an event type
bench.on('cycle', listener);

// register a listener for multiple event types
bench.on('start cycle', listener);
~~~

* * *

### `Benchmark.prototype.reset()`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L2334 "View in source") [Ⓣ][1]

Reset properties and abort if running.

#### Returns
*(Object)*: The benchmark instance.

* * *

### `Benchmark.prototype.run([options={}])`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3000 "View in source") [Ⓣ][1]

Runs the benchmark.

#### Arguments
1. `[options={}]` *(Object)*: Options object.

#### Returns
*(Object)*: The benchmark instance.

#### Example
~~~ js
// basic usage
bench.run();

// or with options
bench.run({ 'async': true });
~~~

* * *

### `Benchmark.prototype.toString()`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L2405 "View in source") [Ⓣ][1]

Displays relevant benchmark information when coerced to a string.

#### Returns
*(String)*: A string representation of the benchmark instance.

* * *

## `Benchmark.options`

### `Benchmark.options`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3049 "View in source") [Ⓣ][1]

*(Object)*: The default options copied by benchmark instances.

* * *

### `Benchmark.options.async`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3058 "View in source") [Ⓣ][1]

*(Boolean)*: A flag to indicate that benchmark cycles will execute asynchronously by default.

* * *

### `Benchmark.options.defer`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3066 "View in source") [Ⓣ][1]

*(Boolean)*: A flag to indicate that the benchmark clock is deferred.

* * *

### `Benchmark.options.delay`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3073 "View in source") [Ⓣ][1]

*(Number)*: The delay between test cycles *(secs)*.

* * *

### `Benchmark.options.id`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3082 "View in source") [Ⓣ][1]

*(String)*: Displayed by Benchmark#toString when a `name` is not available *(auto-generated if absent)*.

* * *

### `Benchmark.options.initCount`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3090 "View in source") [Ⓣ][1]

*(Number)*: The default number of times to execute a test on a benchmark's first cycle.

* * *

### `Benchmark.options.maxTime`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3099 "View in source") [Ⓣ][1]

*(Number)*: The maximum time a benchmark is allowed to run before finishing *(secs)*. Note: Cycle delays aren't counted toward the maximum time.

* * *

### `Benchmark.options.minSamples`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3107 "View in source") [Ⓣ][1]

*(Number)*: The minimum sample size required to perform statistical analysis.

* * *

### `Benchmark.options.minTime`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3115 "View in source") [Ⓣ][1]

*(Number)*: The time needed to reduce the percent uncertainty of measurement to `1`% *(secs)*.

* * *

### `Benchmark.options.name`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3123 "View in source") [Ⓣ][1]

*(String)*: The name of the benchmark.

* * *

### `Benchmark.options.onAbort`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3131 "View in source") [Ⓣ][1]

An event listener called when the benchmark is aborted.

* * *

### `Benchmark.options.onComplete`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3139 "View in source") [Ⓣ][1]

An event listener called when the benchmark completes running.

* * *

### `Benchmark.options.onCycle`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3147 "View in source") [Ⓣ][1]

An event listener called after each run cycle.

* * *

### `Benchmark.options.onError`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3155 "View in source") [Ⓣ][1]

An event listener called when a test errors.

* * *

### `Benchmark.options.onReset`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3163 "View in source") [Ⓣ][1]

An event listener called when the benchmark is reset.

* * *

### `Benchmark.options.onStart`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3171 "View in source") [Ⓣ][1]

An event listener called when the benchmark starts running.

* * *

## `Benchmark.platform`

### `Benchmark.platform`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3182 "View in source") [Ⓣ][1]

*(Object)*: Platform object with properties describing things like browser name, version, and operating system.

* * *

### `Benchmark.platform.description`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3190 "View in source") [Ⓣ][1]

*(String)*: The platform description.

* * *

### `Benchmark.platform.layout`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3198 "View in source") [Ⓣ][1]

*(String, Null)*: The name of the browser layout engine.

* * *

### `Benchmark.platform.manufacturer`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3222 "View in source") [Ⓣ][1]

*(String, Null)*: The name of the product's manufacturer.

* * *

### `Benchmark.platform.name`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3214 "View in source") [Ⓣ][1]

*(String, Null)*: The name of the browser/environment.

* * *

### `Benchmark.platform.os`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3230 "View in source") [Ⓣ][1]

*(String, Null)*: The name of the operating system.

* * *

### `Benchmark.platform.prerelease`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3238 "View in source") [Ⓣ][1]

*(String, Null)*: The alpha/beta release indicator.

* * *

### `Benchmark.platform.product`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3206 "View in source") [Ⓣ][1]

*(String, Null)*: The name of the product hosting the browser.

* * *

### `Benchmark.platform.version`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3246 "View in source") [Ⓣ][1]

*(String, Null)*: The browser/environment version.

* * *

### `Benchmark.platform.toString()`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3255 "View in source") [Ⓣ][1]

Return platform description when the platform object is coerced to a string.

#### Returns
*(String)*: The platform description.

* * *

## `Benchmark.support`

### `Benchmark.support`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L135 "View in source") [Ⓣ][1]

*(Object)*: An object used to flag environments/features.

* * *

### `Benchmark.support.air`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L145 "View in source") [Ⓣ][1]

*(Boolean)*: Detect Adobe AIR.

* * *

### `Benchmark.support.argumentsClass`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L153 "View in source") [Ⓣ][1]

*(Boolean)*: Detect if `arguments` objects have the correct internal [[Class]] value.

* * *

### `Benchmark.support.browser`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L161 "View in source") [Ⓣ][1]

*(Boolean)*: Detect if in a browser environment.

* * *

### `Benchmark.support.charByIndex`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L169 "View in source") [Ⓣ][1]

*(Boolean)*: Detect if strings support accessing characters by index.

* * *

### `Benchmark.support.charByOwnIndex`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L179 "View in source") [Ⓣ][1]

*(Boolean)*: Detect if strings have indexes as own properties.

* * *

### `Benchmark.support.decompilation`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L207 "View in source") [Ⓣ][1]

*(Boolean)*: Detect if functions support decompilation.

* * *

### `Benchmark.support.descriptors`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L228 "View in source") [Ⓣ][1]

*(Boolean)*: Detect ES5+ property descriptor API.

* * *

### `Benchmark.support.getAllKeys`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L242 "View in source") [Ⓣ][1]

*(Boolean)*: Detect ES5+ Object.getOwnPropertyNames().

* * *

### `Benchmark.support.iteratesOwnFirst`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L255 "View in source") [Ⓣ][1]

*(Boolean)*: Detect if own properties are iterated before inherited properties *(all but IE < `9`)*.

* * *

### `Benchmark.support.java`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L190 "View in source") [Ⓣ][1]

*(Boolean)*: Detect if Java is enabled/exposed.

* * *

### `Benchmark.support.nodeClass`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L272 "View in source") [Ⓣ][1]

*(Boolean)*: Detect if a node's [[Class]] is resolvable *(all but IE < `9`)* and that the JS engine errors when attempting to coerce an object to a string without a `toString` property value of `typeof` "function".

* * *

### `Benchmark.support.timeout`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L198 "View in source") [Ⓣ][1]

*(Boolean)*: Detect if the Timers API exists.

* * *

## `Benchmark.prototype.error`

### `Benchmark.prototype.error`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3361 "View in source") [Ⓣ][1]

*(Object)*: The error object if the test failed.

* * *

## `Benchmark.prototype.stats`

### `Benchmark.prototype.stats`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3464 "View in source") [Ⓣ][1]

*(Object)*: An object of stats including mean, margin or error, and standard deviation.

* * *

### `Benchmark.prototype.stats.deviation`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3496 "View in source") [Ⓣ][1]

*(Number)*: The sample standard deviation.

* * *

### `Benchmark.prototype.stats.mean`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3504 "View in source") [Ⓣ][1]

*(Number)*: The sample arithmetic mean.

* * *

### `Benchmark.prototype.stats.moe`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3472 "View in source") [Ⓣ][1]

*(Number)*: The margin of error.

* * *

### `Benchmark.prototype.stats.rme`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3480 "View in source") [Ⓣ][1]

*(Number)*: The relative margin of error *(expressed as a percentage of the mean)*.

* * *

### `Benchmark.prototype.stats.sample`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3512 "View in source") [Ⓣ][1]

*(Array)*: The array of sampled periods.

* * *

### `Benchmark.prototype.stats.sem`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3488 "View in source") [Ⓣ][1]

*(Number)*: The standard error of the mean.

* * *

### `Benchmark.prototype.stats.variance`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3520 "View in source") [Ⓣ][1]

*(Number)*: The sample variance.

* * *

## `Benchmark.prototype.times`

### `Benchmark.prototype.times`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3529 "View in source") [Ⓣ][1]

*(Object)*: An object of timing data including cycle, elapsed, period, start, and stop.

* * *

### `Benchmark.prototype.times.cycle`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3537 "View in source") [Ⓣ][1]

*(Number)*: The time taken to complete the last cycle *(secs)*.

* * *

### `Benchmark.prototype.times.elapsed`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3545 "View in source") [Ⓣ][1]

*(Number)*: The time taken to complete the benchmark *(secs)*.

* * *

### `Benchmark.prototype.times.period`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3553 "View in source") [Ⓣ][1]

*(Number)*: The time taken to execute the test once *(secs)*.

* * *

### `Benchmark.prototype.times.timeStamp`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3561 "View in source") [Ⓣ][1]

*(Number)*: A timestamp of when the benchmark started *(ms)*.

* * *

## `Benchmark.Deferred`

### `Benchmark.Deferred(clone)`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L445 "View in source") [Ⓣ][1]

The Deferred constructor.

#### Arguments
1. `clone` *(Object)*: The cloned benchmark instance.

* * *









## `Benchmark.Deferred.prototype`

### `Benchmark.Deferred.prototype.benchmark`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3605 "View in source") [Ⓣ][1]

*(Object)*: The deferred benchmark instance.

* * *

### `Benchmark.Deferred.prototype.cycles`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3613 "View in source") [Ⓣ][1]

*(Number)*: The number of deferred cycles performed while benchmarking.

* * *

### `Benchmark.Deferred.prototype.elapsed`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3621 "View in source") [Ⓣ][1]

*(Number)*: The time taken to complete the deferred benchmark *(secs)*.

* * *

### `Benchmark.Deferred.prototype.resolve`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L1188 "View in source") [Ⓣ][1]

*(Unknown)*: Handles cycling/completing the deferred benchmark.

* * *

### `Benchmark.Deferred.prototype.timeStamp`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3629 "View in source") [Ⓣ][1]

*(Number)*: A timestamp of when the deferred benchmark started *(ms)*.

* * *

## `Benchmark.Event`

### `Benchmark.Event(type)`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L461 "View in source") [Ⓣ][1]

The Event constructor.

#### Arguments
1. `type` *(String|Object)*: The event type.

* * *









## `Benchmark.Event.prototype`

### `Benchmark.Event.prototype.aborted`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3645 "View in source") [Ⓣ][1]

*(Boolean)*: A flag to indicate if the emitters listener iteration is aborted.

* * *

### `Benchmark.Event.prototype.cancelled`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3653 "View in source") [Ⓣ][1]

*(Boolean)*: A flag to indicate if the default action is cancelled.

* * *

### `Benchmark.Event.prototype.result`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3669 "View in source") [Ⓣ][1]

*(Mixed)*: The return value of the last executed listener.

* * *

### `Benchmark.Event.prototype.timeStamp`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3685 "View in source") [Ⓣ][1]

*(Number)*: A timestamp of when the event was created *(ms)*.

* * *

### `Benchmark.Event.prototype.type`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3693 "View in source") [Ⓣ][1]

*(String)*: The event type.

* * *

## `Benchmark.Event.prototype.currentTarget`

### `Benchmark.Event.prototype.currentTarget`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3661 "View in source") [Ⓣ][1]

*(Object)*: The object whose listeners are currently being processed.

* * *

## `Benchmark.Event.prototype.target`

### `Benchmark.Event.prototype.target`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3677 "View in source") [Ⓣ][1]

*(Object)*: The object to which the event was originally emitted.

* * *

## `Benchmark.Suite`

### `Benchmark.Suite(name [, options={}])`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L507 "View in source") [Ⓣ][1]

The Suite constructor.

#### Arguments
1. `name` *(String)*: A name to identify the suite.
2. `[options={}]` *(Object)*: Options object.

#### Example
~~~ js
// basic usage (the `new` operator is optional)
var suite = new Benchmark.Suite;

// or using a name first
var suite = new Benchmark.Suite('foo');

// or with options
var suite = new Benchmark.Suite('foo', {

  // called when the suite starts running
  'onStart': onStart,

  // called between running benchmarks
  'onCycle': onCycle,

  // called when aborted
  'onAbort': onAbort,

  // called when a test errors
  'onError': onError,

  // called when reset
  'onReset': onReset,

  // called when the suite completes running
  'onComplete': onComplete
});
~~~

* * *









## `Benchmark.Suite.prototype`

### `Benchmark.Suite.prototype.aborted`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3734 "View in source") [Ⓣ][1]

*(Boolean)*: A flag to indicate if the suite is aborted.

* * *

### `Benchmark.Suite.prototype.length`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3726 "View in source") [Ⓣ][1]

*(Number)*: The number of benchmarks in the suite.

* * *

### `Benchmark.Suite.prototype.running`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3742 "View in source") [Ⓣ][1]

*(Boolean)*: A flag to indicate if the suite is running.

* * *

### `Benchmark.Suite.prototype.abort()`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L1902 "View in source") [Ⓣ][1]

Aborts all benchmarks in the suite.

#### Returns
*(Object)*: The suite instance.

* * *

### `Benchmark.Suite.prototype.add(name, fn [, options={}])`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L1962 "View in source") [Ⓣ][1]

Adds a test to the benchmark suite.

#### Arguments
1. `name` *(String)*: A name to identify the benchmark.
2. `fn` *(Function|String)*: The test to benchmark.
3. `[options={}]` *(Object)*: Options object.

#### Returns
*(Object)*: The benchmark instance.

#### Example
~~~ js
// basic usage
suite.add(fn);

// or using a name first
suite.add('foo', fn);

// or with options
suite.add('foo', fn, {
  'onCycle': onCycle,
  'onComplete': onComplete
});

// or name and options
suite.add('foo', {
  'fn': fn,
  'onCycle': onCycle,
  'onComplete': onComplete
});

// or options only
suite.add({
  'name': 'foo',
  'fn': fn,
  'onCycle': onCycle,
  'onComplete': onComplete
});
~~~

* * *

### `Benchmark.Suite.prototype.clone(options)`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L1981 "View in source") [Ⓣ][1]

Creates a new suite with cloned benchmarks.

#### Arguments
1. `options` *(Object)*: Options object to overwrite cloned options.

#### Returns
*(Object)*: The new suite instance.

* * *

### `Benchmark.Suite.prototype.emit(type)`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L2095 "View in source") [Ⓣ][1]

Executes all registered listeners of the specified event type.

#### Arguments
1. `type` *(String|Object)*: The event type or object.

#### Returns
*(Mixed)*: Returns the return value of the last listener executed.

* * *

### `Benchmark.Suite.prototype.filter(callback)`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L2004 "View in source") [Ⓣ][1]

An `Array#filter` like method.

#### Arguments
1. `callback` *(Function|String)*: The function/alias called per iteration.

#### Returns
*(Object)*: A new suite of benchmarks that passed callback filter.

* * *

### `Benchmark.Suite.prototype.forEach(callback)`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3752 "View in source") [Ⓣ][1]

An `Array#forEach` like method. Callbacks may terminate the loop by explicitly returning `false`.

#### Arguments
1. `callback` *(Function)*: The function called per iteration.

#### Returns
*(Object)*: The suite iterated over.

* * *

### `Benchmark.Suite.prototype.indexOf(value)`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3761 "View in source") [Ⓣ][1]

An `Array#indexOf` like method.

#### Arguments
1. `value` *(Mixed)*: The value to search for.

#### Returns
*(Number)*: The index of the matched value or `-1`.

* * *

### `Benchmark.Suite.prototype.invoke(name [, arg1, arg2, ...])`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3771 "View in source") [Ⓣ][1]

Invokes a method on all benchmarks in the suite.

#### Arguments
1. `name` *(String|Object)*: The name of the method to invoke OR options object.
2. `[arg1, arg2, ...]` *(Mixed)*: Arguments to invoke the method with.

#### Returns
*(Array)*: A new array of values returned from each method invoked.

* * *

### `Benchmark.Suite.prototype.join([separator=','])`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3780 "View in source") [Ⓣ][1]

Converts the suite of benchmarks to a string.

#### Arguments
1. `[separator=',']` *(String)*: A string to separate each element of the array.

#### Returns
*(String)*: The string.

* * *

### `Benchmark.Suite.prototype.listeners(type)`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L2125 "View in source") [Ⓣ][1]

Returns an array of event listeners for a given type that can be manipulated to add or remove listeners.

#### Arguments
1. `type` *(String)*: The event type.

#### Returns
*(Array)*: The listeners array.

* * *

### `Benchmark.Suite.prototype.map(callback)`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3789 "View in source") [Ⓣ][1]

An `Array#map` like method.

#### Arguments
1. `callback` *(Function)*: The function called per iteration.

#### Returns
*(Array)*: A new array of values returned by the callback.

* * *

### `Benchmark.Suite.prototype.off([type, listener])`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L2158 "View in source") [Ⓣ][1]

Unregisters a listener for the specified event type(s), or unregisters all listeners for the specified event type(s), or unregisters all listeners for all event types.

#### Arguments
1. `[type]` *(String)*: The event type.
2. `[listener]` *(Function)*: The function to unregister.

#### Returns
*(Object)*: The benchmark instance.

#### Example
~~~ js
// unregister a listener for an event type
bench.off('cycle', listener);

// unregister a listener for multiple event types
bench.off('start cycle', listener);

// unregister all listeners for an event type
bench.off('cycle');

// unregister all listeners for multiple event types
bench.off('start cycle complete');

// unregister all listeners for all event types
bench.off();
~~~

* * *

### `Benchmark.Suite.prototype.on(type, listener)`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L2197 "View in source") [Ⓣ][1]

Registers a listener for the specified event type(s).

#### Arguments
1. `type` *(String)*: The event type.
2. `listener` *(Function)*: The function to register.

#### Returns
*(Object)*: The benchmark instance.

#### Example
~~~ js
// register a listener for an event type
bench.on('cycle', listener);

// register a listener for multiple event types
bench.on('start cycle', listener);
~~~

* * *

### `Benchmark.Suite.prototype.pluck(property)`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3798 "View in source") [Ⓣ][1]

Retrieves the value of a specified property from all benchmarks in the suite.

#### Arguments
1. `property` *(String)*: The property to pluck.

#### Returns
*(Array)*: A new array of property values.

* * *

### `Benchmark.Suite.prototype.pop()`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3806 "View in source") [Ⓣ][1]

Removes the last benchmark from the suite and returns it.

#### Returns
*(Mixed)*: The removed benchmark.

* * *

### `Benchmark.Suite.prototype.push()`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3814 "View in source") [Ⓣ][1]

Appends benchmarks to the suite.

#### Returns
*(Number)*: The suite's new length.

* * *

### `Benchmark.Suite.prototype.reduce(callback, accumulator)`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3833 "View in source") [Ⓣ][1]

An `Array#reduce` like method.

#### Arguments
1. `callback` *(Function)*: The function called per iteration.
2. `accumulator` *(Mixed)*: Initial value of the accumulator.

#### Returns
*(Mixed)*: The accumulator.

* * *

### `Benchmark.Suite.prototype.reset()`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L2019 "View in source") [Ⓣ][1]

Resets all benchmarks in the suite.

#### Returns
*(Object)*: The suite instance.

* * *

### `Benchmark.Suite.prototype.reverse()`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L638 "View in source") [Ⓣ][1]

Rearrange the host array's elements in reverse order.

#### Returns
*(Array)*: The reversed array.

* * *

### `Benchmark.Suite.prototype.run([options={}])`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L2056 "View in source") [Ⓣ][1]

Runs the suite.

#### Arguments
1. `[options={}]` *(Object)*: Options object.

#### Returns
*(Object)*: The suite instance.

#### Example
~~~ js
// basic usage
suite.run();

// or with options
suite.run({ 'async': true, 'queued': true });
~~~

* * *

### `Benchmark.Suite.prototype.shift()`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L671 "View in source") [Ⓣ][1]

Removes the first element of the host array and returns it.

#### Returns
*(Mixed)*: The first element of the array.

* * *

### `Benchmark.Suite.prototype.slice(start, end)`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L684 "View in source") [Ⓣ][1]

Creates an array of the host array's elements from the start index up to, but not including, the end index.

#### Arguments
1. `start` *(Number)*: The starting index.
2. `end` *(Number)*: The end index.

#### Returns
*(Array)*: The new array.

* * *

### `Benchmark.Suite.prototype.sort([compareFn=null])`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3823 "View in source") [Ⓣ][1]

Sorts the benchmarks of the suite.

#### Arguments
1. `[compareFn=null]` *(Function)*: A function that defines the sort order.

#### Returns
*(Object)*: The sorted suite.

* * *

### `Benchmark.Suite.prototype.splice(start, deleteCount [, val1, val2, ...])`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L714 "View in source") [Ⓣ][1]

Allows removing a range of elements and/or inserting elements into the host array.

#### Arguments
1. `start` *(Number)*: The start index.
2. `deleteCount` *(Number)*: The number of elements to delete.
3. `[val1, val2, ...]` *(Mixed)*: values to insert at the `start` index.

#### Returns
*(Array)*: An array of removed elements.

* * *

### `Benchmark.Suite.prototype.unshift()`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L749 "View in source") [Ⓣ][1]

Appends arguments to the host array.

#### Returns
*(Number)*: The new length.

* * *

## `Benchmark.Suite.options`

### `Benchmark.Suite.options`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3705 "View in source") [Ⓣ][1]

*(Object)*: The default options copied by suite instances.

* * *

### `Benchmark.Suite.options.name`
# [Ⓢ](https://github.com/bestiejs/benchmark.js/blob/master/benchmark.js#L3713 "View in source") [Ⓣ][1]

*(String)*: The name of the suite.

* * *

  [1]: #Benchmark "Jump back to the TOC."