| 46 | return x; |
| 47 | } |
| 48 | TEST(FlipSignTest, FlipWorks) { |
| 49 | const size_t dim = 128; |
| 50 | float data[dim]; |
| 51 | uint8_t flip[dim / 8]; // 1 bit per float |
| 52 | |
| 53 | // Initialize data and flip pattern |
| 54 | for (size_t i = 0; i < dim; ++i) { |
| 55 | data[i] = static_cast<float>(i + 1); // Example data |
| 56 | } |
| 57 | for (size_t i = 0; i < dim / 8; ++i) { |
| 58 | flip[i] = static_cast<uint8_t>(i % 256); // Example flip pattern |
| 59 | } |
| 60 | |
| 61 | // Perform sign flipping |
| 62 | rabitqlib::rotator_impl::flip_sign(flip, data, dim); |
| 63 | |
| 64 | // Output the results |
| 65 | uint8_t signs = 0; |
| 66 | for (size_t i = 0; i < dim; ++i) { |
| 67 | ASSERT_EQ(abs(data[i]), static_cast<float>(i + 1)); |
| 68 | int sign = (data[i] < 0) ? 1 : 0; |
| 69 | signs = (signs << 1) | sign; |
| 70 | if(i%8 == 7) { |
| 71 | uint8_t expected = flip[i / 8]; |
| 72 | signs = bitreverse8(signs); |
| 73 | ASSERT_EQ(static_cast<uint8_t>(signs & 0xFF), expected); |
| 74 | signs = 0; |
| 75 | } |
| 76 | } |
| 77 | } |
nothing calls this directly
no test coverage detected