function validate( opts, options ) {
	if ( !isPlainObject( options ) ) {
		return new TypeError( format( 'invalid argument. Options argument must be an object. Value: `%s`.', options ) );
	}
	if ( hasOwnProp( options, 'period' ) ) {
		opts.period = options.period;
		if ( !isPositiveInteger( options.period ) ) {
			return new TypeError( format( 'invalid option. `%s` option must be an positive integer. Option: `%s`.', 'period', options.period ) );
		}
	}
	if ( hasOwnProp( options, 'amplitude' ) ) {
		opts.amplitude = options.amplitude;
		if ( !isNonNegativeNumber( options.amplitude ) ) {
			return new TypeError( format( 'invalid option. `%s` option must be a nonnegative number. Option: `%s`.', 'amplitude', options.amplitude ) );
		}
	}
	if ( hasOwnProp( options, 'offset' ) ) {
		opts.offset = options.offset;
		if ( !isInteger( options.offset ) ) {
			return new TypeError( format( 'invalid option. `%s` option must be an integer. Option: `%s`.', 'offset', options.offset ) );
		}
	}
	if ( hasOwnProp( options, 'iter' ) ) {
		opts.iter = options.iter;
		if ( !isNonNegativeInteger( options.iter ) ) {
			return new TypeError( format( 'invalid option. `%s` option must be a nonnegative integer. Option: `%s`.', 'iter', options.iter ) );
		}
	}
	return null;
}
Validates function options.

@private
@param {Object} opts - destination object
@param {Options} options - function options
@param {PositiveInteger} [options.period] - number of iterations before a cosine wave repeats
@param {NonNegativeNumber} [options.amplitude] - peak amplitude
@param {integer} [options.offset] - phase offset (in units of iterations)
@param {NonNegativeInteger} [options.iter] - number of iterations
@returns {(Error|null)} null or an error object

@example
var opts = {};
var options = {
    'iter': 100
};
var err = validate( opts, options );
if ( err ) {
    throw err;
}