git ssb

0+

wanderer🌟 / js-dfinity-radix-tree



Tree: e2492b833ea56ac03262f19efeb131600d8d872d

Files: e2492b833ea56ac03262f19efeb131600d8d872d / tests / index.js

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

Built with git-ssb-web