stack_memdb/
lib.rs

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}