-
Notifications
You must be signed in to change notification settings - Fork 28
/
Copy pathclosest.js
87 lines (75 loc) · 1.98 KB
/
closest.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
const tape = require('tape')
const create = require('./helpers/create')
tape('closest put node is a prefix', function (t) {
t.plan(4)
const db = create()
db.put('a', 'hello', err => {
t.error(err, 'no error')
db.put('b', 'goodbye', err => {
t.error(err, 'no error')
db.put('a/b', 'something', {
closest: true,
condition: (closest, newNode, cb) => {
t.same(closest.key, 'a')
return cb(null, true)
}
}, err => {
t.error(err, 'no error')
})
})
})
})
tape('closest put node is a prefix, batch insertion with flags', function (t) {
t.plan(3)
const db = create()
db.batch([
{ type: 'put', key: 'a', value: 'hello', flags: 1 },
{ type: 'put', key: 'b', value: 'goodbye' }
], err => {
t.error(err, 'no error')
db.put('a/b', 'something', {
closest: true,
condition: (closest, newNode, cb) => {
t.same(closest.key, 'a')
return cb(null, true)
}
}, err => {
t.error(err, 'no error')
})
})
})
tape('closest node to non-existing delete path is a prefix', function (t) {
t.plan(4)
const db = create()
db.batch([
{ type: 'put', key: 'a', value: 'hello' },
{ type: 'put', key: 'b', value: 'goodbye' },
{ type: 'put', key: 'a/a', value: 'world' },
{ type: 'put', key: 'b/a', value: 'dog' },
{ type: 'put', key: 'b/b', value: 'otter' }
], err => {
t.error(err, 'no error')
db.del('a/a/b', {
closest: true,
condition: (closest, cb) => {
t.same(closest.key, 'a/a')
return cb(null, true)
}
}, (err, node) => {
t.error(err, 'no error')
t.false(node)
})
})
})
// TODO: Fix this issue.
tape.skip('closest node with one hidden node', function (t) {
t.plan(3)
const db = create()
db.put('a', 'hello', { hidden: true }, err => {
t.error(err, 'no error')
db.get('b', { closest: true }, (err, node) => {
t.error(err, 'no error')
t.false(node)
})
})
})