function hasSameValues( x, y ) {
	var FLG;
	var xo;
	var yo;
	var xr;
	var yr;

	if ( x.length !== y.length ) {
		return false;
	}
	xo = arraylike2object( x );
	yo = arraylike2object( y );
	if ( xo.accessorProtocol || yo.accessorProtocol ) {
		FLG = 2;

		// If provided boolean arrays, reinterpret the arrays to avoid using accessors to access array elements...
		if ( isBooleanArray( x ) ) {
			if ( isBooleanArray( y ) ) {
				return internal( reinterpretBoolean( x, 0 ), reinterpretBoolean( y, 0 ) );
			}
			return accessors( xo, yo );
		}
		// If provided a complex number array, reinterpret as a real typed array and test interleaved real and imaginary components...
		if ( isComplex128Array( x ) ) {
			xr = reinterpret128( x, 0 );
			FLG -= 1;
		} else if ( isComplex64Array( x ) ) {
			xr = reinterpret64( x, 0 );
			FLG -= 1;
		}
		if ( isComplex128Array( y ) ) {
			yr = reinterpret128( y, 0 );
			FLG -= 1;
		} else if ( isComplex64Array( y ) ) {
			yr = reinterpret64( y, 0 );
			FLG -= 1;
		}
		if ( FLG === 0 ) {
			return internal( xr, yr );
		}
		return accessors( xo, yo );
	}
	return internal( x, y );
}
Tests if two arrays have the same values.

@param {Collection} x - first input array
@param {Collection} y - second input array
@returns {boolean} boolean indicating if both arrays have the same values

@example
var x = [ 0, 0, 1, 0 ];
var y = [ 0, 0, 1, 0 ];

var out = hasSameValues( x, y );
// returns true

@example
var x = [ 0, 0, 0, 0 ];
var y = [ 0, 0, 1, 0 ];

var out = hasSameValues( x, y );
// returns false