git ssb

0+

wanderer🌟 / js-dfinity-radix-tree



Tree: 8063e81512342ad27a3e38e5e3fbbda334b3669b

Files: 8063e81512342ad27a3e38e5e3fbbda334b3669b / tests / index.js

3802 bytesRaw
1const tape = require('tape')
2const crypto = require('crypto')
3const level = require('level')
4const RadixTree = require('../')
5const db = level('./testdb')
6
7tape('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
52tape('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
79tape('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
111tape('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
122tape('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