Skip to content

Commit 871df7b

Browse files
committed
test: add tests for merge trait of operations on various data structures, including conflict scenarios and checking for empty structures
1 parent 721eb54 commit 871df7b

File tree

1 file changed

+122
-0
lines changed

1 file changed

+122
-0
lines changed

crates/core/tests/test_merge.rs

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
use std::collections::{BTreeMap, BTreeSet};
2+
3+
use bdk_core::Merge;
4+
5+
#[test]
6+
fn test_btree_map_merge() {
7+
let mut map1: BTreeMap<i32, &str> = BTreeMap::new();
8+
map1.insert(1, "a");
9+
let mut map2: BTreeMap<i32, &str> = BTreeMap::new();
10+
map2.insert(2, "b");
11+
12+
map1.merge(map2);
13+
14+
assert_eq!(map1.len(), 2);
15+
assert_eq!(map1.get(&1), Some(&"a"));
16+
assert_eq!(map1.get(&2), Some(&"b"));
17+
}
18+
19+
#[test]
20+
fn test_btree_set_merge() {
21+
let mut set1: BTreeSet<i32> = BTreeSet::new();
22+
set1.insert(1);
23+
let mut set2: BTreeSet<i32> = BTreeSet::new();
24+
set2.insert(2);
25+
26+
set1.merge(set2);
27+
28+
assert_eq!(set1.len(), 2);
29+
assert!(set1.contains(&1));
30+
assert!(set1.contains(&2));
31+
}
32+
33+
#[test]
34+
fn test_vec_merge() {
35+
let mut vec1 = vec![1, 2, 3];
36+
let vec2 = vec![4, 5, 6];
37+
38+
vec1.merge(vec2);
39+
40+
assert_eq!(vec1, vec![1, 2, 3, 4, 5, 6]);
41+
}
42+
43+
#[test]
44+
fn test_tuple_merge() {
45+
let mut tuple1 = (vec![1, 2], BTreeSet::from([3]));
46+
let tuple2 = (vec![3, 4], BTreeSet::from([4]));
47+
48+
tuple1.merge(tuple2);
49+
50+
assert_eq!(tuple1.0, vec![1, 2, 3, 4]);
51+
assert_eq!(tuple1.1.len(), 2);
52+
assert!(tuple1.1.contains(&3));
53+
assert!(tuple1.1.contains(&4));
54+
}
55+
56+
#[test]
57+
fn test_is_empty() {
58+
let map: BTreeMap<i32, i32> = BTreeMap::new();
59+
assert!(<BTreeMap<i32, i32>>::is_empty(&map));
60+
61+
let set: BTreeSet<i32> = BTreeSet::new();
62+
assert!(<BTreeSet<i32>>::is_empty(&set));
63+
64+
let vec: Vec<i32> = Vec::new();
65+
assert!(<Vec<i32>>::is_empty(&vec));
66+
}
67+
68+
#[test]
69+
fn test_take() {
70+
let mut map: BTreeMap<i32, i32> = BTreeMap::new();
71+
map.insert(1, 1);
72+
let taken_map = map.take();
73+
assert!(taken_map.is_some());
74+
assert!(map.is_empty());
75+
76+
let mut set: BTreeSet<i32> = BTreeSet::new();
77+
set.insert(1);
78+
let taken_set = <BTreeSet<i32> as Merge>::take(&mut set);
79+
assert!(taken_set.is_some());
80+
assert!(set.is_empty());
81+
82+
let mut vec: Vec<i32> = vec![1];
83+
let taken_vec = vec.take();
84+
assert!(taken_vec.is_some());
85+
assert!(vec.is_empty());
86+
}
87+
88+
#[test]
89+
fn test_btree_map_merge_conflict() {
90+
let mut map1: BTreeMap<i32, &str> = BTreeMap::new();
91+
map1.insert(1, "a");
92+
let mut map2: BTreeMap<i32, &str> = BTreeMap::new();
93+
map2.insert(1, "b");
94+
95+
map1.merge(map2);
96+
97+
assert_eq!(map1.len(), 1);
98+
assert_eq!(map1.get(&1), Some(&"b"));
99+
}
100+
101+
#[test]
102+
fn test_btree_set_merge_conflict() {
103+
let mut set1: BTreeSet<i32> = BTreeSet::new();
104+
set1.insert(1);
105+
let mut set2: BTreeSet<i32> = BTreeSet::new();
106+
set2.insert(1);
107+
108+
set1.merge(set2);
109+
110+
assert_eq!(set1.len(), 1);
111+
assert!(set1.contains(&1));
112+
}
113+
114+
#[test]
115+
fn test_vec_merge_conflict() {
116+
let mut vec1 = vec![1, 2, 3];
117+
let vec2 = vec![3, 4, 5];
118+
119+
vec1.merge(vec2);
120+
121+
assert_eq!(vec1, vec![1, 2, 3, 3, 4, 5]);
122+
}

0 commit comments

Comments
 (0)