| 'use strict'; | 
|   | 
| var _ = require('lodash'); | 
| var test = require('tape'); | 
| var sum = require('./'); | 
|   | 
| test('creates unique hashes', function (t) { | 
|   var cases = []; | 
|   | 
|   test_case([0,1,2,3]); | 
|   test_case({0:0,1:1,2:2,3:3}); | 
|   test_case({0:0,1:1,2:2,3:3,length:4}); | 
|   test_case({url:12}); | 
|   test_case({headers:12}); | 
|   test_case({headers:122}); | 
|   test_case({headers:'122'}); | 
|   test_case({headers:{accept:'text/plain'}}); | 
|   test_case({payload:[0,1,2,3],headers:[{a:'b'}]}); | 
|   test_case({a:function () {}}); | 
|   test_case({b:function () {}}); | 
|   test_case({b:function (a) {}}); | 
|   test_case(function () {}); | 
|   test_case(function (a) {}); | 
|   test_case(function (b) {}); | 
|   test_case(function (a) { return a;}); | 
|   test_case(function (a) {return a;}); | 
|   test_case('', '\'\''); | 
|   test_case('null', '\'null\''); | 
|   test_case('false', '\'false\''); | 
|   test_case('true', '\'true\''); | 
|   test_case('0', '\'0\''); | 
|   test_case('1', '\'1\''); | 
|   test_case('void 0', '\'void 0\''); | 
|   test_case('undefined', '\'undefined\''); | 
|   test_case(null); | 
|   test_case(false); | 
|   test_case(true); | 
|   test_case(Infinity); | 
|   test_case(-Infinity); | 
|   test_case(NaN); | 
|   test_case(0); | 
|   test_case(1); | 
|   test_case(void 0); | 
|   test_case({}); | 
|   test_case({a:{},b:{}}); | 
|   test_case({valueOf(){return 1}}); | 
|   test_case({valueOf(){return 2}}); | 
|   test_case([]); | 
|   test_case(new Date()); | 
|   test_case(new Date(2019, 5, 28)); | 
|   test_case(new Date(1988, 5, 9)); | 
|   test_case(global, 'global'); | 
|   | 
|   const uniqCases = _.uniqBy(cases, 'hash') | 
|   _.uniqBy(cases, 'hash').forEach(function (expected) { | 
|     var matches = _.filter(cases, { hash: expected.hash }) | 
|     t.equal(matches.length, 1, expected.hash + ': ' + _.map(matches, 'value').join(' ')) | 
|   }) | 
|   | 
|   t.end(); | 
|   | 
|   function test_case(value, name) { | 
|     var hash = sum(value); | 
|     cases.push({ value, hash }); | 
|     console.log('%s from:', hash, name || value); | 
|   } | 
| }); | 
|   | 
| test('hashes clash if same properties', function (t) { | 
|   equals(function () {}, function () {}); | 
|   equals(function (a) {}, function (a) {}); | 
|   equals({a:'1'},{a:'1'}); | 
|   equals({a:'1',b:1},{b:1,a:'1'}); | 
|   equals({valueOf(){return 1}},{valueOf(){return 1}}); | 
|   t.end(); | 
|   | 
|   function equals (a, b) { | 
|     t.equal(sum(a), sum(b)); | 
|   } | 
| }); |