Line data Source code
1 : mod tests {
2 : use googletest::prelude::*;
3 : use googletest::verify_that;
4 : use eikon3ds_core::util::bit_manipulation::{is_bit_set_16, is_bit_set_32, set_bit_16, set_bit_32};
5 :
6 2 : #[test]
7 2 : fn set_bit_16_set_bit_true_sets_bit() -> Result<()> {
8 2 : let table = vec![
9 2 : ((0x0, 0), 0x1),
10 2 : ((0x0, 1), 0x2),
11 2 : ((0x0, 2), 0x4),
12 2 : ((0x0, 3), 0x8),
13 2 : ((0x0, 4), 0x10),
14 2 : ((0x0, 5), 0x20),
15 2 : ((0x0, 6), 0x40),
16 2 : ((0x0, 7), 0x80),
17 2 : ((0x0, 8), 0x100),
18 2 : ((0x0, 9), 0x200),
19 2 : ((0x0, 10), 0x400),
20 2 : ((0x0, 11), 0x800),
21 2 : ((0x0, 12), 0x1000),
22 2 : ((0x0, 13), 0x2000),
23 2 : ((0x0, 14), 0x4000),
24 2 : ((0x0, 15), 0x8000),
25 2 : ];
26 :
27 34 : for ((val, bit_idx), expected) in table {
28 32 : let res =
29 32 : set_bit_16(/* val= */ val, /* bit_idx= */ bit_idx, /* bit_val= */ true);
30 32 :
31 32 : verify_that!(res, eq(expected))?;
32 : }
33 :
34 2 : Ok(())
35 2 : }
36 :
37 2 : #[test]
38 2 : fn set_bit_16_set_bit_false_clears_bit() -> Result<()> {
39 2 : let table = vec![
40 2 : ((0xFFFF, 0), 0xFFFE),
41 2 : ((0xFFFF, 1), 0xFFFD),
42 2 : ((0xFFFF, 2), 0xFFFB),
43 2 : ((0xFFFF, 3), 0xFFF7),
44 2 : ((0xFFFF, 4), 0xFFEF),
45 2 : ((0xFFFF, 5), 0xFFDF),
46 2 : ((0xFFFF, 6), 0xFFBF),
47 2 : ((0xFFFF, 7), 0xFF7F),
48 2 : ((0xFFFF, 8), 0xFEFF),
49 2 : ((0xFFFF, 9), 0xFDFF),
50 2 : ((0xFFFF, 10), 0xFBFF),
51 2 : ((0xFFFF, 11), 0xF7FF),
52 2 : ((0xFFFF, 12), 0xEFFF),
53 2 : ((0xFFFF, 13), 0xDFFF),
54 2 : ((0xFFFF, 14), 0xBFFF),
55 2 : ((0xFFFF, 15), 0x7FFF),
56 2 : ];
57 :
58 34 : for ((val, bit_idx), expected) in table {
59 32 : let res =
60 32 : set_bit_16(/* val= */ val, /* bit_idx= */ bit_idx, /* bit_val= */ false);
61 32 :
62 32 : verify_that!(res, eq(expected))?;
63 : }
64 :
65 2 : Ok(())
66 2 : }
67 :
68 2 : #[test]
69 2 : fn set_bit_32_set_bit_sets_bit() -> Result<()> {
70 2 : let table = vec![
71 2 : ((0x0, 0), 0x1),
72 2 : ((0x0, 1), 0x2),
73 2 : ((0x0, 2), 0x4),
74 2 : ((0x0, 3), 0x8),
75 2 : ((0x0, 4), 0x10),
76 2 : ((0x0, 5), 0x20),
77 2 : ((0x0, 6), 0x40),
78 2 : ((0x0, 7), 0x80),
79 2 : ((0x0, 8), 0x100),
80 2 : ((0x0, 9), 0x200),
81 2 : ((0x0, 10), 0x400),
82 2 : ((0x0, 11), 0x800),
83 2 : ((0x0, 12), 0x1000),
84 2 : ((0x0, 13), 0x2000),
85 2 : ((0x0, 14), 0x4000),
86 2 : ((0x0, 15), 0x8000),
87 2 : ((0x0, 16), 0x10000),
88 2 : ((0x0, 17), 0x20000),
89 2 : ((0x0, 18), 0x40000),
90 2 : ((0x0, 19), 0x80000),
91 2 : ((0x0, 20), 0x100000),
92 2 : ((0x0, 21), 0x200000),
93 2 : ((0x0, 22), 0x400000),
94 2 : ((0x0, 23), 0x800000),
95 2 : ((0x0, 24), 0x1000000),
96 2 : ((0x0, 25), 0x2000000),
97 2 : ((0x0, 26), 0x4000000),
98 2 : ((0x0, 27), 0x8000000),
99 2 : ((0x0, 28), 0x10000000),
100 2 : ((0x0, 29), 0x20000000),
101 2 : ((0x0, 30), 0x40000000),
102 2 : ((0x0, 31), 0x80000000),
103 2 : ];
104 :
105 66 : for ((val, bit_idx), expected) in table {
106 64 : let res =
107 64 : set_bit_32(/* val= */ val, /* bit_idx= */ bit_idx, /* bit_val= */ true);
108 64 :
109 64 : verify_that!(res, eq(expected))?;
110 : }
111 :
112 2 : Ok(())
113 2 : }
114 :
115 2 : #[test]
116 2 : fn set_bit_32_clear_bit_sets_bit() -> Result<()> {
117 2 : let table = vec![
118 2 : ((0xFFFF_FFFF, 0), 0xFFFFFFFE),
119 2 : ((0xFFFF_FFFF, 1), 0xFFFFFFFD),
120 2 : ((0xFFFF_FFFF, 2), 0xFFFFFFFB),
121 2 : ((0xFFFF_FFFF, 3), 0xFFFFFFF7),
122 2 : ((0xFFFF_FFFF, 4), 0xFFFFFFEF),
123 2 : ((0xFFFF_FFFF, 5), 0xFFFFFFDF),
124 2 : ((0xFFFF_FFFF, 6), 0xFFFFFFBF),
125 2 : ((0xFFFF_FFFF, 7), 0xFFFFFF7F),
126 2 : ((0xFFFF_FFFF, 8), 0xFFFFFEFF),
127 2 : ((0xFFFF_FFFF, 9), 0xFFFFFDFF),
128 2 : ((0xFFFF_FFFF, 10), 0xFFFFFBFF),
129 2 : ((0xFFFF_FFFF, 11), 0xFFFFF7FF),
130 2 : ((0xFFFF_FFFF, 12), 0xFFFFEFFF),
131 2 : ((0xFFFF_FFFF, 13), 0xFFFFDFFF),
132 2 : ((0xFFFF_FFFF, 14), 0xFFFFBFFF),
133 2 : ((0xFFFF_FFFF, 15), 0xFFFF7FFF),
134 2 : ((0xFFFF_FFFF, 16), 0xFFFEFFFF),
135 2 : ((0xFFFF_FFFF, 17), 0xFFFDFFFF),
136 2 : ((0xFFFF_FFFF, 18), 0xFFFBFFFF),
137 2 : ((0xFFFF_FFFF, 19), 0xFFF7FFFF),
138 2 : ((0xFFFF_FFFF, 20), 0xFFEFFFFF),
139 2 : ((0xFFFF_FFFF, 21), 0xFFDFFFFF),
140 2 : ((0xFFFF_FFFF, 22), 0xFFBFFFFF),
141 2 : ((0xFFFF_FFFF, 23), 0xFF7FFFFF),
142 2 : ((0xFFFF_FFFF, 24), 0xFEFFFFFF),
143 2 : ((0xFFFF_FFFF, 25), 0xFDFFFFFF),
144 2 : ((0xFFFF_FFFF, 26), 0xFBFFFFFF),
145 2 : ((0xFFFF_FFFF, 27), 0xF7FFFFFF),
146 2 : ((0xFFFF_FFFF, 28), 0xEFFFFFFF),
147 2 : ((0xFFFF_FFFF, 29), 0xDFFFFFFF),
148 2 : ((0xFFFF_FFFF, 30), 0xBFFFFFFF),
149 2 : ((0xFFFF_FFFF, 31), 0x7FFFFFFF),
150 2 : ];
151 :
152 66 : for ((val, bit_idx), expected) in table {
153 64 : let res =
154 64 : set_bit_32(/* val= */ val, /* bit_idx= */ bit_idx, /* bit_val= */ false);
155 64 :
156 64 : verify_that!(res, eq(expected))?;
157 : }
158 :
159 2 : Ok(())
160 2 : }
161 :
162 2 : #[test]
163 2 : fn is_bit_set_16_returns_if_bit_set() -> Result<()> {
164 2 : let table = vec![
165 2 : (0x1, 0),
166 2 : (0x2, 1),
167 2 : (0x4, 2),
168 2 : (0x8, 3),
169 2 : (0x10, 4),
170 2 : (0x20, 5),
171 2 : (0x40, 6),
172 2 : (0x80, 7),
173 2 : (0x100, 8),
174 2 : (0x200, 9),
175 2 : (0x400, 10),
176 2 : (0x800, 11),
177 2 : (0x1000, 12),
178 2 : (0x2000, 13),
179 2 : (0x4000, 14),
180 2 : (0x8000, 15),
181 2 : ];
182 :
183 34 : for (val, bit_idx) in table {
184 32 : let res = is_bit_set_16(/* val= */ val, /* bit_idx= */ bit_idx);
185 32 :
186 32 : verify_that!(res, eq(true))?;
187 : }
188 :
189 2 : Ok(())
190 2 : }
191 :
192 2 : #[test]
193 2 : fn is_bit_set_32_returns_if_bit_set() -> Result<()> {
194 2 : let table = vec![
195 2 : (0x1, 0),
196 2 : (0x2, 1),
197 2 : (0x4, 2),
198 2 : (0x8, 3),
199 2 : (0x10, 4),
200 2 : (0x20, 5),
201 2 : (0x40, 6),
202 2 : (0x80, 7),
203 2 : (0x100, 8),
204 2 : (0x200, 9),
205 2 : (0x400, 10),
206 2 : (0x800, 11),
207 2 : (0x1000, 12),
208 2 : (0x2000, 13),
209 2 : (0x4000, 14),
210 2 : (0x8000, 15),
211 2 : (0x10000, 16),
212 2 : (0x20000, 17),
213 2 : (0x40000, 18),
214 2 : (0x80000, 19),
215 2 : (0x100000, 20),
216 2 : (0x200000, 21),
217 2 : (0x400000, 22),
218 2 : (0x800000, 23),
219 2 : (0x1000000, 24),
220 2 : (0x2000000, 25),
221 2 : (0x4000000, 26),
222 2 : (0x8000000, 27),
223 2 : (0x10000000, 28),
224 2 : (0x20000000, 29),
225 2 : (0x40000000, 30),
226 2 : (0x80000000, 31),
227 2 : ];
228 :
229 66 : for (val, bit_idx) in table {
230 64 : let res = is_bit_set_32(/* val= */ val, /* bit_idx= */ bit_idx);
231 64 :
232 64 : verify_that!(res, eq(true))?;
233 : }
234 :
235 2 : Ok(())
236 2 : }
237 : }
|