Files: 8063e81512342ad27a3e38e5e3fbbda334b3669b / tests / index.js
3802 bytesRaw
1 | const tape = require('tape') |
2 | const crypto = require('crypto') |
3 | const level = require('level') |
4 | const RadixTree = require('../') |
5 | const db = level('./testdb') |
6 | |
7 | tape('set and get', async t => { |
8 | let tree = new RadixTree({ |
9 | db: db |
10 | }) |
11 | |
12 | await tree.set('test', Buffer.from('cat')) |
13 | let val = await tree.get('test') |
14 | t.equals(val.toString(), 'cat') |
15 | await tree.set('te', Buffer.from('blop')) |
16 | val = await tree.get('test') |
17 | t.equals(val.toString(), 'cat') |
18 | |
19 | val = await tree.get('te') |
20 | t.equals(val.toString(), 'blop') |
21 | |
22 | await tree.set('rad', Buffer.from('cat2')) |
23 | |
24 | val = await tree.get('rad') |
25 | t.equals(val.toString(), 'cat2') |
26 | |
27 | await tree.set('test', Buffer.from('cat111')) |
28 | val = await tree.get('test') |
29 | t.equals(val.toString(), 'cat111') |
30 | |
31 | const stateRoot = await tree.flush() |
32 | |
33 | // try reteriving node from ipfs |
34 | tree = new RadixTree({ |
35 | db: db, |
36 | root: stateRoot |
37 | }) |
38 | |
39 | val = await tree.get('te') |
40 | t.equals(val.toString(), 'blop') |
41 | |
42 | val = await tree.get('rad') |
43 | t.equals(val.toString(), 'cat2') |
44 | |
45 | val = await tree.get('test') |
46 | t.equals(val.toString(), 'cat111') |
47 | // console.log(JSON.stringify(tree.root, null, 2)) |
48 | |
49 | t.end() |
50 | }) |
51 | |
52 | tape('branch nodes', async t => { |
53 | const tree = new RadixTree({ |
54 | db: db |
55 | }) |
56 | |
57 | let key0 = new RadixTree.ArrayConstructor([1, 1]) |
58 | await tree.set(key0, Buffer.from('cat')) |
59 | let key1 = new RadixTree.ArrayConstructor([0, 1]) |
60 | await tree.set(key1, Buffer.from('cat2')) |
61 | |
62 | let key2 = new RadixTree.ArrayConstructor([1, 0]) |
63 | await tree.set(key2, Buffer.from('cat')) |
64 | let key3 = new RadixTree.ArrayConstructor([0, 0]) |
65 | await tree.set(key3, Buffer.from('cat3')) |
66 | |
67 | let val = await tree.get(key0) |
68 | t.equals(val.toString(), 'cat') |
69 | val = await tree.get(key1) |
70 | t.equals(val.toString(), 'cat2') |
71 | val = await tree.get(key2) |
72 | t.equals(val.toString(), 'cat') |
73 | val = await tree.get(key3) |
74 | t.equals(val.toString(), 'cat3') |
75 | |
76 | t.end() |
77 | }) |
78 | |
79 | tape('delete', async t => { |
80 | const tree = new RadixTree({ |
81 | db: db |
82 | }) |
83 | try { |
84 | await tree.set('test', Buffer.from('cat')) |
85 | await tree.set('ter', Buffer.from('cat3')) |
86 | await tree.delete('te') |
87 | await tree.delete('test') |
88 | await tree.delete('ter') |
89 | t.deepEquals(tree.root['/'], RadixTree.emptyTreeState) |
90 | |
91 | // tests delete midle branchs |
92 | await tree.set('test', Buffer.from('cat')) |
93 | await tree.set('te', Buffer.from('cat2')) |
94 | await tree.set('ter', Buffer.from('cat3')) |
95 | await tree.delete('te') |
96 | let val = await tree.get('test') |
97 | t.equals(val.toString(), 'cat') |
98 | |
99 | // tests delete end branchs |
100 | await tree.set('te', 'cat2') |
101 | await tree.delete('ter') |
102 | await tree.delete('te') |
103 | await tree.delete('test') |
104 | t.deepEquals(tree.root['/'], RadixTree.emptyTreeState) |
105 | } catch (e) { |
106 | console.log(e) |
107 | } |
108 | t.end() |
109 | }) |
110 | |
111 | tape('large values', async t => { |
112 | const tree = new RadixTree({ |
113 | db: db |
114 | }) |
115 | const saved = Buffer.alloc(33).fill(1) |
116 | await tree.set('test', saved) |
117 | const value = await tree.get('test') |
118 | t.equals(value.toString(), saved.toString()) |
119 | t.end() |
120 | }) |
121 | |
122 | tape('random', async t => { |
123 | const tree = new RadixTree({ |
124 | db: db |
125 | }) |
126 | const entries = 100 |
127 | for (let i = 0; i < entries; i++) { |
128 | const key = crypto.createHash('sha256').update(i.toString()).digest().slice(0, 20) |
129 | await tree.set(key, Buffer.from([i])) |
130 | } |
131 | // console.log(JSON.stringify(tree.root, null, 2)) |
132 | |
133 | await tree.flush() |
134 | |
135 | for (let i = 0; i < entries; i++) { |
136 | const key = crypto.createHash('sha256').update(i.toString()).digest().slice(0, 20) |
137 | const value = await tree.get(key) |
138 | t.equals(value[0], i) |
139 | } |
140 | |
141 | await tree.flush() |
142 | for (let i = 0; i < entries; i++) { |
143 | const key = crypto.createHash('sha256').update(i.toString()).digest().slice(0, 20) |
144 | await tree.delete(key) |
145 | } |
146 | |
147 | t.deepEquals(tree.root['/'], RadixTree.emptyTreeState) |
148 | |
149 | t.end() |
150 | }) |
151 |
Built with git-ssb-web