function endsWith( str, search, len ) {
	var idx;
	var N;

	N = search.length;
	if ( len === 0 ) {
		return ( N === 0 );
	}
	if ( len < 0 ) {
		idx = str.length + len;
	} else {
		idx = len;
	}
	if ( N === 0 ) {
		// Based on the premise that every string can be "surrounded" by empty strings (e.g., "" + "a" + "" + "b" + "" === "ab"):
		return true;
	}
	if ( idx - N < 0 || idx > str.length ) {
		return false;
	}
	return builtin.call( str, search, idx );
}
Tests if a string ends with the characters of another string.

## Notes

-   The last parameter restricts the search to a substring within the input string beginning from the leftmost character. If provided a negative value, `len` indicates to ignore the last `len` characters, and is thus equivalent to `str.length + len`.

@param {string} str - input string
@param {string} search - search string
@param {integer} len - substring length
@returns {boolean} boolean indicating if the input string ends with the search string

@example
var bool = endsWith( 'To be, or not to be, that is the question.', 'to be', 19 );
// returns true

@example
var bool = endsWith( 'To be, or not to be, that is the question.', 'to be', -23 );
// returns true