function doWhile( fcn, predicate, thisArg ) {
	var i;
	if ( !isFunction( fcn ) ) {
		throw new TypeError( format( 'invalid argument. First argument must be a function. Value: `%s`.', fcn ) );
	}
	if ( !isFunction( predicate ) ) {
		throw new TypeError( format( 'invalid argument. Second argument must be a function. Value: `%s`.', predicate ) );
	}
	i = 0;
	do {
		fcn.call( thisArg, i );
		i += 1;
	} while ( predicate( i ) );
}
Invokes a function while a test condition is true.

@param {Function} fcn - function to invoke
@param {Function} predicate - function which indicates whether to continue invoking a function
@param {*} [thisArg] - execution context for the invoked function
@throws {TypeError} first argument must be a function
@throws {TypeError} second argument must be a function

@example
function predicate( i ) {
    return ( i < 5 );
}

function beep( i ) {
    console.log( 'beep: %d', i );
}

doWhile( beep, predicate );