@@ -20,9 +20,22 @@ using LIBC_NAMESPACE::operator""_u16;
20
20
using LIBC_NAMESPACE::operator " " _u32;
21
21
using LIBC_NAMESPACE::operator " " _u64;
22
22
23
+ class LlvmLibcFxBitsTest : public LIBC_NAMESPACE ::testing::Test {
24
+ public:
25
+ template <typename T> void testBitwiseOps () {
26
+ EXPECT_EQ (LIBC_NAMESPACE::fixed_point::bit_and (T (0.75 ), T (0.375 )), T (0.25 ));
27
+ EXPECT_EQ (LIBC_NAMESPACE::fixed_point::bit_or (T (0.75 ), T (0.375 )), T (0.875 ));
28
+ using StorageType = typename FXRep<T>::StorageType;
29
+ StorageType a = LIBC_NAMESPACE::cpp::bit_cast<StorageType>(T (0.75 ));
30
+ a = ~a;
31
+ EXPECT_EQ (LIBC_NAMESPACE::fixed_point::bit_not (T (0.75 )),
32
+ FXBits<T>(a).get_val ());
33
+ }
34
+ };
35
+
23
36
// -------------------------------- SHORT TESTS --------------------------------
24
37
25
- TEST (LlvmLibcFxBitsTest, FXBits_UnsignedShortFract) {
38
+ TEST_F (LlvmLibcFxBitsTest, FXBits_UnsignedShortFract) {
26
39
auto bits_var = FXBits<unsigned short fract>(0b00000000_u8);
27
40
28
41
EXPECT_EQ (bits_var.get_sign (), false );
@@ -51,9 +64,12 @@ TEST(LlvmLibcFxBitsTest, FXBits_UnsignedShortFract) {
51
64
EXPECT_EQ (bits_var.get_sign (), false );
52
65
EXPECT_EQ (bits_var.get_integral (), 0x00_u8);
53
66
EXPECT_EQ (bits_var.get_fraction (), 0xcd_u8);
67
+
68
+ // Bitwise ops
69
+ testBitwiseOps<unsigned short fract>();
54
70
}
55
71
56
- TEST (LlvmLibcFxBitsTest, FXBits_UnsignedShortAccum) {
72
+ TEST_F (LlvmLibcFxBitsTest, FXBits_UnsignedShortAccum) {
57
73
auto bits_var = FXBits<unsigned short accum>(0b00000000' 00000000_u16);
58
74
59
75
EXPECT_EQ (bits_var.get_sign (), false );
@@ -77,9 +93,12 @@ TEST(LlvmLibcFxBitsTest, FXBits_UnsignedShortAccum) {
77
93
EXPECT_EQ (bits_var.get_sign (), false );
78
94
EXPECT_EQ (bits_var.get_integral (), 0x00cd_u16);
79
95
EXPECT_EQ (bits_var.get_fraction (), 0x00fe_u16);
96
+
97
+ // Bitwise ops
98
+ testBitwiseOps<unsigned short accum>();
80
99
}
81
100
82
- TEST (LlvmLibcFxBitsTest, FXBits_ShortFract) {
101
+ TEST_F (LlvmLibcFxBitsTest, FXBits_ShortFract) {
83
102
auto bits_var = FXBits<short fract>(0b0' 0000000_u8);
84
103
85
104
EXPECT_EQ (bits_var.get_sign (), false );
@@ -103,9 +122,12 @@ TEST(LlvmLibcFxBitsTest, FXBits_ShortFract) {
103
122
EXPECT_EQ (bits_var.get_sign (), true );
104
123
EXPECT_EQ (bits_var.get_integral (), 0x00_u8);
105
124
EXPECT_EQ (bits_var.get_fraction (), 0x4d_u8);
125
+
126
+ // Bitwise ops
127
+ testBitwiseOps<short fract>();
106
128
}
107
129
108
- TEST (LlvmLibcFxBitsTest, FXBits_ShortAccum) {
130
+ TEST_F (LlvmLibcFxBitsTest, FXBits_ShortAccum) {
109
131
auto bits_var = FXBits<short accum>(0b0'00000000' 0000000_u16);
110
132
111
133
EXPECT_EQ (bits_var.get_sign (), false );
@@ -129,9 +151,14 @@ TEST(LlvmLibcFxBitsTest, FXBits_ShortAccum) {
129
151
EXPECT_EQ (bits_var.get_sign (), true );
130
152
EXPECT_EQ (bits_var.get_integral (), 0x00cd_u16);
131
153
EXPECT_EQ (bits_var.get_fraction (), 0x007e_u16);
154
+
155
+ // Bitwise ops
156
+ testBitwiseOps<short accum>();
132
157
}
133
158
134
- TEST (LlvmLibcFxBitsTest, FXBits_UnsignedFract) {
159
+ // -------------------------------- NORMAL TESTS -------------------------------
160
+
161
+ TEST_F (LlvmLibcFxBitsTest, FXBits_UnsignedFract) {
135
162
auto bits_var = FXBits<unsigned fract>(0b0000000000000000_u16);
136
163
137
164
EXPECT_EQ (bits_var.get_sign (), false );
@@ -155,11 +182,12 @@ TEST(LlvmLibcFxBitsTest, FXBits_UnsignedFract) {
155
182
EXPECT_EQ (bits_var.get_sign (), false );
156
183
EXPECT_EQ (bits_var.get_integral (), 0x0000_u16);
157
184
EXPECT_EQ (bits_var.get_fraction (), 0xef12_u16);
158
- }
159
185
160
- // -------------------------------- NORMAL TESTS -------------------------------
186
+ // Bitwise ops
187
+ testBitwiseOps<unsigned fract>();
188
+ }
161
189
162
- TEST (LlvmLibcFxBitsTest, FXBits_UnsignedAccum) {
190
+ TEST_F (LlvmLibcFxBitsTest, FXBits_UnsignedAccum) {
163
191
auto bits_var =
164
192
FXBits<unsigned accum>(0b0000000000000000' 0000000000000000_u32);
165
193
@@ -184,9 +212,12 @@ TEST(LlvmLibcFxBitsTest, FXBits_UnsignedAccum) {
184
212
EXPECT_EQ (bits_var.get_sign (), false );
185
213
EXPECT_EQ (bits_var.get_integral (), 0x0000abcd_u32);
186
214
EXPECT_EQ (bits_var.get_fraction (), 0x0000ef12_u32);
215
+
216
+ // Bitwise ops
217
+ testBitwiseOps<unsigned accum>();
187
218
}
188
219
189
- TEST (LlvmLibcFxBitsTest, FXBits_Fract) {
220
+ TEST_F (LlvmLibcFxBitsTest, FXBits_Fract) {
190
221
auto bits_var = FXBits<fract>(0b0' 000000000000000_u16);
191
222
192
223
EXPECT_EQ (bits_var.get_sign (), false );
@@ -210,9 +241,12 @@ TEST(LlvmLibcFxBitsTest, FXBits_Fract) {
210
241
EXPECT_EQ (bits_var.get_sign (), true );
211
242
EXPECT_EQ (bits_var.get_integral (), 0x0000_u16);
212
243
EXPECT_EQ (bits_var.get_fraction (), 0x6f12_u16);
244
+
245
+ // Bitwise ops
246
+ testBitwiseOps<fract>();
213
247
}
214
248
215
- TEST (LlvmLibcFxBitsTest, FXBits_Accum) {
249
+ TEST_F (LlvmLibcFxBitsTest, FXBits_Accum) {
216
250
auto bits_var = FXBits<accum>(0b0'0000000000000000' 000000000000000_u32);
217
251
218
252
EXPECT_EQ (bits_var.get_sign (), false );
@@ -236,11 +270,14 @@ TEST(LlvmLibcFxBitsTest, FXBits_Accum) {
236
270
EXPECT_EQ (bits_var.get_sign (), true );
237
271
EXPECT_EQ (bits_var.get_integral (), 0x0000abcd_u32);
238
272
EXPECT_EQ (bits_var.get_fraction (), 0x00006f12_u32);
273
+
274
+ // Bitwise ops
275
+ testBitwiseOps<accum>();
239
276
}
240
277
241
278
// --------------------------------- LONG TESTS --------------------------------
242
279
243
- TEST (LlvmLibcFxBitsTest, FXBits_UnsignedLongFract) {
280
+ TEST_F (LlvmLibcFxBitsTest, FXBits_UnsignedLongFract) {
244
281
auto bits_var =
245
282
FXBits<unsigned long fract>(0b00000000000000000000000000000000_u32);
246
283
@@ -265,9 +302,12 @@ TEST(LlvmLibcFxBitsTest, FXBits_UnsignedLongFract) {
265
302
EXPECT_EQ (bits_var.get_sign (), false );
266
303
EXPECT_EQ (bits_var.get_integral (), 0x00000000_u32);
267
304
EXPECT_EQ (bits_var.get_fraction (), 0xfedcba98_u32);
305
+
306
+ // Bitwise ops
307
+ testBitwiseOps<unsigned long fract>();
268
308
}
269
309
270
- TEST (LlvmLibcFxBitsTest, FXBits_UnsignedLongAccum) {
310
+ TEST_F (LlvmLibcFxBitsTest, FXBits_UnsignedLongAccum) {
271
311
auto bits_var = FXBits<unsigned long accum>(
272
312
0b00000000000000000000000000000000' 00000000000000000000000000000000_u64);
273
313
@@ -292,9 +332,12 @@ TEST(LlvmLibcFxBitsTest, FXBits_UnsignedLongAccum) {
292
332
EXPECT_EQ (bits_var.get_sign (), false );
293
333
EXPECT_EQ (bits_var.get_integral (), 0x00000000abcdef12_u64);
294
334
EXPECT_EQ (bits_var.get_fraction (), 0x00000000fedcba98_u64);
335
+
336
+ // Bitwise ops
337
+ testBitwiseOps<unsigned long accum>();
295
338
}
296
339
297
- TEST (LlvmLibcFxBitsTest, FXBits_LongFract) {
340
+ TEST_F (LlvmLibcFxBitsTest, FXBits_LongFract) {
298
341
auto bits_var = FXBits<long fract>(0b0' 0000000000000000000000000000000_u32);
299
342
300
343
EXPECT_EQ (bits_var.get_sign (), false );
@@ -318,9 +361,12 @@ TEST(LlvmLibcFxBitsTest, FXBits_LongFract) {
318
361
EXPECT_EQ (bits_var.get_sign (), true );
319
362
EXPECT_EQ (bits_var.get_integral (), 0x00000000_u32);
320
363
EXPECT_EQ (bits_var.get_fraction (), 0x7edcba98_u32);
364
+
365
+ // Bitwise ops
366
+ testBitwiseOps<long fract>();
321
367
}
322
368
323
- TEST (LlvmLibcFxBitsTest, FXBits_LongAccum) {
369
+ TEST_F (LlvmLibcFxBitsTest, FXBits_LongAccum) {
324
370
auto bits_var = FXBits<long accum>(
325
371
0b0'00000000000000000000000000000000' 0000000000000000000000000000000_u64);
326
372
@@ -345,4 +391,7 @@ TEST(LlvmLibcFxBitsTest, FXBits_LongAccum) {
345
391
EXPECT_EQ (bits_var.get_sign (), true );
346
392
EXPECT_EQ (bits_var.get_integral (), 0x00000000abcdef12_u64);
347
393
EXPECT_EQ (bits_var.get_fraction (), 0x000000007edcba98_u64);
394
+
395
+ // Bitwise ops
396
+ testBitwiseOps<long accum>();
348
397
}
0 commit comments