1mod memdb;
2mod outcomes;
3mod stack_usize;
4mod utilities;
5
6pub use memdb::*;
7pub use outcomes::*;
8pub use stack_usize::*;
9pub use utilities::*;
10
11#[cfg(test)]
12
13mod storage_tests {
14
15 #[test]
16 fn test_stack_usize() {
17 use crate::{init_storage_stack, StackMemDB, StackUsize};
18
19 let stack_memdb = StackMemDB::<{ init_storage_stack(&StackUsize::U4) }>::new();
20
21 assert!(stack_memdb.storage_len() == init_storage_stack(&StackUsize::U4));
22 }
23
24 #[test]
25 fn test_insert() {
26 use crate::{init_storage_stack, StackMemDB, StackUsize, StorageOutcome};
27 use wasmium_random::WasmiumRandom;
28
29 let mut stack_memdb = StackMemDB::<{ init_storage_stack(&StackUsize::U4) }>::new();
30
31 assert!(stack_memdb.storage_len() == init_storage_stack(&StackUsize::U4));
32
33 let alice = WasmiumRandom::secure_numeric32();
34 let bob = WasmiumRandom::secure_numeric32();
35 let eve = WasmiumRandom::secure_numeric32();
36 let john = WasmiumRandom::secure_numeric32();
37 let jane = WasmiumRandom::secure_numeric32();
38
39 assert_eq!(stack_memdb.insert(alice), StorageOutcome::Inserted(alice));
40 assert_eq!(stack_memdb.insert(bob), StorageOutcome::Inserted(bob));
41 assert_eq!(stack_memdb.insert(eve), StorageOutcome::Inserted(eve));
42 assert_eq!(stack_memdb.insert(john), StorageOutcome::Inserted(john));
43 assert_eq!(stack_memdb.insert(jane), StorageOutcome::CapacityExceeded);
44 }
45
46 #[test]
47 fn test_update() {
48 use crate::{init_storage_stack, StackMemDB, StackUsize, StorageOutcome};
49 use wasmium_random::WasmiumRandom;
50
51 let mut stack_memdb = StackMemDB::<{ init_storage_stack(&StackUsize::U4) }>::new();
52
53 assert!(stack_memdb.storage_len() == init_storage_stack(&StackUsize::U4));
54
55 let alice = WasmiumRandom::secure_numeric32();
56 let bob = WasmiumRandom::secure_numeric32();
57 let eve = WasmiumRandom::secure_numeric32();
58 let john = WasmiumRandom::secure_numeric32();
59 let jane = WasmiumRandom::secure_numeric32();
60 let doe = WasmiumRandom::secure_numeric32();
61
62 assert_eq!(stack_memdb.insert(alice), StorageOutcome::Inserted(alice));
63 assert_eq!(stack_memdb.insert(bob), StorageOutcome::Inserted(bob));
64 assert_eq!(stack_memdb.insert(eve), StorageOutcome::Inserted(eve));
65 assert_eq!(stack_memdb.insert(john), StorageOutcome::Inserted(john));
66 assert_eq!(stack_memdb.insert(jane), StorageOutcome::CapacityExceeded);
67 assert_eq!(
68 stack_memdb.update(alice, doe),
69 StorageOutcome::Updated(alice)
70 );
71 }
72
73 #[test]
74 fn test_remove() {
75 use crate::{init_storage_stack, StackMemDB, StackUsize, StorageOutcome};
76 use wasmium_random::WasmiumRandom;
77
78 let mut stack_memdb = StackMemDB::<{ init_storage_stack(&StackUsize::U3) }>::new();
79
80 assert!(stack_memdb.storage_len() == init_storage_stack(&StackUsize::U3));
81
82 let alice = WasmiumRandom::secure_numeric32();
83 let bob = WasmiumRandom::secure_numeric32();
84 let eve = WasmiumRandom::secure_numeric32();
85
86 stack_memdb.insert(alice);
87 stack_memdb.insert(bob);
88 stack_memdb.insert(eve);
89 assert_eq!(stack_memdb.remove(alice), StorageOutcome::Zeroed(alice));
90
91 assert_eq!(
92 Some(0_usize),
93 match stack_memdb.find_and_index([0_u8; 32]) {
94 (Some(index), _) => Some(index),
95 _ => None,
96 }
97 )
98 }
99
100 #[test]
101 fn test_find() {
102 use crate::{init_storage_stack, StackMemDB, StackUsize};
103 use wasmium_random::WasmiumRandom;
104
105 let mut stack_memdb = StackMemDB::<{ init_storage_stack(&StackUsize::U4) }>::new();
106
107 assert!(stack_memdb.storage_len() == init_storage_stack(&StackUsize::U4));
108
109 let alice = WasmiumRandom::secure_numeric32();
110 let bob = WasmiumRandom::secure_numeric32();
111 let eve = WasmiumRandom::secure_numeric32();
112 let john = WasmiumRandom::secure_numeric32();
113 let jane = WasmiumRandom::secure_numeric32();
114
115 stack_memdb.insert(alice);
116 stack_memdb.insert(bob);
117 stack_memdb.insert(eve);
118 stack_memdb.insert(john);
119 stack_memdb.insert(jane);
120
121 assert_eq!(stack_memdb.find(alice), Some(alice));
122 assert_eq!(stack_memdb.find(bob), Some(bob));
123 assert_eq!(stack_memdb.find(eve), Some(eve));
124 assert_eq!(stack_memdb.find(john), Some(john));
125 assert_eq!(stack_memdb.find(jane), None);
126 }
127
128 #[test]
129 fn test_borsh() {
130 use crate::{init_storage_stack, StackMemDB, StackUsize};
131 use borsh::{BorshDeserialize, BorshSerialize};
132 use wasmium_random::WasmiumRandom;
133
134 let mut stack_memdb = StackMemDB::<{ init_storage_stack(&StackUsize::U4) }>::new();
135
136 assert!(stack_memdb.storage_len() == init_storage_stack(&StackUsize::U4));
137
138 let alice = WasmiumRandom::secure_numeric32();
139 let bob = WasmiumRandom::secure_numeric32();
140 let eve = WasmiumRandom::secure_numeric32();
141 let john = WasmiumRandom::secure_numeric32();
142 let jane = WasmiumRandom::secure_numeric32();
143
144 stack_memdb.insert(alice);
145 stack_memdb.insert(bob);
146 stack_memdb.insert(eve);
147 stack_memdb.insert(john);
148 stack_memdb.insert(jane);
149
150 let ser = stack_memdb.try_to_vec().unwrap();
151
152 let deser_stack_memdb =
153 StackMemDB::<{ init_storage_stack(&StackUsize::U4) }>::try_from_slice(&ser).unwrap();
154
155 assert_eq!(stack_memdb, deser_stack_memdb)
156 }
157}