]> git.lizzy.rs Git - rust.git/blob - src/librustc_data_structures/sorted_map/tests.rs
Rollup merge of #67527 - GuillaumeGomez:results-show-too-much, r=kinnison
[rust.git] / src / librustc_data_structures / sorted_map / tests.rs
1 use super::SortedMap;
2
3 #[test]
4 fn test_insert_and_iter() {
5     let mut map = SortedMap::new();
6     let mut expected = Vec::new();
7
8     for x in 0..100 {
9         assert_eq!(map.iter().cloned().collect::<Vec<_>>(), expected);
10
11         let x = 1000 - x * 2;
12         map.insert(x, x);
13         expected.insert(0, (x, x));
14     }
15 }
16
17 #[test]
18 fn test_get_and_index() {
19     let mut map = SortedMap::new();
20     let mut expected = Vec::new();
21
22     for x in 0..100 {
23         let x = 1000 - x;
24         if x & 1 == 0 {
25             map.insert(x, x);
26         }
27         expected.push(x);
28     }
29
30     for mut x in expected {
31         if x & 1 == 0 {
32             assert_eq!(map.get(&x), Some(&x));
33             assert_eq!(map.get_mut(&x), Some(&mut x));
34             assert_eq!(map[&x], x);
35             assert_eq!(&mut map[&x], &mut x);
36         } else {
37             assert_eq!(map.get(&x), None);
38             assert_eq!(map.get_mut(&x), None);
39         }
40     }
41 }
42
43 #[test]
44 fn test_range() {
45     let mut map = SortedMap::new();
46     map.insert(1, 1);
47     map.insert(3, 3);
48     map.insert(6, 6);
49     map.insert(9, 9);
50
51     let keys = |s: &[(_, _)]| s.into_iter().map(|e| e.0).collect::<Vec<u32>>();
52
53     for start in 0..11 {
54         for end in 0..11 {
55             if end < start {
56                 continue;
57             }
58
59             let mut expected = vec![1, 3, 6, 9];
60             expected.retain(|&x| x >= start && x < end);
61
62             assert_eq!(keys(map.range(start..end)), expected, "range = {}..{}", start, end);
63         }
64     }
65 }
66
67 #[test]
68 fn test_offset_keys() {
69     let mut map = SortedMap::new();
70     map.insert(1, 1);
71     map.insert(3, 3);
72     map.insert(6, 6);
73
74     map.offset_keys(|k| *k += 1);
75
76     let mut expected = SortedMap::new();
77     expected.insert(2, 1);
78     expected.insert(4, 3);
79     expected.insert(7, 6);
80
81     assert_eq!(map, expected);
82 }
83
84 fn keys(s: SortedMap<u32, u32>) -> Vec<u32> {
85     s.into_iter().map(|(k, _)| k).collect::<Vec<u32>>()
86 }
87
88 fn elements(s: SortedMap<u32, u32>) -> Vec<(u32, u32)> {
89     s.into_iter().collect::<Vec<(u32, u32)>>()
90 }
91
92 #[test]
93 fn test_remove_range() {
94     let mut map = SortedMap::new();
95     map.insert(1, 1);
96     map.insert(3, 3);
97     map.insert(6, 6);
98     map.insert(9, 9);
99
100     for start in 0..11 {
101         for end in 0..11 {
102             if end < start {
103                 continue;
104             }
105
106             let mut expected = vec![1, 3, 6, 9];
107             expected.retain(|&x| x < start || x >= end);
108
109             let mut map = map.clone();
110             map.remove_range(start..end);
111
112             assert_eq!(keys(map), expected, "range = {}..{}", start, end);
113         }
114     }
115 }
116
117 #[test]
118 fn test_remove() {
119     let mut map = SortedMap::new();
120     let mut expected = Vec::new();
121
122     for x in 0..10 {
123         map.insert(x, x);
124         expected.push((x, x));
125     }
126
127     for x in 0..10 {
128         let mut map = map.clone();
129         let mut expected = expected.clone();
130
131         assert_eq!(map.remove(&x), Some(x));
132         expected.remove(x as usize);
133
134         assert_eq!(map.iter().cloned().collect::<Vec<_>>(), expected);
135     }
136 }
137
138 #[test]
139 fn test_insert_presorted_non_overlapping() {
140     let mut map = SortedMap::new();
141     map.insert(2, 0);
142     map.insert(8, 0);
143
144     map.insert_presorted(vec![(3, 0), (7, 0)]);
145
146     let expected = vec![2, 3, 7, 8];
147     assert_eq!(keys(map), expected);
148 }
149
150 #[test]
151 fn test_insert_presorted_first_elem_equal() {
152     let mut map = SortedMap::new();
153     map.insert(2, 2);
154     map.insert(8, 8);
155
156     map.insert_presorted(vec![(2, 0), (7, 7)]);
157
158     let expected = vec![(2, 0), (7, 7), (8, 8)];
159     assert_eq!(elements(map), expected);
160 }
161
162 #[test]
163 fn test_insert_presorted_last_elem_equal() {
164     let mut map = SortedMap::new();
165     map.insert(2, 2);
166     map.insert(8, 8);
167
168     map.insert_presorted(vec![(3, 3), (8, 0)]);
169
170     let expected = vec![(2, 2), (3, 3), (8, 0)];
171     assert_eq!(elements(map), expected);
172 }
173
174 #[test]
175 fn test_insert_presorted_shuffle() {
176     let mut map = SortedMap::new();
177     map.insert(2, 2);
178     map.insert(7, 7);
179
180     map.insert_presorted(vec![(1, 1), (3, 3), (8, 8)]);
181
182     let expected = vec![(1, 1), (2, 2), (3, 3), (7, 7), (8, 8)];
183     assert_eq!(elements(map), expected);
184 }
185
186 #[test]
187 fn test_insert_presorted_at_end() {
188     let mut map = SortedMap::new();
189     map.insert(1, 1);
190     map.insert(2, 2);
191
192     map.insert_presorted(vec![(3, 3), (8, 8)]);
193
194     let expected = vec![(1, 1), (2, 2), (3, 3), (8, 8)];
195     assert_eq!(elements(map), expected);
196 }