diff --git a/.gitignore b/.gitignore index 975557746738fc77d8bdca381c015a2859f6f806..7ef41e831869f9e4faf8e1a0e9656a826b031688 100644 --- a/.gitignore +++ b/.gitignore @@ -30,6 +30,7 @@ test/unit/rope_avl test/unit/rope_basic test/unit/rope_stress test/unit/rlist +test/unit/bit_test Makefile CMakeFiles CMakeCache.txt diff --git a/test/unit/CMakeLists.txt b/test/unit/CMakeLists.txt index 08db175ca2e9dc6a77421c081cf15077f6cdfc8c..0c84afb8971efb330bc5426e7c0476707d79bba6 100644 --- a/test/unit/CMakeLists.txt +++ b/test/unit/CMakeLists.txt @@ -8,6 +8,8 @@ add_executable(rope_basic rope_basic.c ${CMAKE_SOURCE_DIR}/src/rope.c) add_executable(rope_avl rope_avl.c ${CMAKE_SOURCE_DIR}/src/rope.c) add_executable(rope_stress rope_stress.c ${CMAKE_SOURCE_DIR}/src/rope.c) add_executable(rope rope.c ${CMAKE_SOURCE_DIR}/src/rope.c) +add_executable(bit_test bit.c bit.c) +target_link_libraries(bit_test bit) add_executable(objc_finally objc_finally.m) add_executable(objc_catchcxx objc_catchcxx.m) add_dependencies(objc_finally build_bundled_libs) diff --git a/test/unit/bit.c b/test/unit/bit.c new file mode 100644 index 0000000000000000000000000000000000000000..21aad1de313677613bfed5ad0a9ffa16aedd267e --- /dev/null +++ b/test/unit/bit.c @@ -0,0 +1,169 @@ +#include <lib/bit/bit.h> + +#include <stdio.h> +#include <inttypes.h> +#include <assert.h> + +#include "unit.h" + +static uint64_t vals[] = { + 0UL, 1UL, 2UL, 32768UL, 65535UL, 65536UL, 726075912UL, 858993459UL, + 1073741824UL, 1245250552UL, 1431655765UL, 1656977767UL, 2147483648UL, + 2283114629UL, 2502548245UL, 4294967295UL, 708915120906848425UL, + 1960191741125985428UL, 3689348814741910323UL, 5578377670650038654UL, + 9223372036854775808UL, 10755112315580060033UL, 11163782031541429823UL, + 13903686156871869732UL, 14237897302422917095UL, 14302190498657618739UL, + 15766411510232741269UL, 15984546468465238145UL, 18446744073709551615UL +}; + +static void +test_ctz_clz(void) +{ + header(); + + for (size_t i = 0; i < sizeof(vals) / sizeof(vals[0]); i++) { + if (vals[i] == 0) + continue; + + uint64_t val64 = vals[i]; + uint32_t val32 = (uint32_t) vals[i]; + + printf("bit_ctz_u64(%" PRIu64 ") => %d\n", val64, + bit_ctz_u64(val64)); + printf("bit_clz_u64(%" PRIu64 ") => %d\n", val64, + bit_clz_u64(val64)); + + if (vals[i] > UINT32_MAX) + continue; + + printf("bit_ctz_u32(%" PRIu32 ") => %d\n", val32, + bit_ctz_u32(val32)); + printf("bit_clz_u32(%" PRIu32 ") => %d\n", val32, + bit_clz_u32(val32)); + } + + footer(); +} + +static void +test_count(void) +{ + header(); + + for (size_t i = 0; i < sizeof(vals) / sizeof(vals[0]); i++) { + uint64_t val64 = vals[i]; + uint32_t val32 = (uint32_t) vals[i]; + + printf("bit_count_u64(%" PRIu64 ") => %d\n", val64, + bit_count_u64(val64)); + + if (vals[i] > UINT32_MAX) + continue; + + printf("bit_count_u32(%" PRIu32 ") => %d\n", val32, + bit_count_u32(val32)); + } + + footer(); +} + +static void +test_rotl_rotr_one(int rot) +{ + for (size_t i = 0; i < sizeof(vals) / sizeof(vals[0]); i++) { + uint64_t val64 = vals[i]; + uint32_t val32 = (uint32_t) vals[i]; + + printf("bit_rotl_u64(%" PRIu64 ", %d) => %" PRIu64 "\n", + val64, rot, bit_rotl_u64(val64, rot)); + printf("bit_rotr_u64(%" PRIu64 ", %d) => %" PRIu64 "\n", + val64, rot, bit_rotr_u64(val64, rot)); + + if (vals[i] > UINT32_MAX || rot > 32) + continue; + + printf("bit_rotl_u32(%" PRIu32 ", %d) => %" PRIu32 "\n", + val32, rot, bit_rotl_u32(val32, rot)); + printf("bit_rotr_u32(%" PRIu32 ", %d) => %" PRIu32 "\n", + val32, rot, bit_rotr_u32(val32, rot)); + } +} + +static void +test_rotl_rotr(void) +{ + header(); + + int rots[] = { 0, 1, 15, 16, 31, 32, 63, 64 }; + for (int r = 0; r < sizeof(rots) / sizeof(rots[0]); r++) { + test_rotl_rotr_one(rots[r]); + } + + footer(); +} + +static void +test_bswap(void) +{ + header(); + + for (size_t i = 0; i < sizeof(vals) / sizeof(vals[0]); i++) { + uint64_t val64 = vals[i]; + uint32_t val32 = (uint32_t) vals[i]; + + printf("bswap_u64(%" PRIu64 ") => %" PRIu64 "\n", val64, + bswap_u64(val64)); + + if (vals[i] > UINT32_MAX) + continue; + + printf("bswap_u32(%" PRIu32 ") => %" PRIu32 "\n", val32, + bswap_u32(val32)); + } + + footer(); +} + +static inline void +test_index_print(const int *start, const int *end) +{ + for (const int *cur = start; cur < end; cur++) { + printf("%d ", *cur); + } +} + +static void +test_index(void) +{ + header(); + + int indexes[sizeof(int64_t) * CHAR_BIT]; + + for (size_t i = 0; i < sizeof(vals) / sizeof(vals[0]); i++) { + uint64_t val64 = vals[i]; + uint32_t val32 = (uint32_t) vals[i]; + + printf("bit_index_u64(%" PRIu64 ", *, -1) => ", val64); + test_index_print(indexes, bit_index_u64(val64, indexes, -1)); + printf("\n"); + + if (vals[i] > UINT32_MAX) + continue; + + printf("bit_index_u32(%" PRIu32 ", *, -1) => ", val32); + test_index_print(indexes, bit_index_u32(val32, indexes, -1)); + printf("\n"); + } + + footer(); +} + +int +main(void) +{ + test_ctz_clz(); + test_count(); + test_rotl_rotr(); + test_bswap(); + test_index(); +} diff --git a/test/unit/bit.result b/test/unit/bit.result new file mode 100644 index 0000000000000000000000000000000000000000..dbb0193faa774c2eb6923ffb2742b5f5e52f994a --- /dev/null +++ b/test/unit/bit.result @@ -0,0 +1,888 @@ + *** test_ctz_clz *** +bit_ctz_u64(1) => 0 +bit_clz_u64(1) => 63 +bit_ctz_u32(1) => 0 +bit_clz_u32(1) => 31 +bit_ctz_u64(2) => 1 +bit_clz_u64(2) => 62 +bit_ctz_u32(2) => 1 +bit_clz_u32(2) => 30 +bit_ctz_u64(32768) => 15 +bit_clz_u64(32768) => 48 +bit_ctz_u32(32768) => 15 +bit_clz_u32(32768) => 16 +bit_ctz_u64(65535) => 0 +bit_clz_u64(65535) => 48 +bit_ctz_u32(65535) => 0 +bit_clz_u32(65535) => 16 +bit_ctz_u64(65536) => 16 +bit_clz_u64(65536) => 47 +bit_ctz_u32(65536) => 16 +bit_clz_u32(65536) => 15 +bit_ctz_u64(726075912) => 3 +bit_clz_u64(726075912) => 34 +bit_ctz_u32(726075912) => 3 +bit_clz_u32(726075912) => 2 +bit_ctz_u64(858993459) => 0 +bit_clz_u64(858993459) => 34 +bit_ctz_u32(858993459) => 0 +bit_clz_u32(858993459) => 2 +bit_ctz_u64(1073741824) => 30 +bit_clz_u64(1073741824) => 33 +bit_ctz_u32(1073741824) => 30 +bit_clz_u32(1073741824) => 1 +bit_ctz_u64(1245250552) => 3 +bit_clz_u64(1245250552) => 33 +bit_ctz_u32(1245250552) => 3 +bit_clz_u32(1245250552) => 1 +bit_ctz_u64(1431655765) => 0 +bit_clz_u64(1431655765) => 33 +bit_ctz_u32(1431655765) => 0 +bit_clz_u32(1431655765) => 1 +bit_ctz_u64(1656977767) => 0 +bit_clz_u64(1656977767) => 33 +bit_ctz_u32(1656977767) => 0 +bit_clz_u32(1656977767) => 1 +bit_ctz_u64(2147483648) => 31 +bit_clz_u64(2147483648) => 32 +bit_ctz_u32(2147483648) => 31 +bit_clz_u32(2147483648) => 0 +bit_ctz_u64(2283114629) => 0 +bit_clz_u64(2283114629) => 32 +bit_ctz_u32(2283114629) => 0 +bit_clz_u32(2283114629) => 0 +bit_ctz_u64(2502548245) => 0 +bit_clz_u64(2502548245) => 32 +bit_ctz_u32(2502548245) => 0 +bit_clz_u32(2502548245) => 0 +bit_ctz_u64(4294967295) => 0 +bit_clz_u64(4294967295) => 32 +bit_ctz_u32(4294967295) => 0 +bit_clz_u32(4294967295) => 0 +bit_ctz_u64(708915120906848425) => 0 +bit_clz_u64(708915120906848425) => 4 +bit_ctz_u64(1960191741125985428) => 2 +bit_clz_u64(1960191741125985428) => 3 +bit_ctz_u64(3689348814741910323) => 0 +bit_clz_u64(3689348814741910323) => 2 +bit_ctz_u64(5578377670650038654) => 1 +bit_clz_u64(5578377670650038654) => 1 +bit_ctz_u64(9223372036854775808) => 63 +bit_clz_u64(9223372036854775808) => 0 +bit_ctz_u64(10755112315580060033) => 0 +bit_clz_u64(10755112315580060033) => 0 +bit_ctz_u64(11163782031541429823) => 0 +bit_clz_u64(11163782031541429823) => 0 +bit_ctz_u64(13903686156871869732) => 2 +bit_clz_u64(13903686156871869732) => 0 +bit_ctz_u64(14237897302422917095) => 0 +bit_clz_u64(14237897302422917095) => 0 +bit_ctz_u64(14302190498657618739) => 0 +bit_clz_u64(14302190498657618739) => 0 +bit_ctz_u64(15766411510232741269) => 0 +bit_clz_u64(15766411510232741269) => 0 +bit_ctz_u64(15984546468465238145) => 0 +bit_clz_u64(15984546468465238145) => 0 +bit_ctz_u64(18446744073709551615) => 0 +bit_clz_u64(18446744073709551615) => 0 + *** test_ctz_clz: done *** + *** test_count *** +bit_count_u64(0) => 0 +bit_count_u32(0) => 0 +bit_count_u64(1) => 1 +bit_count_u32(1) => 1 +bit_count_u64(2) => 1 +bit_count_u32(2) => 1 +bit_count_u64(32768) => 1 +bit_count_u32(32768) => 1 +bit_count_u64(65535) => 16 +bit_count_u32(65535) => 16 +bit_count_u64(65536) => 1 +bit_count_u32(65536) => 1 +bit_count_u64(726075912) => 11 +bit_count_u32(726075912) => 11 +bit_count_u64(858993459) => 16 +bit_count_u32(858993459) => 16 +bit_count_u64(1073741824) => 1 +bit_count_u32(1073741824) => 1 +bit_count_u64(1245250552) => 14 +bit_count_u32(1245250552) => 14 +bit_count_u64(1431655765) => 16 +bit_count_u32(1431655765) => 16 +bit_count_u64(1656977767) => 17 +bit_count_u32(1656977767) => 17 +bit_count_u64(2147483648) => 1 +bit_count_u32(2147483648) => 1 +bit_count_u64(2283114629) => 10 +bit_count_u32(2283114629) => 10 +bit_count_u64(2502548245) => 16 +bit_count_u32(2502548245) => 16 +bit_count_u64(4294967295) => 32 +bit_count_u32(4294967295) => 32 +bit_count_u64(708915120906848425) => 29 +bit_count_u64(1960191741125985428) => 19 +bit_count_u64(3689348814741910323) => 32 +bit_count_u64(5578377670650038654) => 31 +bit_count_u64(9223372036854775808) => 1 +bit_count_u64(10755112315580060033) => 24 +bit_count_u64(11163782031541429823) => 35 +bit_count_u64(13903686156871869732) => 28 +bit_count_u64(14237897302422917095) => 33 +bit_count_u64(14302190498657618739) => 37 +bit_count_u64(15766411510232741269) => 33 +bit_count_u64(15984546468465238145) => 25 +bit_count_u64(18446744073709551615) => 64 + *** test_count: done *** + *** test_rotl_rotr *** +bit_rotl_u64(0, 0) => 0 +bit_rotr_u64(0, 0) => 0 +bit_rotl_u32(0, 0) => 0 +bit_rotr_u32(0, 0) => 0 +bit_rotl_u64(1, 0) => 1 +bit_rotr_u64(1, 0) => 1 +bit_rotl_u32(1, 0) => 1 +bit_rotr_u32(1, 0) => 1 +bit_rotl_u64(2, 0) => 2 +bit_rotr_u64(2, 0) => 2 +bit_rotl_u32(2, 0) => 2 +bit_rotr_u32(2, 0) => 2 +bit_rotl_u64(32768, 0) => 32768 +bit_rotr_u64(32768, 0) => 32768 +bit_rotl_u32(32768, 0) => 32768 +bit_rotr_u32(32768, 0) => 32768 +bit_rotl_u64(65535, 0) => 65535 +bit_rotr_u64(65535, 0) => 65535 +bit_rotl_u32(65535, 0) => 65535 +bit_rotr_u32(65535, 0) => 65535 +bit_rotl_u64(65536, 0) => 65536 +bit_rotr_u64(65536, 0) => 65536 +bit_rotl_u32(65536, 0) => 65536 +bit_rotr_u32(65536, 0) => 65536 +bit_rotl_u64(726075912, 0) => 726075912 +bit_rotr_u64(726075912, 0) => 726075912 +bit_rotl_u32(726075912, 0) => 726075912 +bit_rotr_u32(726075912, 0) => 726075912 +bit_rotl_u64(858993459, 0) => 858993459 +bit_rotr_u64(858993459, 0) => 858993459 +bit_rotl_u32(858993459, 0) => 858993459 +bit_rotr_u32(858993459, 0) => 858993459 +bit_rotl_u64(1073741824, 0) => 1073741824 +bit_rotr_u64(1073741824, 0) => 1073741824 +bit_rotl_u32(1073741824, 0) => 1073741824 +bit_rotr_u32(1073741824, 0) => 1073741824 +bit_rotl_u64(1245250552, 0) => 1245250552 +bit_rotr_u64(1245250552, 0) => 1245250552 +bit_rotl_u32(1245250552, 0) => 1245250552 +bit_rotr_u32(1245250552, 0) => 1245250552 +bit_rotl_u64(1431655765, 0) => 1431655765 +bit_rotr_u64(1431655765, 0) => 1431655765 +bit_rotl_u32(1431655765, 0) => 1431655765 +bit_rotr_u32(1431655765, 0) => 1431655765 +bit_rotl_u64(1656977767, 0) => 1656977767 +bit_rotr_u64(1656977767, 0) => 1656977767 +bit_rotl_u32(1656977767, 0) => 1656977767 +bit_rotr_u32(1656977767, 0) => 1656977767 +bit_rotl_u64(2147483648, 0) => 2147483648 +bit_rotr_u64(2147483648, 0) => 2147483648 +bit_rotl_u32(2147483648, 0) => 2147483648 +bit_rotr_u32(2147483648, 0) => 2147483648 +bit_rotl_u64(2283114629, 0) => 2283114629 +bit_rotr_u64(2283114629, 0) => 2283114629 +bit_rotl_u32(2283114629, 0) => 2283114629 +bit_rotr_u32(2283114629, 0) => 2283114629 +bit_rotl_u64(2502548245, 0) => 2502548245 +bit_rotr_u64(2502548245, 0) => 2502548245 +bit_rotl_u32(2502548245, 0) => 2502548245 +bit_rotr_u32(2502548245, 0) => 2502548245 +bit_rotl_u64(4294967295, 0) => 4294967295 +bit_rotr_u64(4294967295, 0) => 4294967295 +bit_rotl_u32(4294967295, 0) => 4294967295 +bit_rotr_u32(4294967295, 0) => 4294967295 +bit_rotl_u64(708915120906848425, 0) => 708915120906848425 +bit_rotr_u64(708915120906848425, 0) => 708915120906848425 +bit_rotl_u64(1960191741125985428, 0) => 1960191741125985428 +bit_rotr_u64(1960191741125985428, 0) => 1960191741125985428 +bit_rotl_u64(3689348814741910323, 0) => 3689348814741910323 +bit_rotr_u64(3689348814741910323, 0) => 3689348814741910323 +bit_rotl_u64(5578377670650038654, 0) => 5578377670650038654 +bit_rotr_u64(5578377670650038654, 0) => 5578377670650038654 +bit_rotl_u64(9223372036854775808, 0) => 9223372036854775808 +bit_rotr_u64(9223372036854775808, 0) => 9223372036854775808 +bit_rotl_u64(10755112315580060033, 0) => 10755112315580060033 +bit_rotr_u64(10755112315580060033, 0) => 10755112315580060033 +bit_rotl_u64(11163782031541429823, 0) => 11163782031541429823 +bit_rotr_u64(11163782031541429823, 0) => 11163782031541429823 +bit_rotl_u64(13903686156871869732, 0) => 13903686156871869732 +bit_rotr_u64(13903686156871869732, 0) => 13903686156871869732 +bit_rotl_u64(14237897302422917095, 0) => 14237897302422917095 +bit_rotr_u64(14237897302422917095, 0) => 14237897302422917095 +bit_rotl_u64(14302190498657618739, 0) => 14302190498657618739 +bit_rotr_u64(14302190498657618739, 0) => 14302190498657618739 +bit_rotl_u64(15766411510232741269, 0) => 15766411510232741269 +bit_rotr_u64(15766411510232741269, 0) => 15766411510232741269 +bit_rotl_u64(15984546468465238145, 0) => 15984546468465238145 +bit_rotr_u64(15984546468465238145, 0) => 15984546468465238145 +bit_rotl_u64(18446744073709551615, 0) => 18446744073709551615 +bit_rotr_u64(18446744073709551615, 0) => 18446744073709551615 +bit_rotl_u64(0, 1) => 0 +bit_rotr_u64(0, 1) => 0 +bit_rotl_u32(0, 1) => 0 +bit_rotr_u32(0, 1) => 0 +bit_rotl_u64(1, 1) => 2 +bit_rotr_u64(1, 1) => 9223372036854775808 +bit_rotl_u32(1, 1) => 2 +bit_rotr_u32(1, 1) => 2147483648 +bit_rotl_u64(2, 1) => 4 +bit_rotr_u64(2, 1) => 1 +bit_rotl_u32(2, 1) => 4 +bit_rotr_u32(2, 1) => 1 +bit_rotl_u64(32768, 1) => 65536 +bit_rotr_u64(32768, 1) => 16384 +bit_rotl_u32(32768, 1) => 65536 +bit_rotr_u32(32768, 1) => 16384 +bit_rotl_u64(65535, 1) => 131070 +bit_rotr_u64(65535, 1) => 9223372036854808575 +bit_rotl_u32(65535, 1) => 131070 +bit_rotr_u32(65535, 1) => 2147516415 +bit_rotl_u64(65536, 1) => 131072 +bit_rotr_u64(65536, 1) => 32768 +bit_rotl_u32(65536, 1) => 131072 +bit_rotr_u32(65536, 1) => 32768 +bit_rotl_u64(726075912, 1) => 1452151824 +bit_rotr_u64(726075912, 1) => 363037956 +bit_rotl_u32(726075912, 1) => 1452151824 +bit_rotr_u32(726075912, 1) => 363037956 +bit_rotl_u64(858993459, 1) => 1717986918 +bit_rotr_u64(858993459, 1) => 9223372037284272537 +bit_rotl_u32(858993459, 1) => 1717986918 +bit_rotr_u32(858993459, 1) => 2576980377 +bit_rotl_u64(1073741824, 1) => 2147483648 +bit_rotr_u64(1073741824, 1) => 536870912 +bit_rotl_u32(1073741824, 1) => 2147483648 +bit_rotr_u32(1073741824, 1) => 536870912 +bit_rotl_u64(1245250552, 1) => 2490501104 +bit_rotr_u64(1245250552, 1) => 622625276 +bit_rotl_u32(1245250552, 1) => 2490501104 +bit_rotr_u32(1245250552, 1) => 622625276 +bit_rotl_u64(1431655765, 1) => 2863311530 +bit_rotr_u64(1431655765, 1) => 9223372037570603690 +bit_rotl_u32(1431655765, 1) => 2863311530 +bit_rotr_u32(1431655765, 1) => 2863311530 +bit_rotl_u64(1656977767, 1) => 3313955534 +bit_rotr_u64(1656977767, 1) => 9223372037683264691 +bit_rotl_u32(1656977767, 1) => 3313955534 +bit_rotr_u32(1656977767, 1) => 2975972531 +bit_rotl_u64(2147483648, 1) => 4294967296 +bit_rotr_u64(2147483648, 1) => 1073741824 +bit_rotl_u32(2147483648, 1) => 1 +bit_rotr_u32(2147483648, 1) => 1073741824 +bit_rotl_u64(2283114629, 1) => 4566229258 +bit_rotr_u64(2283114629, 1) => 9223372037996333122 +bit_rotl_u32(2283114629, 1) => 271261963 +bit_rotr_u32(2283114629, 1) => 3289040962 +bit_rotl_u64(2502548245, 1) => 5005096490 +bit_rotr_u64(2502548245, 1) => 9223372038106049930 +bit_rotl_u32(2502548245, 1) => 710129195 +bit_rotr_u32(2502548245, 1) => 3398757770 +bit_rotl_u64(4294967295, 1) => 8589934590 +bit_rotr_u64(4294967295, 1) => 9223372039002259455 +bit_rotl_u32(4294967295, 1) => 4294967295 +bit_rotr_u32(4294967295, 1) => 4294967295 +bit_rotl_u64(708915120906848425, 1) => 1417830241813696850 +bit_rotr_u64(708915120906848425, 1) => 9577829597308200020 +bit_rotl_u64(1960191741125985428, 1) => 3920383482251970856 +bit_rotr_u64(1960191741125985428, 1) => 980095870562992714 +bit_rotl_u64(3689348814741910323, 1) => 7378697629483820646 +bit_rotr_u64(3689348814741910323, 1) => 11068046444225730969 +bit_rotl_u64(5578377670650038654, 1) => 11156755341300077308 +bit_rotr_u64(5578377670650038654, 1) => 2789188835325019327 +bit_rotl_u64(9223372036854775808, 1) => 1 +bit_rotr_u64(9223372036854775808, 1) => 4611686018427387904 +bit_rotl_u64(10755112315580060033, 1) => 3063480557450568451 +bit_rotr_u64(10755112315580060033, 1) => 14600928194644805824 +bit_rotl_u64(11163782031541429823, 1) => 3880819989373308031 +bit_rotr_u64(11163782031541429823, 1) => 14805263052625490719 +bit_rotl_u64(13903686156871869732, 1) => 9360628240034187849 +bit_rotr_u64(13903686156871869732, 1) => 6951843078435934866 +bit_rotl_u64(14237897302422917095, 1) => 10029050531136282575 +bit_rotr_u64(14237897302422917095, 1) => 16342320688066234355 +bit_rotl_u64(14302190498657618739, 1) => 10157636923605685863 +bit_rotr_u64(14302190498657618739, 1) => 16374467286183585177 +bit_rotl_u64(15766411510232741269, 1) => 13086078946755930923 +bit_rotr_u64(15766411510232741269, 1) => 17106577791971146442 +bit_rotl_u64(15984546468465238145, 1) => 13522348863220924675 +bit_rotr_u64(15984546468465238145, 1) => 17215645271087394880 +bit_rotl_u64(18446744073709551615, 1) => 18446744073709551615 +bit_rotr_u64(18446744073709551615, 1) => 18446744073709551615 +bit_rotl_u64(0, 15) => 0 +bit_rotr_u64(0, 15) => 0 +bit_rotl_u32(0, 15) => 0 +bit_rotr_u32(0, 15) => 0 +bit_rotl_u64(1, 15) => 32768 +bit_rotr_u64(1, 15) => 562949953421312 +bit_rotl_u32(1, 15) => 32768 +bit_rotr_u32(1, 15) => 131072 +bit_rotl_u64(2, 15) => 65536 +bit_rotr_u64(2, 15) => 1125899906842624 +bit_rotl_u32(2, 15) => 65536 +bit_rotr_u32(2, 15) => 262144 +bit_rotl_u64(32768, 15) => 1073741824 +bit_rotr_u64(32768, 15) => 1 +bit_rotl_u32(32768, 15) => 1073741824 +bit_rotr_u32(32768, 15) => 1 +bit_rotl_u64(65535, 15) => 2147450880 +bit_rotr_u64(65535, 15) => 18446181123756130305 +bit_rotl_u32(65535, 15) => 2147450880 +bit_rotr_u32(65535, 15) => 4294836225 +bit_rotl_u64(65536, 15) => 2147483648 +bit_rotr_u64(65536, 15) => 2 +bit_rotl_u32(65536, 15) => 2147483648 +bit_rotr_u32(65536, 15) => 2 +bit_rotl_u64(726075912, 15) => 23792055484416 +bit_rotr_u64(726075912, 15) => 1445655480385951374 +bit_rotl_u32(726075912, 15) => 2231637411 +bit_rotr_u32(726075912, 15) => 336615054 +bit_rotl_u64(858993459, 15) => 28147497664512 +bit_rotr_u64(858993459, 15) => 7378585039493162598 +bit_rotl_u32(858993459, 15) => 2576980377 +bit_rotr_u32(858993459, 15) => 1717986918 +bit_rotl_u64(1073741824, 15) => 35184372088832 +bit_rotr_u64(1073741824, 15) => 32768 +bit_rotl_u32(1073741824, 15) => 8192 +bit_rotr_u32(1073741824, 15) => 32768 +bit_rotl_u64(1245250552, 15) => 40804370087936 +bit_rotr_u64(1245250552, 15) => 571957152676090994 +bit_rotl_u32(1245250552, 15) => 2180785436 +bit_rotr_u32(1245250552, 15) => 133207154 +bit_rotl_u64(1431655765, 15) => 46912496107520 +bit_rotr_u64(1431655765, 15) => 12297641732488604330 +bit_rotl_u32(1431655765, 15) => 2863311530 +bit_rotr_u32(1431655765, 15) => 2863311530 +bit_rotl_u64(1656977767, 15) => 54295847469056 +bit_rotr_u64(1656977767, 15) => 17495921602381006214 +bit_rotl_u32(1656977767, 15) => 3165892961 +bit_rotr_u32(1656977767, 15) => 4073637254 +bit_rotl_u64(2147483648, 15) => 70368744177664 +bit_rotr_u64(2147483648, 15) => 65536 +bit_rotl_u32(2147483648, 15) => 16384 +bit_rotr_u32(2147483648, 15) => 65536 +bit_rotl_u64(2283114629, 15) => 74813100163072 +bit_rotr_u64(2283114629, 15) => 2380715353018798123 +bit_rotl_u32(2283114629, 15) => 3359818762 +bit_rotr_u32(2283114629, 15) => 554373163 +bit_rotl_u64(2502548245, 15) => 82003500892160 +bit_rotr_u64(2502548245, 15) => 13126304063924808275 +bit_rotl_u32(2502548245, 15) => 3985296020 +bit_rotr_u32(2502548245, 15) => 3056282195 +bit_rotl_u64(4294967295, 15) => 140737488322560 +bit_rotr_u64(4294967295, 15) => 18446181123756261375 +bit_rotl_u32(4294967295, 15) => 4294967295 +bit_rotr_u32(4294967295, 15) => 4294967295 +bit_rotl_u64(708915120906848425, 15) => 5279893075283707115 +bit_rotr_u64(708915120906848425, 15) => 10471453717962410780 +bit_rotl_u64(1960191741125985428, 15) => 108559631781274 +bit_rotr_u64(1960191741125985428, 15) => 659837165714377456 +bit_rotl_u64(3689348814741910323, 15) => 11068046444225730969 +bit_rotr_u64(3689348814741910323, 15) => 7378697629483820646 +bit_rotl_u64(5578377670650038654, 15) => 3492485472519661237 +bit_rotr_u64(5578377670650038654, 15) => 1368138625390162978 +bit_rotl_u64(9223372036854775808, 15) => 16384 +bit_rotr_u64(9223372036854775808, 15) => 281474976710656 +bit_rotl_u64(10755112315580060033, 15) => 16921572780133108384 +bit_rotr_u64(10755112315580060033, 15) => 2522906961261232936 +bit_rotl_u64(11163782031541429823, 15) => 15874627889163914614 +bit_rotr_u64(11163782031541429823, 15) => 14735555722393159636 +bit_rotl_u64(13903686156871869732, 15) => 16749599972631142521 +bit_rotr_u64(13903686156871869732, 15) => 5352952463958352314 +bit_rotl_u64(14237897302422917095, 15) => 10814437605877473995 +bit_rotr_u64(14237897302422917095, 15) => 2292203766521423570 +bit_rotl_u64(14302190498657618739, 15) => 14645067421692060477 +bit_rotr_u64(14302190498657618739, 15) => 10837786021529578728 +bit_rotl_u64(15766411510232741269, 15) => 14257838996763372902 +bit_rotr_u64(15766411510232741269, 15) => 16945837700629926938 +bit_rotl_u64(15984546468465238145, 15) => 4767449759914979050 +bit_rotr_u64(15984546468465238145, 15) => 13908166408919157040 +bit_rotl_u64(18446744073709551615, 15) => 18446744073709551615 +bit_rotr_u64(18446744073709551615, 15) => 18446744073709551615 +bit_rotl_u64(0, 16) => 0 +bit_rotr_u64(0, 16) => 0 +bit_rotl_u32(0, 16) => 0 +bit_rotr_u32(0, 16) => 0 +bit_rotl_u64(1, 16) => 65536 +bit_rotr_u64(1, 16) => 281474976710656 +bit_rotl_u32(1, 16) => 65536 +bit_rotr_u32(1, 16) => 65536 +bit_rotl_u64(2, 16) => 131072 +bit_rotr_u64(2, 16) => 562949953421312 +bit_rotl_u32(2, 16) => 131072 +bit_rotr_u32(2, 16) => 131072 +bit_rotl_u64(32768, 16) => 2147483648 +bit_rotr_u64(32768, 16) => 9223372036854775808 +bit_rotl_u32(32768, 16) => 2147483648 +bit_rotr_u32(32768, 16) => 2147483648 +bit_rotl_u64(65535, 16) => 4294901760 +bit_rotr_u64(65535, 16) => 18446462598732840960 +bit_rotl_u32(65535, 16) => 4294901760 +bit_rotr_u32(65535, 16) => 4294901760 +bit_rotl_u64(65536, 16) => 4294967296 +bit_rotr_u64(65536, 16) => 1 +bit_rotl_u32(65536, 16) => 1 +bit_rotr_u32(65536, 16) => 1 +bit_rotl_u64(726075912, 16) => 47584110968832 +bit_rotr_u64(726075912, 16) => 722827740192975687 +bit_rotl_u32(726075912, 16) => 168307527 +bit_rotr_u32(726075912, 16) => 168307527 +bit_rotl_u64(858993459, 16) => 56294995329024 +bit_rotr_u64(858993459, 16) => 3689292519746581299 +bit_rotl_u32(858993459, 16) => 858993459 +bit_rotr_u32(858993459, 16) => 858993459 +bit_rotl_u64(1073741824, 16) => 70368744177664 +bit_rotr_u64(1073741824, 16) => 16384 +bit_rotl_u32(1073741824, 16) => 16384 +bit_rotr_u32(1073741824, 16) => 16384 +bit_rotl_u64(1245250552, 16) => 81608740175872 +bit_rotr_u64(1245250552, 16) => 285978576338045497 +bit_rotl_u32(1245250552, 16) => 66603577 +bit_rotr_u32(1245250552, 16) => 66603577 +bit_rotl_u64(1431655765, 16) => 93824992215040 +bit_rotr_u64(1431655765, 16) => 6148820866244302165 +bit_rotl_u32(1431655765, 16) => 1431655765 +bit_rotr_u32(1431655765, 16) => 1431655765 +bit_rotl_u64(1656977767, 16) => 108591694938112 +bit_rotr_u64(1656977767, 16) => 8747960801190503107 +bit_rotl_u32(1656977767, 16) => 2036818627 +bit_rotr_u32(1656977767, 16) => 2036818627 +bit_rotl_u64(2147483648, 16) => 140737488355328 +bit_rotr_u64(2147483648, 16) => 32768 +bit_rotl_u32(2147483648, 16) => 32768 +bit_rotr_u32(2147483648, 16) => 32768 +bit_rotl_u64(2283114629, 16) => 149626200326144 +bit_rotr_u64(2283114629, 16) => 10413729713364174869 +bit_rotl_u32(2283114629, 16) => 2424670229 +bit_rotr_u32(2283114629, 16) => 2424670229 +bit_rotl_u64(2502548245, 16) => 164007001784320 +bit_rotr_u64(2502548245, 16) => 15786524068817179945 +bit_rotl_u32(2502548245, 16) => 3675624745 +bit_rotr_u32(2502548245, 16) => 3675624745 +bit_rotl_u64(4294967295, 16) => 281474976645120 +bit_rotr_u64(4294967295, 16) => 18446462598732906495 +bit_rotl_u32(4294967295, 16) => 4294967295 +bit_rotr_u32(4294967295, 16) => 4294967295 +bit_rotl_u64(708915120906848425, 16) => 10559786150567414230 +bit_rotr_u64(708915120906848425, 16) => 5235726858981205390 +bit_rotl_u64(1960191741125985428, 16) => 217119263562548 +bit_rotr_u64(1960191741125985428, 16) => 329918582857188728 +bit_rotl_u64(3689348814741910323, 16) => 3689348814741910323 +bit_rotr_u64(3689348814741910323, 16) => 3689348814741910323 +bit_rotl_u64(5578377670650038654, 16) => 6984970945039322474 +bit_rotr_u64(5578377670650038654, 16) => 684069312695081489 +bit_rotl_u64(9223372036854775808, 16) => 32768 +bit_rotr_u64(9223372036854775808, 16) => 140737488355328 +bit_rotl_u64(10755112315580060033, 16) => 15396401486556665153 +bit_rotr_u64(10755112315580060033, 16) => 1261453480630616468 +bit_rotl_u64(11163782031541429823, 16) => 13302511704618277613 +bit_rotr_u64(11163782031541429823, 16) => 7367777861196579818 +bit_rotl_u64(13903686156871869732, 16) => 15052455871552733427 +bit_rotr_u64(13903686156871869732, 16) => 2676476231979176157 +bit_rotl_u64(14237897302422917095, 16) => 3182131138045396375 +bit_rotr_u64(14237897302422917095, 16) => 1146101883260711785 +bit_rotl_u64(14302190498657618739, 16) => 10843390769674569339 +bit_rotr_u64(14302190498657618739, 16) => 5418893010764789364 +bit_rotl_u64(15766411510232741269, 16) => 10068933919817194189 +bit_rotr_u64(15766411510232741269, 16) => 8472918850314963469 +bit_rotl_u64(15984546468465238145, 16) => 9534899519829958100 +bit_rotr_u64(15984546468465238145, 16) => 6954083204459578520 +bit_rotl_u64(18446744073709551615, 16) => 18446744073709551615 +bit_rotr_u64(18446744073709551615, 16) => 18446744073709551615 +bit_rotl_u64(0, 31) => 0 +bit_rotr_u64(0, 31) => 0 +bit_rotl_u32(0, 31) => 0 +bit_rotr_u32(0, 31) => 0 +bit_rotl_u64(1, 31) => 2147483648 +bit_rotr_u64(1, 31) => 8589934592 +bit_rotl_u32(1, 31) => 2147483648 +bit_rotr_u32(1, 31) => 2 +bit_rotl_u64(2, 31) => 4294967296 +bit_rotr_u64(2, 31) => 17179869184 +bit_rotl_u32(2, 31) => 1 +bit_rotr_u32(2, 31) => 4 +bit_rotl_u64(32768, 31) => 70368744177664 +bit_rotr_u64(32768, 31) => 281474976710656 +bit_rotl_u32(32768, 31) => 16384 +bit_rotr_u32(32768, 31) => 65536 +bit_rotl_u64(65535, 31) => 140735340871680 +bit_rotr_u64(65535, 31) => 562941363486720 +bit_rotl_u32(65535, 31) => 2147516415 +bit_rotr_u32(65535, 31) => 131070 +bit_rotl_u64(65536, 31) => 140737488355328 +bit_rotr_u64(65536, 31) => 562949953421312 +bit_rotl_u32(65536, 31) => 32768 +bit_rotr_u32(65536, 31) => 131072 +bit_rotl_u64(726075912, 31) => 1559236148226686976 +bit_rotr_u64(726075912, 31) => 6236944592906747904 +bit_rotl_u32(726075912, 31) => 363037956 +bit_rotr_u32(726075912, 31) => 1452151824 +bit_rotl_u64(858993459, 31) => 1844674406941458432 +bit_rotr_u64(858993459, 31) => 7378697627765833728 +bit_rotl_u32(858993459, 31) => 2576980377 +bit_rotr_u32(858993459, 31) => 1717986918 +bit_rotl_u64(1073741824, 31) => 2305843009213693952 +bit_rotr_u64(1073741824, 31) => 9223372036854775808 +bit_rotl_u32(1073741824, 31) => 536870912 +bit_rotr_u32(1073741824, 31) => 2147483648 +bit_rotl_u64(1245250552, 31) => 2674155198082973696 +bit_rotr_u64(1245250552, 31) => 10696620792331894784 +bit_rotl_u32(1245250552, 31) => 622625276 +bit_rotr_u32(1245250552, 31) => 2490501104 +bit_rotl_u64(1431655765, 31) => 3074457344902430720 +bit_rotr_u64(1431655765, 31) => 12297829379609722880 +bit_rotl_u32(1431655765, 31) => 2863311530 +bit_rotr_u32(1431655765, 31) => 2863311530 +bit_rotl_u64(1656977767, 31) => 3558332659732054016 +bit_rotr_u64(1656977767, 31) => 14233330638928216064 +bit_rotl_u32(1656977767, 31) => 2975972531 +bit_rotr_u32(1656977767, 31) => 3313955534 +bit_rotl_u64(2147483648, 31) => 4611686018427387904 +bit_rotr_u64(2147483648, 31) => 1 +bit_rotl_u32(2147483648, 31) => 1073741824 +bit_rotr_u32(2147483648, 31) => 1 +bit_rotl_u64(2283114629, 31) => 4902951332287086592 +bit_rotr_u64(2283114629, 31) => 1165061255438794753 +bit_rotl_u32(2283114629, 31) => 3289040962 +bit_rotr_u32(2283114629, 31) => 271261963 +bit_rotl_u64(2502548245, 31) => 5374181434468597760 +bit_rotr_u64(2502548245, 31) => 3049981664164839425 +bit_rotl_u32(2502548245, 31) => 3398757770 +bit_rotr_u32(2502548245, 31) => 710129195 +bit_rotl_u64(4294967295, 31) => 9223372034707292160 +bit_rotr_u64(4294967295, 31) => 18446744065119617025 +bit_rotl_u32(4294967295, 31) => 4294967295 +bit_rotr_u32(4294967295, 31) => 4294967295 +bit_rotl_u64(708915120906848425, 31) => 17493991222969846085 +bit_rotr_u64(708915120906848425, 31) => 14635732670750729495 +bit_rotl_u64(1960191741125985428, 31) => 7114564028417572864 +bit_rotr_u64(1960191741125985428, 31) => 10011512039960739841 +bit_rotl_u64(3689348814741910323, 31) => 11068046444225730969 +bit_rotr_u64(3689348814741910323, 31) => 7378697629483820646 +bit_rotl_u64(5578377670650038654, 31) => 14774204534111940727 +bit_rotr_u64(5578377670650038654, 31) => 3756585915319108063 +bit_rotl_u64(9223372036854775808, 31) => 1073741824 +bit_rotr_u64(9223372036854775808, 31) => 4294967296 +bit_rotl_u64(10755112315580060033, 31) => 9280239606276614869 +bit_rotr_u64(10755112315580060033, 31) => 227470277687356246 +bit_rotl_u64(11163782031541429823, 31) => 141075175016160334 +bit_rotr_u64(11163782031541429823, 31) => 564300700064641336 +bit_rotl_u64(13903686156871869732, 31) => 9830956193977854066 +bit_rotr_u64(13903686156871869732, 31) => 2430336628492313034 +bit_rotl_u64(14237897302422917095, 31) => 11075626865162688020 +bit_rotr_u64(14237897302422917095, 31) => 7409019313231648850 +bit_rotl_u64(14302190498657618739, 31) => 13491136976614443837 +bit_rotr_u64(14302190498657618739, 31) => 17071059759038672118 +bit_rotl_u64(15766411510232741269, 31) => 362182200778999262 +bit_rotr_u64(15766411510232741269, 31) => 1448728803115997048 +bit_rotl_u64(15984546468465238145, 31) => 7083089369391317545 +bit_rotr_u64(15984546468465238145, 31) => 9885613403855718565 +bit_rotl_u64(18446744073709551615, 31) => 18446744073709551615 +bit_rotr_u64(18446744073709551615, 31) => 18446744073709551615 +bit_rotl_u64(0, 32) => 0 +bit_rotr_u64(0, 32) => 0 +bit_rotl_u32(0, 32) => 0 +bit_rotr_u32(0, 32) => 0 +bit_rotl_u64(1, 32) => 4294967296 +bit_rotr_u64(1, 32) => 4294967296 +bit_rotl_u32(1, 32) => 1 +bit_rotr_u32(1, 32) => 1 +bit_rotl_u64(2, 32) => 8589934592 +bit_rotr_u64(2, 32) => 8589934592 +bit_rotl_u32(2, 32) => 2 +bit_rotr_u32(2, 32) => 2 +bit_rotl_u64(32768, 32) => 140737488355328 +bit_rotr_u64(32768, 32) => 140737488355328 +bit_rotl_u32(32768, 32) => 32768 +bit_rotr_u32(32768, 32) => 32768 +bit_rotl_u64(65535, 32) => 281470681743360 +bit_rotr_u64(65535, 32) => 281470681743360 +bit_rotl_u32(65535, 32) => 65535 +bit_rotr_u32(65535, 32) => 65535 +bit_rotl_u64(65536, 32) => 281474976710656 +bit_rotr_u64(65536, 32) => 281474976710656 +bit_rotl_u32(65536, 32) => 65536 +bit_rotr_u32(65536, 32) => 65536 +bit_rotl_u64(726075912, 32) => 3118472296453373952 +bit_rotr_u64(726075912, 32) => 3118472296453373952 +bit_rotl_u32(726075912, 32) => 726075912 +bit_rotr_u32(726075912, 32) => 726075912 +bit_rotl_u64(858993459, 32) => 3689348813882916864 +bit_rotr_u64(858993459, 32) => 3689348813882916864 +bit_rotl_u32(858993459, 32) => 858993459 +bit_rotr_u32(858993459, 32) => 858993459 +bit_rotl_u64(1073741824, 32) => 4611686018427387904 +bit_rotr_u64(1073741824, 32) => 4611686018427387904 +bit_rotl_u32(1073741824, 32) => 1073741824 +bit_rotr_u32(1073741824, 32) => 1073741824 +bit_rotl_u64(1245250552, 32) => 5348310396165947392 +bit_rotr_u64(1245250552, 32) => 5348310396165947392 +bit_rotl_u32(1245250552, 32) => 1245250552 +bit_rotr_u32(1245250552, 32) => 1245250552 +bit_rotl_u64(1431655765, 32) => 6148914689804861440 +bit_rotr_u64(1431655765, 32) => 6148914689804861440 +bit_rotl_u32(1431655765, 32) => 1431655765 +bit_rotr_u32(1431655765, 32) => 1431655765 +bit_rotl_u64(1656977767, 32) => 7116665319464108032 +bit_rotr_u64(1656977767, 32) => 7116665319464108032 +bit_rotl_u32(1656977767, 32) => 1656977767 +bit_rotr_u32(1656977767, 32) => 1656977767 +bit_rotl_u64(2147483648, 32) => 9223372036854775808 +bit_rotr_u64(2147483648, 32) => 9223372036854775808 +bit_rotl_u32(2147483648, 32) => 2147483648 +bit_rotr_u32(2147483648, 32) => 2147483648 +bit_rotl_u64(2283114629, 32) => 9805902664574173184 +bit_rotr_u64(2283114629, 32) => 9805902664574173184 +bit_rotl_u32(2283114629, 32) => 2283114629 +bit_rotr_u32(2283114629, 32) => 2283114629 +bit_rotl_u64(2502548245, 32) => 10748362868937195520 +bit_rotr_u64(2502548245, 32) => 10748362868937195520 +bit_rotl_u32(2502548245, 32) => 2502548245 +bit_rotr_u32(2502548245, 32) => 2502548245 +bit_rotl_u64(4294967295, 32) => 18446744069414584320 +bit_rotr_u64(4294967295, 32) => 18446744069414584320 +bit_rotl_u32(4294967295, 32) => 4294967295 +bit_rotr_u32(4294967295, 32) => 4294967295 +bit_rotl_u64(708915120906848425, 32) => 16541238372230140555 +bit_rotr_u64(708915120906848425, 32) => 16541238372230140555 +bit_rotl_u64(1960191741125985428, 32) => 14229128056835145728 +bit_rotr_u64(1960191741125985428, 32) => 14229128056835145728 +bit_rotl_u64(3689348814741910323, 32) => 3689348814741910323 +bit_rotr_u64(3689348814741910323, 32) => 3689348814741910323 +bit_rotl_u64(5578377670650038654, 32) => 11101664994514329839 +bit_rotr_u64(5578377670650038654, 32) => 11101664994514329839 +bit_rotl_u64(9223372036854775808, 32) => 2147483648 +bit_rotr_u64(9223372036854775808, 32) => 2147483648 +bit_rotl_u64(10755112315580060033, 32) => 113735138843678123 +bit_rotr_u64(10755112315580060033, 32) => 113735138843678123 +bit_rotl_u64(11163782031541429823, 32) => 282150350032320668 +bit_rotr_u64(11163782031541429823, 32) => 282150350032320668 +bit_rotl_u64(13903686156871869732, 32) => 1215168314246156517 +bit_rotr_u64(13903686156871869732, 32) => 1215168314246156517 +bit_rotl_u64(14237897302422917095, 32) => 3704509656615824425 +bit_rotr_u64(14237897302422917095, 32) => 3704509656615824425 +bit_rotl_u64(14302190498657618739, 32) => 8535529879519336059 +bit_rotr_u64(14302190498657618739, 32) => 8535529879519336059 +bit_rotl_u64(15766411510232741269, 32) => 724364401557998524 +bit_rotr_u64(15766411510232741269, 32) => 724364401557998524 +bit_rotl_u64(15984546468465238145, 32) => 14166178738782635090 +bit_rotr_u64(15984546468465238145, 32) => 14166178738782635090 +bit_rotl_u64(18446744073709551615, 32) => 18446744073709551615 +bit_rotr_u64(18446744073709551615, 32) => 18446744073709551615 +bit_rotl_u64(0, 63) => 0 +bit_rotr_u64(0, 63) => 0 +bit_rotl_u64(1, 63) => 9223372036854775808 +bit_rotr_u64(1, 63) => 2 +bit_rotl_u64(2, 63) => 1 +bit_rotr_u64(2, 63) => 4 +bit_rotl_u64(32768, 63) => 16384 +bit_rotr_u64(32768, 63) => 65536 +bit_rotl_u64(65535, 63) => 9223372036854808575 +bit_rotr_u64(65535, 63) => 131070 +bit_rotl_u64(65536, 63) => 32768 +bit_rotr_u64(65536, 63) => 131072 +bit_rotl_u64(726075912, 63) => 363037956 +bit_rotr_u64(726075912, 63) => 1452151824 +bit_rotl_u64(858993459, 63) => 9223372037284272537 +bit_rotr_u64(858993459, 63) => 1717986918 +bit_rotl_u64(1073741824, 63) => 536870912 +bit_rotr_u64(1073741824, 63) => 2147483648 +bit_rotl_u64(1245250552, 63) => 622625276 +bit_rotr_u64(1245250552, 63) => 2490501104 +bit_rotl_u64(1431655765, 63) => 9223372037570603690 +bit_rotr_u64(1431655765, 63) => 2863311530 +bit_rotl_u64(1656977767, 63) => 9223372037683264691 +bit_rotr_u64(1656977767, 63) => 3313955534 +bit_rotl_u64(2147483648, 63) => 1073741824 +bit_rotr_u64(2147483648, 63) => 4294967296 +bit_rotl_u64(2283114629, 63) => 9223372037996333122 +bit_rotr_u64(2283114629, 63) => 4566229258 +bit_rotl_u64(2502548245, 63) => 9223372038106049930 +bit_rotr_u64(2502548245, 63) => 5005096490 +bit_rotl_u64(4294967295, 63) => 9223372039002259455 +bit_rotr_u64(4294967295, 63) => 8589934590 +bit_rotl_u64(708915120906848425, 63) => 9577829597308200020 +bit_rotr_u64(708915120906848425, 63) => 1417830241813696850 +bit_rotl_u64(1960191741125985428, 63) => 980095870562992714 +bit_rotr_u64(1960191741125985428, 63) => 3920383482251970856 +bit_rotl_u64(3689348814741910323, 63) => 11068046444225730969 +bit_rotr_u64(3689348814741910323, 63) => 7378697629483820646 +bit_rotl_u64(5578377670650038654, 63) => 2789188835325019327 +bit_rotr_u64(5578377670650038654, 63) => 11156755341300077308 +bit_rotl_u64(9223372036854775808, 63) => 4611686018427387904 +bit_rotr_u64(9223372036854775808, 63) => 1 +bit_rotl_u64(10755112315580060033, 63) => 14600928194644805824 +bit_rotr_u64(10755112315580060033, 63) => 3063480557450568451 +bit_rotl_u64(11163782031541429823, 63) => 14805263052625490719 +bit_rotr_u64(11163782031541429823, 63) => 3880819989373308031 +bit_rotl_u64(13903686156871869732, 63) => 6951843078435934866 +bit_rotr_u64(13903686156871869732, 63) => 9360628240034187849 +bit_rotl_u64(14237897302422917095, 63) => 16342320688066234355 +bit_rotr_u64(14237897302422917095, 63) => 10029050531136282575 +bit_rotl_u64(14302190498657618739, 63) => 16374467286183585177 +bit_rotr_u64(14302190498657618739, 63) => 10157636923605685863 +bit_rotl_u64(15766411510232741269, 63) => 17106577791971146442 +bit_rotr_u64(15766411510232741269, 63) => 13086078946755930923 +bit_rotl_u64(15984546468465238145, 63) => 17215645271087394880 +bit_rotr_u64(15984546468465238145, 63) => 13522348863220924675 +bit_rotl_u64(18446744073709551615, 63) => 18446744073709551615 +bit_rotr_u64(18446744073709551615, 63) => 18446744073709551615 +bit_rotl_u64(0, 64) => 0 +bit_rotr_u64(0, 64) => 0 +bit_rotl_u64(1, 64) => 1 +bit_rotr_u64(1, 64) => 1 +bit_rotl_u64(2, 64) => 2 +bit_rotr_u64(2, 64) => 2 +bit_rotl_u64(32768, 64) => 32768 +bit_rotr_u64(32768, 64) => 32768 +bit_rotl_u64(65535, 64) => 65535 +bit_rotr_u64(65535, 64) => 65535 +bit_rotl_u64(65536, 64) => 65536 +bit_rotr_u64(65536, 64) => 65536 +bit_rotl_u64(726075912, 64) => 726075912 +bit_rotr_u64(726075912, 64) => 726075912 +bit_rotl_u64(858993459, 64) => 858993459 +bit_rotr_u64(858993459, 64) => 858993459 +bit_rotl_u64(1073741824, 64) => 1073741824 +bit_rotr_u64(1073741824, 64) => 1073741824 +bit_rotl_u64(1245250552, 64) => 1245250552 +bit_rotr_u64(1245250552, 64) => 1245250552 +bit_rotl_u64(1431655765, 64) => 1431655765 +bit_rotr_u64(1431655765, 64) => 1431655765 +bit_rotl_u64(1656977767, 64) => 1656977767 +bit_rotr_u64(1656977767, 64) => 1656977767 +bit_rotl_u64(2147483648, 64) => 2147483648 +bit_rotr_u64(2147483648, 64) => 2147483648 +bit_rotl_u64(2283114629, 64) => 2283114629 +bit_rotr_u64(2283114629, 64) => 2283114629 +bit_rotl_u64(2502548245, 64) => 2502548245 +bit_rotr_u64(2502548245, 64) => 2502548245 +bit_rotl_u64(4294967295, 64) => 4294967295 +bit_rotr_u64(4294967295, 64) => 4294967295 +bit_rotl_u64(708915120906848425, 64) => 708915120906848425 +bit_rotr_u64(708915120906848425, 64) => 708915120906848425 +bit_rotl_u64(1960191741125985428, 64) => 1960191741125985428 +bit_rotr_u64(1960191741125985428, 64) => 1960191741125985428 +bit_rotl_u64(3689348814741910323, 64) => 3689348814741910323 +bit_rotr_u64(3689348814741910323, 64) => 3689348814741910323 +bit_rotl_u64(5578377670650038654, 64) => 5578377670650038654 +bit_rotr_u64(5578377670650038654, 64) => 5578377670650038654 +bit_rotl_u64(9223372036854775808, 64) => 9223372036854775808 +bit_rotr_u64(9223372036854775808, 64) => 9223372036854775808 +bit_rotl_u64(10755112315580060033, 64) => 10755112315580060033 +bit_rotr_u64(10755112315580060033, 64) => 10755112315580060033 +bit_rotl_u64(11163782031541429823, 64) => 11163782031541429823 +bit_rotr_u64(11163782031541429823, 64) => 11163782031541429823 +bit_rotl_u64(13903686156871869732, 64) => 13903686156871869732 +bit_rotr_u64(13903686156871869732, 64) => 13903686156871869732 +bit_rotl_u64(14237897302422917095, 64) => 14237897302422917095 +bit_rotr_u64(14237897302422917095, 64) => 14237897302422917095 +bit_rotl_u64(14302190498657618739, 64) => 14302190498657618739 +bit_rotr_u64(14302190498657618739, 64) => 14302190498657618739 +bit_rotl_u64(15766411510232741269, 64) => 15766411510232741269 +bit_rotr_u64(15766411510232741269, 64) => 15766411510232741269 +bit_rotl_u64(15984546468465238145, 64) => 15984546468465238145 +bit_rotr_u64(15984546468465238145, 64) => 15984546468465238145 +bit_rotl_u64(18446744073709551615, 64) => 18446744073709551615 +bit_rotr_u64(18446744073709551615, 64) => 18446744073709551615 + *** test_rotl_rotr: done *** + *** test_bswap *** +bswap_u64(0) => 0 +bswap_u32(0) => 0 +bswap_u64(1) => 72057594037927936 +bswap_u32(1) => 16777216 +bswap_u64(2) => 144115188075855872 +bswap_u32(2) => 33554432 +bswap_u64(32768) => 36028797018963968 +bswap_u32(32768) => 8388608 +bswap_u64(65535) => 18446462598732840960 +bswap_u32(65535) => 4294901760 +bswap_u64(65536) => 1099511627776 +bswap_u32(65536) => 256 +bswap_u64(726075912) => 579353752079695872 +bswap_u32(726075912) => 134891307 +bswap_u64(858993459) => 3689348813882916864 +bswap_u32(858993459) => 858993459 +bswap_u64(1073741824) => 274877906944 +bswap_u32(1073741824) => 64 +bswap_u64(1245250552) => 17871190736326623232 +bswap_u32(1245250552) => 4160960842 +bswap_u64(1431655765) => 6148914689804861440 +bswap_u32(1431655765) => 1431655765 +bswap_u64(1656977767) => 7456205483762778112 +bswap_u32(1656977767) => 1736033122 +bswap_u64(2147483648) => 549755813888 +bswap_u32(2147483648) => 128 +bswap_u64(2283114629) => 9624216077550485504 +bswap_u32(2283114629) => 2240812424 +bswap_u64(2502548245) => 1574898214622986240 +bswap_u32(2502548245) => 366684565 +bswap_u64(4294967295) => 18446744069414584320 +bswap_u32(4294967295) => 4294967295 +bswap_u64(708915120906848425) => 12198156707273299465 +bswap_u64(1960191741125985428) => 10665782605024080923 +bswap_u64(3689348814741910323) => 3689348814741910323 +bswap_u64(5578377670650038654) => 9081809480708024909 +bswap_u64(9223372036854775808) => 128 +bswap_u64(10755112315580060033) => 9300377440395542933 +bswap_u64(11163782031541429823) => 4568596173249113498 +bswap_u64(13903686156871869732) => 2604731024148591552 +bswap_u64(14237897302422917095) => 16649642015867049925 +bswap_u64(14302190498657618739) => 3696175971416046534 +bswap_u64(15766411510232741269) => 10769528423690522074 +bswap_u64(15984546468465238145) => 9322619197622375645 +bswap_u64(18446744073709551615) => 18446744073709551615 + *** test_bswap: done *** + *** test_index *** +bit_index_u64(0, *, -1) => +bit_index_u32(0, *, -1) => +bit_index_u64(1, *, -1) => 0 +bit_index_u32(1, *, -1) => 0 +bit_index_u64(2, *, -1) => 1 +bit_index_u32(2, *, -1) => 1 +bit_index_u64(32768, *, -1) => 15 +bit_index_u32(32768, *, -1) => 15 +bit_index_u64(65535, *, -1) => 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 +bit_index_u32(65535, *, -1) => 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 +bit_index_u64(65536, *, -1) => 16 +bit_index_u32(65536, *, -1) => 16 +bit_index_u64(726075912, *, -1) => 3 9 11 16 17 18 22 24 25 27 29 +bit_index_u32(726075912, *, -1) => 3 9 11 16 17 18 22 24 25 27 29 +bit_index_u64(858993459, *, -1) => 0 1 4 5 8 9 12 13 16 17 20 21 24 25 28 29 +bit_index_u32(858993459, *, -1) => 0 1 4 5 8 9 12 13 16 17 20 21 24 25 28 29 +bit_index_u64(1073741824, *, -1) => 30 +bit_index_u32(1073741824, *, -1) => 30 +bit_index_u64(1245250552, *, -1) => 3 4 5 6 7 8 9 16 19 20 21 25 27 30 +bit_index_u32(1245250552, *, -1) => 3 4 5 6 7 8 9 16 19 20 21 25 27 30 +bit_index_u64(1431655765, *, -1) => 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 +bit_index_u32(1431655765, *, -1) => 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 +bit_index_u64(1656977767, *, -1) => 0 1 2 5 6 8 11 12 13 14 16 17 22 23 25 29 30 +bit_index_u32(1656977767, *, -1) => 0 1 2 5 6 8 11 12 13 14 16 17 22 23 25 29 30 +bit_index_u64(2147483648, *, -1) => 31 +bit_index_u32(2147483648, *, -1) => 31 +bit_index_u64(2283114629, *, -1) => 0 2 7 12 15 16 18 20 27 31 +bit_index_u32(2283114629, *, -1) => 0 2 7 12 15 16 18 20 27 31 +bit_index_u64(2502548245, *, -1) => 0 2 4 8 9 11 12 14 15 16 19 21 24 26 28 31 +bit_index_u32(2502548245, *, -1) => 0 2 4 8 9 11 12 14 15 16 19 21 24 26 28 31 +bit_index_u64(4294967295, *, -1) => 0 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 +bit_index_u32(4294967295, *, -1) => 0 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 +bit_index_u64(708915120906848425, *, -1) => 0 3 5 7 11 14 17 18 19 23 24 26 29 30 31 32 33 35 39 41 44 47 49 50 52 54 55 56 59 +bit_index_u64(1960191741125985428, *, -1) => 2 4 7 10 19 20 21 22 24 26 30 31 50 52 53 56 57 59 60 +bit_index_u64(3689348814741910323, *, -1) => 0 1 4 5 8 9 12 13 16 17 20 21 24 25 28 29 32 33 36 37 40 41 44 45 48 49 52 53 56 57 60 61 +bit_index_u64(5578377670650038654, *, -1) => 1 2 3 4 5 6 8 11 16 20 25 27 28 31 32 33 34 35 37 38 39 45 46 49 51 53 54 56 58 59 62 +bit_index_u64(9223372036854775808, *, -1) => 63 +bit_index_u64(10755112315580060033, *, -1) => 0 7 8 12 18 20 23 24 32 33 35 37 39 40 42 44 46 47 48 54 56 58 60 63 +bit_index_u64(11163782031541429823, *, -1) => 0 1 2 3 4 5 9 10 13 14 17 19 21 22 23 24 25 34 35 36 39 43 44 45 47 48 50 51 53 54 55 57 59 60 63 +bit_index_u64(13903686156871869732, *, -1) => 2 5 8 10 13 16 18 19 20 22 23 28 32 34 37 38 39 44 46 47 48 49 52 53 54 55 62 63 +bit_index_u64(14237897302422917095, *, -1) => 0 1 2 5 6 7 8 9 10 11 16 19 21 22 24 25 28 29 32 35 37 42 43 45 48 49 50 52 55 56 58 62 63 +bit_index_u64(14302190498657618739, *, -1) => 0 1 4 5 8 9 11 14 18 20 21 22 25 26 28 29 30 32 33 35 36 37 38 41 42 44 47 48 49 51 52 53 54 57 58 62 63 +bit_index_u64(15766411510232741269, *, -1) => 0 2 4 7 8 10 12 13 14 16 18 19 25 27 34 35 36 37 39 40 41 43 47 48 50 51 54 55 57 59 60 62 63 +bit_index_u64(15984546468465238145, *, -1) => 0 7 13 14 19 20 23 26 30 31 33 36 38 42 47 50 52 54 55 56 58 59 60 62 63 +bit_index_u64(18446744073709551615, *, -1) => 0 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 + *** test_index: done *** + \ No newline at end of file diff --git a/test/unit/bit.test b/test/unit/bit.test new file mode 100644 index 0000000000000000000000000000000000000000..bd42398b072ea067924ad5ff0977c8109be9636c --- /dev/null +++ b/test/unit/bit.test @@ -0,0 +1 @@ +run_test("bit_test")