Initial commit
[yaffs-website] / node_modules / lru-cache / test / foreach.js
1 var test = require('tap').test
2 var LRU = require('../')
3
4 test('forEach', function (t) {
5   var l = new LRU(5)
6   for (var i = 0; i < 10; i ++) {
7     l.set(i.toString(), i.toString(2))
8   }
9
10   var i = 9
11   l.forEach(function (val, key, cache) {
12     t.equal(cache, l)
13     t.equal(key, i.toString())
14     t.equal(val, i.toString(2))
15     i -= 1
16   })
17
18   // get in order of most recently used
19   l.get(6)
20   l.get(8)
21
22   var order = [ 8, 6, 9, 7, 5 ]
23   var i = 0
24
25   l.forEach(function (val, key, cache) {
26     var j = order[i ++]
27     t.equal(cache, l)
28     t.equal(key, j.toString())
29     t.equal(val, j.toString(2))
30   })
31   t.equal(i, order.length);
32
33   t.end()
34 })
35
36 test('keys() and values()', function (t) {
37   var l = new LRU(5)
38   for (var i = 0; i < 10; i ++) {
39     l.set(i.toString(), i.toString(2))
40   }
41
42   t.similar(l.keys(), ['9', '8', '7', '6', '5'])
43   t.similar(l.values(), ['1001', '1000', '111', '110', '101'])
44
45   // get in order of most recently used
46   l.get(6)
47   l.get(8)
48
49   t.similar(l.keys(), ['8', '6', '9', '7', '5'])
50   t.similar(l.values(), ['1000', '110', '1001', '111', '101'])
51
52   t.end()
53 })
54
55 test('all entries are iterated over', function(t) {
56   var l = new LRU(5)
57   for (var i = 0; i < 10; i ++) {
58     l.set(i.toString(), i.toString(2))
59   }
60
61   var i = 0
62   l.forEach(function (val, key, cache) {
63     if (i > 0) {
64       cache.del(key)
65     }
66     i += 1
67   })
68
69   t.equal(i, 5)
70   t.equal(l.keys().length, 1)
71
72   t.end()
73 })
74
75 test('all stale entries are removed', function(t) {
76   var l = new LRU({ max: 5, maxAge: -5, stale: true })
77   for (var i = 0; i < 10; i ++) {
78     l.set(i.toString(), i.toString(2))
79   }
80
81   var i = 0
82   l.forEach(function () {
83     i += 1
84   })
85
86   t.equal(i, 5)
87   t.equal(l.keys().length, 0)
88
89   t.end()
90 })
91
92 test('expires', function (t) {
93   var l = new LRU({
94     max: 10,
95     maxAge: 50
96   })
97   for (var i = 0; i < 10; i++) {
98     l.set(i.toString(), i.toString(2), ((i % 2) ? 25 : undefined))
99   }
100
101   var i = 0
102   var order = [ 8, 6, 4, 2, 0 ]
103   setTimeout(function () {
104     l.forEach(function (val, key, cache) {
105       var j = order[i++]
106       t.equal(cache, l)
107       t.equal(key, j.toString())
108       t.equal(val, j.toString(2))
109     })
110     t.equal(i, order.length);
111
112     setTimeout(function () {
113       var count = 0;
114       l.forEach(function (val, key, cache) { count++; })
115       t.equal(0, count);
116       t.end()
117     }, 25)
118
119   }, 26)
120 })