diff options
Diffstat (limited to 'testing/fulltests/unit-tests/T015int64_clib.c')
-rw-r--r-- | testing/fulltests/unit-tests/T015int64_clib.c | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/testing/fulltests/unit-tests/T015int64_clib.c b/testing/fulltests/unit-tests/T015int64_clib.c new file mode 100644 index 0000000..5f5f4b6 --- /dev/null +++ b/testing/fulltests/unit-tests/T015int64_clib.c @@ -0,0 +1,82 @@ +/* HEADER Testing 64-bit integer operations (U64). */ + +int i, j; +char buf[22]; +static const int64_t intval[] = { + 0, + -1, + 1, + 37, + 0x7fffffffUL, + 0x80000000UL, + 0x99999999UL, + 0x7fffffffffffffffULL, + 0x8000000000000000ULL, +}; + +for (i = 0; i < sizeof(intval)/sizeof(intval[0]); ++i) { + U64 a, b; + a.low = (uint32_t)intval[i]; + a.high = (uint32_t)(intval[i] >> 32); + printI64(buf, &a); + read64(&b, buf); + OKF(memcmp(&a, &b, sizeof(a)) == 0, + ("[%d]: %" PRId64 " <> %s <> %" PRId64, i, intval[i], buf, + ((uint64_t)b.high) << 32 | b.low)); +} + +for (i = 0; i < sizeof(intval)/sizeof(intval[0]); ++i) { + for (j = i; j < sizeof(intval)/sizeof(intval[0]); ++j) { + U64 a, b; + uint64_t d; + a.low = (uint32_t)intval[i]; + a.high = (uint32_t)(intval[i] >> 32); + b.low = (uint32_t)intval[j]; + b.high = (uint32_t)(intval[j] >> 32); + u64Incr(&a, &b); + d = (uint64_t)a.high << 32 | a.low; + OKF(intval[i] + intval[j] == d, + ("%" PRId64 " + %" PRId64 " = %" PRId64 " <> %" PRId64, intval[i], + intval[j], intval[i] + intval[j], d)); + } +} + +for (i = 0; i < sizeof(intval)/sizeof(intval[0]); ++i) { + for (j = i; j < sizeof(intval)/sizeof(intval[0]); ++j) { + U64 a, b, c; + uint64_t d; + a.low = (uint32_t)intval[i]; + a.high = (uint32_t)(intval[i] >> 32); + b.low = (uint32_t)intval[j]; + b.high = (uint32_t)(intval[j] >> 32); + u64Subtract(&a, &b, &c); + d = (uint64_t)c.high << 32 | c.low; + OKF(intval[i] - intval[j] == d, + ("%" PRId64 " - %" PRId64 " = %" PRId64 " <> %" PRId64, intval[i], + intval[j], intval[i] - intval[j], d)); + } +} + +{ + U64 old_val, new_val; + old_val.low = 7; + old_val.high = 0; + new_val = old_val; + OK(netsnmp_c64_check_for_32bit_wrap(&old_val, &new_val, 0) == 0, "cwrap1"); + new_val.low = 8; + OK(netsnmp_c64_check_for_32bit_wrap(&old_val, &new_val, 0) == 0, "cwrap2"); + new_val.low = 6; + OK(netsnmp_c64_check_for_32bit_wrap(&old_val, &new_val, 0) == 32, "cwrap3"); + OK(netsnmp_c64_check_for_32bit_wrap(&old_val, &new_val, 1) == 32 + && new_val.low == 6 && new_val.high == 1, "cwrap4"); + old_val.low = 7; + old_val.high = 0xffffffffU; + new_val.low = 7; + new_val.high = old_val.high; + OK(netsnmp_c64_check_for_32bit_wrap(&old_val, &new_val, 0) == 0, "cwrap5"); + new_val.low = 8; + OK(netsnmp_c64_check_for_32bit_wrap(&old_val, &new_val, 0) == 0, "cwrap6"); + new_val.low = 6; + new_val.high = 0; + OK(netsnmp_c64_check_for_32bit_wrap(&old_val, &new_val, 0) == 64, "cwrap7"); +} |