Repository navigation
Expand file tree
/
Copy pathmybit_test_cpp.cpp
More file actions
97 lines (72 loc) · 4.85 KB
/
Copy pathmybit_test_cpp.cpp
File metadata and controls
97 lines (72 loc) · 4.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include <iostream>
#include <iomanip>
#include <cstdint>
#include <cstring>
#include "mybit.h"
int main() {
std::cout << "--- Starting MyBit verification tests (C++) ---\n\n";
std::cout << std::hex << std::uppercase << std::setfill('0');
uint8_t a8 = 0xF0u;
uint16_t a16 = 0xF0F0u;
uint32_t a32 = 0x0000FF00u;
uint64_t a64 = 0x123456789ABCDEF0ULL;
std::cout << std::uppercase;
std::cout << "8-bit initial value: 0x"
<< std::hex << std::setw(2) << std::setfill('0') << static_cast<int>(a8) << "\n";
std::cout << "16-bit initial value: 0x"
<< std::hex << std::setw(4) << std::setfill('0') << a16 << "\n";
std::cout << "32-bit initial value: 0x"
<< std::hex << std::setw(8) << std::setfill('0') << a32 << "\n";
std::cout << "64-bit initial value: 0x"
<< std::hex << std::setw(16) << std::setfill('0') << a64 << "\n\n";
std::cout << "popcount8: " << std::dec << mybit::popcount(a8) << "\n";
std::cout << "clz8: " << std::dec << mybit::countl_zero(a8) << "\n";
std::cout << "ctz8: " << std::dec << mybit::countr_zero(a8) << "\n\n";
std::cout << "popcount16: " << std::dec << mybit::popcount(a16) << "\n";
std::cout << "clz16: " << std::dec << mybit::countl_zero(a16) << "\n";
std::cout << "ctz16: " << std::dec << mybit::countr_zero(a16) << "\n\n";
std::cout << "popcount32: " << std::dec << mybit::popcount(a32) << "\n";
std::cout << "clz32: " << std::dec << mybit::countl_zero(a32) << "\n";
std::cout << "ctz32: " << std::dec << mybit::countr_zero(a32) << "\n\n";
std::cout << "popcount64: " << std::dec << mybit::popcount(a64) << "\n";
std::cout << "clz64: " << std::dec << mybit::countl_zero(a64) << "\n";
std::cout << "ctz64: " << std::dec << mybit::countr_zero(a64) << "\n\n";
std::cout << "rotl8: 0x" << std::hex << (unsigned)mybit::rotl(a8, 4) << "\n";
std::cout << "rotr8: 0x" << std::hex << (unsigned)mybit::rotr(a8, 4) << "\n";
std::cout << "reverse8: 0x" << std::hex << (unsigned)mybit::reverse((uint8_t)a8) << "\n\n";
std::cout << "rotl16: 0x" << std::hex << mybit::rotl(a16, 8) << "\n";
std::cout << "reverse16: 0x" << std::hex << mybit::reverse(a16) << "\n\n";
std::cout << "rotl32: 0x" << std::hex << std::setw(8) << mybit::rotl(a32, 8) << "\n";
std::cout << "reverse32: 0x" << std::hex << std::setw(8) << mybit::reverse(a32) << "\n\n";
std::cout << "rotl64: 0x" << std::hex << std::setw(16) << mybit::rotl(a64, 16) << "\n";
std::cout << "reverse64: 0x" << std::hex << std::setw(16) << mybit::reverse(a64) << "\n\n";
std::cout << "bit_floor32(15): " << std::dec << mybit::bit_floor((uint32_t)15) << "\n";
std::cout << "bit_ceil32(15): " << std::dec << mybit::bit_ceil((uint32_t)15) << "\n\n";
std::cout << "bit_floor8(0x3A): 0x" << std::hex << std::setw(2) << (unsigned)mybit::bit_floor((uint8_t)0x3A) << "\n";
std::cout << "bit_ceil8(0x3A): 0x" << std::hex << std::setw(2) << (unsigned)mybit::bit_ceil((uint8_t)0x3A) << "\n";
std::cout << "has_single_bit8(0x20): " << std::dec << (mybit::has_single_bit((uint8_t)0x20) ? 1 : 0) << "\n\n";
std::cout << "bit_floor16(0x03F0): 0x" << std::hex << std::setw(4) << mybit::bit_floor((uint16_t)0x03F0) << "\n";
std::cout << "bit_ceil16(0x03F0): 0x" << std::hex << std::setw(4) << mybit::bit_ceil((uint16_t)0x03F0) << "\n\n";
uint8_t buf[8];
mybit::store_le<uint16_t>(buf, 0xABCDu);
std::cout << "load_le16: 0x" << std::hex << mybit::load_le<uint16_t>(buf) << "\n";
mybit::store_be<uint16_t>(buf, 0xABCDu);
std::cout << "load_be16: 0x" << std::hex << mybit::load_be<uint16_t>(buf) << "\n\n";
/* 32/64-bit endian load/store tests */
mybit::store_le<uint32_t>(buf, a32);
std::cout << "load_le32: 0x" << std::hex << std::setw(8) << mybit::load_le<uint32_t>(buf) << "\n";
mybit::store_be<uint32_t>(buf, a32);
std::cout << "load_be32: 0x" << std::hex << std::setw(8) << mybit::load_be<uint32_t>(buf) << "\n\n";
mybit::store_le<uint64_t>(buf, a64);
std::cout << "load_le64: 0x" << std::hex << std::setw(16) << mybit::load_le<uint64_t>(buf) << "\n";
mybit::store_be<uint64_t>(buf, a64);
std::cout << "load_be64: 0x" << std::hex << std::setw(16) << mybit::load_be<uint64_t>(buf) << "\n\n";
std::cout << "pext32: 0x" << std::hex << mybit::pext((uint32_t)0x12345678u, (uint32_t)0x00FF0000u) << "\n";
std::cout << "pdep32: 0x" << std::hex << mybit::pdep((uint32_t)0x000000FFu, (uint32_t)0x0F0F0000u) << "\n\n";
/* countl_one / countr_one / has_single_bit tests */
std::cout << "countl_one16: " << std::dec << mybit::countl_one(a16) << "\n";
std::cout << "countr_one16: " << std::dec << mybit::countr_one(a16) << "\n";
std::cout << "has_single_bit(0x100): " << std::dec << (mybit::has_single_bit<uint32_t>(0x100u) ? 1 : 0) << "\n\n";
std::cout << "--- MyBit verification tests (C++) completed successfully ---\n";
return 0;
}