| 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();
 
- 	});
 
- };
 
 
  |