git ssb

0+

wanderer🌟 / js-dfinity-radix-tree



Tree: fb6c040c6945375f945c7613513fc1a550c557fc

Files: fb6c040c6945375f945c7613513fc1a550c557fc / tests / index.js

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

Built with git-ssb-web