/* 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"); }