git ssb

0+

wanderer🌟 / js-dfinity-radix-tree



Tree: f9516195f8ab298aa8892fc99db3029a7a3d7742

Files: f9516195f8ab298aa8892fc99db3029a7a3d7742 / tests / index.js

3536 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.createMerkleRoot()
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, 0, 0])
63 await tree.set(key0, 'cat')
64 let key1 = new RadixTree.ArrayConstructor([0, 1, 0, 1])
65 await tree.set(key1, 'cat2')
66 let val = await tree.get(key0)
67 t.equals(val, 'cat')
68
69 val = await tree.get(key1)
70 t.equals(val, 'cat2')
71
72 let key3 = new RadixTree.ArrayConstructor([0, 1, 0, 1, 1])
73 await tree.set(key3, 'test')
74 val = await tree.get(key3)
75
76 t.equals(val, 'test')
77
78 let key4 = new RadixTree.ArrayConstructor([0, 1, 0, 0, 0])
79 await tree.set(key4, 'dog')
80 val = await tree.get(key4)
81
82 let key5 = new RadixTree.ArrayConstructor([0, 1, 1, 0, 0])
83 await tree.set(key5, 'dog2')
84 val = await tree.get(key5)
85 t.equals(val, 'dog2')
86
87 await tree.delete(key0)
88
89 console.log(JSON.stringify(tree.root, null, 2))
90 val = await tree.get(key5)
91 t.equals(val, 'dog2')
92 t.end()
93 })
94
95 tape('delete', async t => {
96 const tree = new RadixTree({
97 dag: node.dag
98 })
99 try {
100 await tree.set('test', 'cat')
101 await tree.set('ter', 'cat3')
102 await tree.delete('te')
103 await tree.delete('test')
104 await tree.delete('ter')
105 t.equals(tree.root['/'], undefined)
106
107 // tests delete midle branchs
108 await tree.set('test', 'cat')
109 await tree.set('te', 'cat2')
110 await tree.set('ter', 'cat3')
111 await tree.delete('te')
112 let val = await tree.get('test')
113 t.equals(val, 'cat')
114
115 // tests delete end branchs
116 await tree.set('te', 'cat2')
117 await tree.delete('ter')
118 await tree.delete('te')
119 await tree.delete('test')
120 t.equals(tree.root['/'], undefined)
121 } catch (e) {
122 console.log(e)
123 }
124 t.end()
125 })
126
127 tape('large values', async t => {
128 const tree = new RadixTree({
129 dag: node.dag
130 })
131 const saved = new Buffer(33).fill(1)
132 await tree.set('test', saved)
133 const value = await tree.get('test')
134 t.equals(value.toString(), saved.toString())
135 t.end()
136 })
137
138 tape('falures', async t => {
139 const tree = new RadixTree({
140 dag: node.dag
141 })
142 const key = crypto.createHash('sha256').update((0).toString()).digest().slice(0, 20)
143 await tree.set(key, 0)
144 const value = await tree.get(key)
145 t.equals(value, 0)
146
147 t.end()
148 })
149})
150

Built with git-ssb-web