1+ @testset " Bit manipulation" begin
2+ function test_bit_reverse(u, bps)
3+ rv = BioSequences. reversebits(u, BioSequences. BitsPerSymbol{bps}())
4+ ustr = string(u; base= 2 , pad= 8 * sizeof(u))
5+ rvs = join(reverse!(collect(Iterators. partition(ustr, bps))))
6+ @test rv == parse(typeof(u), rvs; base= 2 )
7+ end
8+
9+ # Test UInt128 with various BitsPerSymbol values (powers of two: 1, 2, 4, 8, 16, 32, 64)
10+ for bps in [1 , 2 , 4 , 8 , 16 , 32 , 64 ]
11+ # Edge cases
12+ test_bit_reverse(UInt128(0 ), bps)
13+ test_bit_reverse(typemax(UInt128), bps)
14+
15+ # Small values
16+ test_bit_reverse(UInt128(1 ), bps)
17+ test_bit_reverse(UInt128(0xff ), bps)
18+ test_bit_reverse(UInt128(0xffff ), bps)
19+
20+ # # Medium values
21+ test_bit_reverse(UInt128(0x123456789abcdef0 ), bps)
22+ test_bit_reverse(UInt128(0xfedcba9876543210 ), bps)
23+
24+ # # Large values
25+ test_bit_reverse(UInt128(0xb1d318f6d8b882f1ee180f1bcd8f8727 ), bps)
26+ test_bit_reverse(UInt128(0xffffffffffffffff0000000000000000 ), bps)
27+ test_bit_reverse(UInt128(0x0000000000000000ffffffffffffffff ), bps)
28+ test_bit_reverse(UInt128(0xaaaaaaaaaaaaaaaa5555555555555555 ), bps)
29+ test_bit_reverse(UInt128(0x5555555555555555aaaaaaaaaaaaaaaa ), bps)
30+
31+ # # Random-looking patterns
32+ test_bit_reverse(UInt128(0xdeadbeefcafebabe0123456789abcdef ), bps)
33+ test_bit_reverse(UInt128(0x13579bdf02468ace8642fdb975310eca ), bps)
34+ end
35+ end
0 commit comments