Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
80737 views
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
t.end()
112
113
setTimeout(function () {
114
var count = 0;
115
l.forEach(function (val, key, cache) { count++; })
116
t.equal(0, count);
117
t.end()
118
}, 25)
119
120
}, 26)
121
})
122
123