Initial commit
[yaffs-website] / node_modules / pseudomap / test / basic.js
1 var t = require('tap')
2
3 process.env.TEST_PSEUDOMAP = 'true'
4
5 var PM = require('../')
6 runTests(PM)
7
8 // if possible, verify that Map also behaves the same way
9 if (typeof Map === 'function')
10   runTests(Map)
11
12
13 function runTests (Map) {
14   t.throws(Map)
15
16   var m = new Map()
17
18   t.equal(m.size, 0)
19
20   m.set(1, '1 string')
21   t.equal(m.get(1), '1 string')
22   t.equal(m.size, 1)
23   m.size = 1000
24   t.equal(m.size, 1)
25   m.size = 0
26   t.equal(m.size, 1)
27
28   m = new Map([[1, 'number 1'], ['1', 'string 1']])
29   t.equal(m.get(1), 'number 1')
30   t.equal(m.get('1'), 'string 1')
31   t.equal(m.size, 2)
32
33   m = new Map(m)
34   t.equal(m.get(1), 'number 1')
35   t.equal(m.get('1'), 'string 1')
36   t.equal(m.size, 2)
37
38   var akey = {}
39   var bkey = {}
40   m.set(akey, { some: 'data' })
41   m.set(bkey, { some: 'other data' })
42   t.same(m.get(akey), { some: 'data' })
43   t.same(m.get(bkey), { some: 'other data' })
44   t.equal(m.size, 4)
45
46   var x = /x/
47   var y = /x/
48   m.set(x, 'x regex')
49   m.set(y, 'y regex')
50   t.equal(m.get(x), 'x regex')
51   m.set(x, 'x again')
52   t.equal(m.get(x), 'x again')
53   t.equal(m.size, 6)
54
55   m.set(NaN, 'not a number')
56   t.equal(m.get(NaN), 'not a number')
57   m.set(NaN, 'it is a ' + typeof NaN)
58   t.equal(m.get(NaN), 'it is a number')
59   m.set('NaN', 'stringie nan')
60   t.equal(m.get(NaN), 'it is a number')
61   t.equal(m.get('NaN'), 'stringie nan')
62   t.equal(m.size, 8)
63
64   m.delete(NaN)
65   t.equal(m.get(NaN), undefined)
66   t.equal(m.size, 7)
67
68   var expect = [
69     { value: 'number 1', key: 1 },
70     { value: 'string 1', key: '1' },
71     { value: { some: 'data' }, key: {} },
72     { value: { some: 'other data' }, key: {} },
73     { value: 'x again', key: /x/ },
74     { value: 'y regex', key: /x/ },
75     { value: 'stringie nan', key: 'NaN' }
76   ]
77   var actual = []
78
79   m.forEach(function (value, key) {
80     actual.push({ value: value, key: key })
81   })
82   t.same(actual, expect)
83
84   m.clear()
85   t.equal(m.size, 0)
86 }