#include #include #include "solution.cpp" static int failures = 0; #define CHECK(cond, name) do { if (cond) std::printf("ok %s\n", name); \ else { std::printf("FAIL %s (line %d)\n", name, __LINE__); ++failures; } } while (0) int main() { // popcount CHECK(popcount32(0u) == 0, "popcount(0) == 0"); CHECK(popcount32(1u) == 1, "popcount(1) == 1"); CHECK(popcount32(0xFFFFFFFFu) == 32, "popcount(0xFFFFFFFF) == 32"); CHECK(popcount32(0x80000000u) == 1, "popcount(1<<31) == 1"); CHECK(popcount32(0x0000000Bu) == 3, "popcount(0b1011) == 3"); CHECK(popcount32(0xA5A5A5A5u) == 16, "popcount(0xA5A5A5A5) == 16"); // reverse CHECK(reverse_bits32(1u) == 0x80000000u, "reverse(1) == 0x80000000"); CHECK(reverse_bits32(0x80000000u) == 1u, "reverse(0x80000000) == 1"); CHECK(reverse_bits32(0x12345678u) == 0x1E6A2C48u, "reverse(0x12345678) == 0x1E6A2C48"); CHECK(reverse_bits32(0xFFFFFFFFu) == 0xFFFFFFFFu, "reverse(0xFFFFFFFF) == 0xFFFFFFFF"); CHECK(reverse_bits32(0u) == 0u, "reverse(0) == 0"); // power of two CHECK(!is_power_of_two(0u), "pow2(0) == false"); CHECK(is_power_of_two(1u), "pow2(1) == true"); CHECK(is_power_of_two(2u), "pow2(2) == true"); CHECK(!is_power_of_two(3u), "pow2(3) == false"); CHECK(is_power_of_two(1024u), "pow2(1024) == true"); CHECK(is_power_of_two(0x80000000u), "pow2(1<<31) == true"); CHECK(!is_power_of_two(0x80000001u), "pow2(0x80000001) == false"); // bswap CHECK(bswap32(0x11223344u) == 0x44332211u, "bswap(0x11223344) == 0x44332211"); CHECK(bswap32(0x000000FFu) == 0xFF000000u, "bswap(0x000000FF) == 0xFF000000"); CHECK(bswap32(0xDEADBEEFu) == 0xEFBEADDEu, "bswap(0xDEADBEEF) == 0xEFBEADDE"); std::printf(failures ? "\nFAILURES: %d\n" : "\nALL PASS\n", failures); return failures ? 1 : 0; }