function harness( name, options, benchmark ) {
		var opts;
		var err;
		var b;
		if ( !isString( name ) ) {
			throw new TypeError( format( 'invalid argument. First argument must be a string. Value: `%s`.', name ) );
		}
		opts = copy( DEFAULTS );
		if ( arguments.length === 2 ) {
			if ( isFunction( options ) ) {
				b = options;
			} else {
				err = validate( opts, options );
				if ( err ) {
					throw err;
				}
			}
		} else if ( arguments.length > 2 ) {
			err = validate( opts, options );
			if ( err ) {
				throw err;
			}
			b = benchmark;
			if ( !isFunction( b ) ) {
				throw new TypeError( format( 'invalid argument. Third argument must be a function. Value: `%s`.', b ) );
			}
		}
		// Add the benchmark to the initialization queue:
		queue.push( [ name, opts, b ] );

		// Perform initialization on the next turn of the event loop (note: this allows all benchmarks to be "registered" within the same turn of the loop; otherwise, we run the risk of registration-execution race conditions (i.e., a benchmark registers and executes before other benchmarks can register, depleting the benchmark queue and leading the harness to close)):
		if ( queue.length === 1 ) {
			nextTick( initialize );
		}
		return harness;
	}
Benchmark harness.

@private
@param {string} name - benchmark name
@param {Options} [options] - benchmark options
@param {boolean} [options.skip=false] - boolean indicating whether to skip a benchmark
@param {(PositiveInteger|null)} [options.iterations=null] - number of iterations
@param {PositiveInteger} [options.repeats=3] - number of repeats
@param {PositiveInteger} [options.timeout=300000] - number of milliseconds before a benchmark automatically fails
@param {Function} [benchmark] - function containing benchmark code
@throws {TypeError} first argument must be a string
@throws {TypeError} options argument must be an object
@throws {TypeError} must provide valid options
@throws {TypeError} benchmark argument must a function
@throws {Error} benchmark error
@returns {Function} benchmark harness