1 | void function(){
|
2 | var test = require('tape')
|
3 | var rt = require('../index.js')
|
4 |
|
5 | function expected_number_of_duplicates(n,d){
|
6 |
|
7 | return n - d + d * Math.pow((d-1)/d,n)
|
8 | }
|
9 |
|
10 | test('type', function(t){
|
11 | t.plan(1)
|
12 | t.equal(typeof rt(1), 'string')
|
13 | })
|
14 |
|
15 | test('length', function(t){
|
16 | var i = 4
|
17 | t.plan(i+2)
|
18 | while ( i -- ) {
|
19 | var l = Math.pow(i,i)
|
20 | t.equal(rt(l).length, l)
|
21 | }
|
22 | t.equal(rt(-1), undefined)
|
23 | t.equal(rt([]), undefined)
|
24 | })
|
25 |
|
26 |
|
27 |
|
28 |
|
29 | function testDups(klen, count, salt){
|
30 | var tokgen = rt.create(salt||rt.salt())
|
31 | var exp_dups = expected_number_of_duplicates(count,Math.pow(tokgen.salt().length, klen))
|
32 |
|
33 |
|
34 |
|
35 | var ndups = Math.ceil(exp_dups*1.1)
|
36 | test('number of duplicates less than '+ndups+
|
37 | ' (expected: '+exp_dups+') from '+count+
|
38 | ' keys of length '+klen, function(t){
|
39 | t.plan(1)
|
40 | var i = count
|
41 | var keys = []
|
42 | var duplicates = []
|
43 | var k = ''
|
44 |
|
45 | function same(k,c){ return k == c }
|
46 |
|
47 | while ( i -- ) {
|
48 | k = tokgen(klen, salt)
|
49 | if ( keys.some(same.bind(null,k)) ) duplicates.push(k)
|
50 | keys.push(k)
|
51 | }
|
52 |
|
53 | var msg = '# actual number of duplicates ' + duplicates.length
|
54 | if ( duplicates.length < ndups ) {
|
55 | t.pass(msg)
|
56 | } else {
|
57 | t.fail(msg)
|
58 | }
|
59 | })
|
60 | }
|
61 |
|
62 | var abc = 'abcdefghijklmnopqrstuvwxyz'
|
63 | var ABC = abc.toUpperCase()
|
64 | testDups(3,3000)
|
65 | testDups(3,3000, abc)
|
66 | testDups(3,5000, rt.salt()+ABC)
|
67 | }()
|