| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 | 'use strict';var inspect = require('object-inspect');var forEach = require('for-each');var v = require('es-value-fixtures');module.exports = function (groupBy, t) {	t.test('callback function', function (st) {		forEach(v.nonFunctions, function (nonFunction) {			st['throws'](				function () { groupBy([], nonFunction); },				TypeError,				inspect(nonFunction) + ' is not a function'			);		});		st.end();	});	t.test('grouping', function (st) {		st.deepEqual(			groupBy([], function () { return 'a'; }),			{ __proto__: null },			'an empty array produces an empty object'		);		var arr = [0, -0, 1, 2, 3, 4, 5, NaN, Infinity, -Infinity];		var parity = function (x) {			if (x !== x) {				return void undefined;			}			if (!isFinite(x)) {				return '∞';			}			return x % 2 === 0 ? 'even' : 'odd';		};		var grouped = {			__proto__: null,			even: [0, -0, 2, 4],			odd: [1, 3, 5],			undefined: [NaN],			'∞': [Infinity, -Infinity]		};		st.deepEqual(			groupBy(arr, parity),			grouped,			inspect(arr) + ' group by parity groups to ' + inspect(grouped)		);		st.deepEqual(			groupBy(arr, function (x, i) {				st.equal(this, undefined, 'receiver is as expected'); // eslint-disable-line no-invalid-this				st.equal(x, arr[i], 'second argument ' + i + ' is ' + inspect(arr[i]));				return 42;			}),			{ __proto__: null, 42: arr },			'thisArg and callback arguments are as expected'		);		st.end();	});};
 |