Skip to content

IntFrom

Description

Convert a native integer into an arbitrary-precision integer. Dispatches on the type of value.

Aborts when a signed input is negative.

Parameters

Name Direction Description
value in Signed or unsigned integer source value

Usage example (from documentation)

  Int value = IntFrom(1234u);

Success

Returns Integer holding the same non-negative value.

Failure

LOG_FATAL when a signed value is negative (the non-negative IntFrom contract is violated). Allocator failures on the underlying construction abort through the allocator’s standard failure path.

Usage example (Cross-references)

Usage examples (Cross-references)
        Float value = FloatFromStr("12.5", &alloc.base);
        Float same  = FloatFromStr("12.5", &alloc.base);
        Int   whole = IntFrom(12, &alloc.base);
        Int   next  = IntFrom(13, &alloc.base);
        Float same  = FloatFromStr("12.5", &alloc.base);
        Int   whole = IntFrom(12, &alloc.base);
        Int   next  = IntFrom(13, &alloc.base);
    
        bool result = (FloatCompare(&value, &same) == 0);
    
        Float v   = FloatFromStr("3", &alloc.base);
        Int   i3  = IntFrom(3, &alloc.base);
        bool  err = true;
        bool  ok  = true;
    
        Float lhs  = FloatFromStr("7", &alloc.base);
        Int   less = IntFrom(3, &alloc.base);
        Int   same = IntFrom(7, &alloc.base);
        Int   more = IntFrom(9, &alloc.base);
        Float lhs  = FloatFromStr("7", &alloc.base);
        Int   less = IntFrom(3, &alloc.base);
        Int   same = IntFrom(7, &alloc.base);
        Int   more = IntFrom(9, &alloc.base);
        Int   less = IntFrom(3, &alloc.base);
        Int   same = IntFrom(7, &alloc.base);
        Int   more = IntFrom(9, &alloc.base);
    
        bool error = true;
        DebugAllocator dbg = DebugAllocatorInitWith(LEAK_CFG);
        Float          a   = FloatFromStr("3.5", &dbg.base);
        Int            b   = IntFrom(3, &dbg.base);
    
        int  cmp = FloatCompare(&a, &b);
        Float a            = FloatFromStr("1.25", &alloc.base);
        Float b            = FloatFromStr("0.75", &alloc.base);
        Int   whole        = IntFrom(2, &alloc.base);
        Float result_value = FloatInit(&alloc.base);
        Str   text         = StrInit(&alloc.base);
        Float a            = FloatFromStr("5.5", &alloc.base);
        Float b            = FloatFromStr("0.5", &alloc.base);
        Int   whole        = IntFrom(2, &alloc.base);
        Float result_value = FloatInit(&alloc.base);
        Str   text         = StrInit(&alloc.base);
        Float a            = FloatFromStr("1.5", &alloc.base);
        Float b            = FloatFromStr("2", &alloc.base);
        Int   whole        = IntFrom(2, &alloc.base);
        Float result_value = FloatInit(&alloc.base);
        Str   text         = StrInit(&alloc.base);
        Float a            = FloatFromStr("7.5", &alloc.base);
        Float b            = FloatFromStr("2.5", &alloc.base);
        Int   whole        = IntFrom(3, &alloc.base);
        Float result_value = FloatInit(&alloc.base);
        Str   text         = StrInit(&alloc.base);
        Float a      = FloatFromStr("6", &alloc.base);
        Float result = FloatInit(&alloc.base);
        Int   zero   = IntFrom(0u, &alloc.base);
    
        // Real float_div rejects division by zero -> false.
        Float          a   = FloatFromStr("1.5", &dbg.base);
        Float          r   = FloatInit(&dbg.base);
        Int            b   = IntFrom(2, &dbg.base);
    
        bool ok = FloatAdd(&r, &a, &b);
        Float          a   = FloatFromStr("5.5", &dbg.base);
        Float          r   = FloatInit(&dbg.base);
        Int            b   = IntFrom(2, &dbg.base);
    
        bool ok = FloatSub(&r, &a, &b);
        Float          a   = FloatFromStr("1.5", &dbg.base);
        Float          r   = FloatInit(&dbg.base);
        Int            b   = IntFrom(4, &dbg.base);
    
        bool ok = FloatMul(&r, &a, &b);
        Float          a   = FloatFromStr("1", &dbg.base);
        Float          r   = FloatInit(&dbg.base);
        Int            b   = IntFrom(4, &dbg.base);
    
        bool ok = FloatDiv(&r, &a, &b, 6u);
    
        Float value        = FloatFromStr("123.45", ALLOCATOR_OF(&alloc));
        Int   result_value = IntFrom(99, ALLOCATOR_OF(&alloc));
    
        bool result = !FloatToInt(&result_value, &value);
    
        Float value        = FloatFromStr("-42", ALLOCATOR_OF(&alloc));
        Int   result_value = IntFrom(99, ALLOCATOR_OF(&alloc));
    
        bool result = !FloatToInt(&result_value, &value);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int   whole = IntFrom(100, &alloc.base);
        Float value = FloatFrom(&whole, &alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int   whole = IntFrom(100, &alloc.base);
        Float value = FloatFrom(&whole, &alloc.base);
        Str   text  = FloatToStr(&value);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int   whole = IntFrom(2000, &alloc.base);
        Float value = FloatFrom(&whole, &alloc.base);
    
        Float v = FloatFromStr("12e4", &dbg.base); // significand 12, exp 4
        Int   r = IntFrom(999999999u, &dbg.base);  // pre-populated dest
    
        bool ok = FloatToInt(&r, &v);
    
        Float v = FloatFromStr("150e-1", &dbg.base); // 15.0, exact integer 15
        Int   r = IntFrom(777u, &dbg.base);          // pre-populated dest
    
        bool ok = FloatToInt(&r, &v);
    
        Float v = FloatFromStr("1.5", &dbg.base); // significand 15, exponent -1
        Int   r = IntFrom(777u, &dbg.base);       // pre-populated dest
    
        // Non-integer -> FloatToInt returns false, but the negative-exponent block
    
        Float v = FloatFrom(0u, &dbg.base);
        Int   r = IntFrom(424242u, &dbg.base); // pre-populated dest
    
        bool ok = FloatToInt(&r, &v);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int a = IntFrom(41, &alloc.base);
        Int b = IntFrom(42, &alloc.base);
        Int c = IntFromBinary("000101010", &alloc.base);
    
        Int a = IntFrom(41, &alloc.base);
        Int b = IntFrom(42, &alloc.base);
        Int c = IntFromBinary("000101010", &alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int a = IntFrom(41, &alloc.base);
        Int b = IntFrom(42, &alloc.base);
        Int c = IntFromBinary("000101010", &alloc.base);
    
        Int a = IntFrom(41, &alloc.base);
        Int b = IntFrom(42, &alloc.base);
        Int c = IntFromBinary("000101010", &alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(42, &alloc.base);
        Int same  = IntFromBinary("00101010", &alloc.base);
        Int big   = IntFrom(1, &alloc.base);
        Int value = IntFrom(42, &alloc.base);
        Int same  = IntFromBinary("00101010", &alloc.base);
        Int big   = IntFrom(1, &alloc.base);
    
        IntShiftLeft(&big, 80);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int a = IntFrom(42u, &alloc.base);
        Int b = IntFromBinary("101010", &alloc.base);
        Int c = IntFrom(0u, &alloc.base);
        Int a = IntFrom(42u, &alloc.base);
        Int b = IntFromBinary("101010", &alloc.base);
        Int c = IntFrom(0u, &alloc.base);
        Int d = IntFrom(0u, &alloc.base);
        Int b = IntFromBinary("101010", &alloc.base);
        Int c = IntFrom(0u, &alloc.base);
        Int d = IntFrom(0u, &alloc.base);
    
        bool result = (int_hash(&a, 0) == int_hash(&b, 0));
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int zero  = IntFrom(0u, &alloc.base);
        Int one   = IntFrom(1u, &alloc.base);
        Int small = IntFrom(42u, &alloc.base);
    
        Int zero  = IntFrom(0u, &alloc.base);
        Int one   = IntFrom(1u, &alloc.base);
        Int small = IntFrom(42u, &alloc.base);
        Int large = IntFrom(1u, &alloc.base);
        Int zero  = IntFrom(0u, &alloc.base);
        Int one   = IntFrom(1u, &alloc.base);
        Int small = IntFrom(42u, &alloc.base);
        Int large = IntFrom(1u, &alloc.base);
        IntShiftLeft(&large, 80);
        Int one   = IntFrom(1u, &alloc.base);
        Int small = IntFrom(42u, &alloc.base);
        Int large = IntFrom(1u, &alloc.base);
        IntShiftLeft(&large, 80);
        Int decimal = IntFromStr("12345678901234567890", &alloc.base);
        Map(Int, u64) counts = MapInit(int_hash, int_compare, &alloc);
    
        Int k1 = IntFrom(100u, &alloc.base);
        Int k2 = IntFrom(200u, &alloc.base);
        Int k3 = IntFrom(100u, &alloc.base); // duplicate of k1 by value
    
        Int k1 = IntFrom(100u, &alloc.base);
        Int k2 = IntFrom(200u, &alloc.base);
        Int k3 = IntFrom(100u, &alloc.base); // duplicate of k1 by value
        Int k1 = IntFrom(100u, &alloc.base);
        Int k2 = IntFrom(200u, &alloc.base);
        Int k3 = IntFrom(100u, &alloc.base); // duplicate of k1 by value
    
        MapInsertR(&counts, k1, 1u);
        MapInsertR(&counts, k2, 2u);
    
        Int  probe   = IntFrom(100u, &alloc.base);
        u64 *got     = MapGetFirstPtr(&counts, probe);
        Int  missing = IntFrom(999u, &alloc.base);
        Int  probe   = IntFrom(100u, &alloc.base);
        u64 *got     = MapGetFirstPtr(&counts, probe);
        Int  missing = IntFrom(999u, &alloc.base);
        u64 *gone    = MapGetFirstPtr(&counts, missing);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int lhs = IntFrom(0x8000000000000000u, &alloc.base);
    
        bool fail = (IntBitLength(&lhs) != 64); // sanity: exactly 64 bits.
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int lhs = IntFrom(7u, &alloc.base);
    
        bool fail = (IntCompare(&lhs, 9u) != -1);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int one = IntFrom(1, &alloc.base);
    
        bool result = (IntIsOne(&one) == true);
    
        /* A non-zero lhs vs rhs 0 must still report greater (positive). */
        Int five = IntFrom((u64)5u, &alloc.base);
        result   = result && (int_compare_i64(&five, (i64)0) > 0);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int a   = IntFrom(255, &alloc.base);
        Int b   = IntFrom(1, &alloc.base);
        Int sum = IntInit(&alloc.base);
    
        Int a   = IntFrom(255, &alloc.base);
        Int b   = IntFrom(1, &alloc.base);
        Int sum = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int v255 = IntFrom(255, &alloc.base);
    
        bool result = IntBitLength(&v255) == 8;
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(3, &alloc.base);
    
        IntShiftLeft(&value, 4);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int a            = IntFrom(255, &alloc.base);
        Int b            = IntFrom(1, &alloc.base);
        Int result_value = IntInit(&alloc.base);
    
        Int a            = IntFrom(255, &alloc.base);
        Int b            = IntFrom(1, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        Str text         = StrInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int base         = IntFrom(40, &alloc.base);
        Int rhs          = IntFrom(2, &alloc.base);
        Int result_value = IntInit(&alloc.base);
    
        Int base         = IntFrom(40, &alloc.base);
        Int rhs          = IntFrom(2, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        Int huge         = IntFromStr("123456789012345678901234567890", &alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int a            = IntFrom(256, &alloc.base);
        Int b            = IntFrom(1, &alloc.base);
        Int result_value = IntInit(&alloc.base);
    
        Int a            = IntFrom(256, &alloc.base);
        Int b            = IntFrom(1, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int base         = IntFrom(40, &alloc.base);
        Int rhs          = IntFrom(2, &alloc.base);
        Int result_value = IntInit(&alloc.base);
    
        Int base         = IntFrom(40, &alloc.base);
        Int rhs          = IntFrom(2, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        Int preserved    = IntFrom(99, &alloc.base);
        Int rhs          = IntFrom(2, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        Int preserved    = IntFrom(99, &alloc.base);
        Int huge         = IntFromStr("12345678901234567890", &alloc.base);
        Str text         = StrInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int a            = IntFrom(3, &alloc.base);
        Int b            = IntFrom(5, &alloc.base);
        Int result_value = IntFrom(99, &alloc.base);
    
        Int a            = IntFrom(3, &alloc.base);
        Int b            = IntFrom(5, &alloc.base);
        Int result_value = IntFrom(99, &alloc.base);
        Int a            = IntFrom(3, &alloc.base);
        Int b            = IntFrom(5, &alloc.base);
        Int result_value = IntFrom(99, &alloc.base);
    
        bool result = !IntSub(&result_value, &a, &b);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int a            = IntFrom(21, &alloc.base);
        Int b            = IntFrom(6, &alloc.base);
        Int result_value = IntInit(&alloc.base);
    
        Int a            = IntFrom(21, &alloc.base);
        Int b            = IntFrom(6, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int a            = IntFrom(0, &alloc.base);
        Int b            = IntFrom(12345, &alloc.base);
        Int result_value = IntInit(&alloc.base);
    
        Int a            = IntFrom(0, &alloc.base);
        Int b            = IntFrom(12345, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value        = IntFrom(12345, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int base         = IntFrom(7, &alloc.base);
        Int exponent     = IntFrom(20, &alloc.base);
        Int result_value = IntInit(&alloc.base);
    
        Int base         = IntFrom(7, &alloc.base);
        Int exponent     = IntFrom(20, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        Str text         = StrInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int dividend     = IntFrom(126, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int dividend     = IntFrom(10, &alloc.base);
        Int divisor      = IntFrom(3, &alloc.base);
        Int result_value = IntFrom(99, &alloc.base);
    
        Int dividend     = IntFrom(10, &alloc.base);
        Int divisor      = IntFrom(3, &alloc.base);
        Int result_value = IntFrom(99, &alloc.base);
        Int dividend     = IntFrom(10, &alloc.base);
        Int divisor      = IntFrom(3, &alloc.base);
        Int result_value = IntFrom(99, &alloc.base);
    
        bool result = !IntDivExact(&result_value, &dividend, &divisor);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int dividend     = IntFrom(126, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int a            = IntFrom(48, &alloc.base);
        Int b            = IntFrom(18, &alloc.base);
        Int result_value = IntInit(&alloc.base);
    
        Int a            = IntFrom(48, &alloc.base);
        Int b            = IntFrom(18, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int a            = IntFrom(21, &alloc.base);
        Int b            = IntFrom(6, &alloc.base);
        Int result_value = IntInit(&alloc.base);
    
        Int a            = IntFrom(21, &alloc.base);
        Int b            = IntFrom(6, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value        = IntFrom(4096, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value     = IntFrom(200, &alloc.base);
        Int root      = IntInit(&alloc.base);
        Int remainder = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value        = IntFrom(200, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value     = IntFrom(200, &alloc.base);
        Int root      = IntInit(&alloc.base);
        Int remainder = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int square     = IntFrom(144, &alloc.base);
        Int non_square = IntFrom(145, &alloc.base);
    
        Int square     = IntFrom(144, &alloc.base);
        Int non_square = IntFrom(145, &alloc.base);
    
        bool result = IntIsPerfectSquare(&square);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int power     = IntFrom(81, &alloc.base);
        Int non_power = IntFrom(82, &alloc.base);
        Int one       = IntFrom(1, &alloc.base);
    
        Int power     = IntFrom(81, &alloc.base);
        Int non_power = IntFrom(82, &alloc.base);
        Int one       = IntFrom(1, &alloc.base);
        Int power     = IntFrom(81, &alloc.base);
        Int non_power = IntFrom(82, &alloc.base);
        Int one       = IntFrom(1, &alloc.base);
    
        bool result = IntIsPerfectPower(&power);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int a = IntFrom(5, &alloc.base);
        Int p = IntFrom(7, &alloc.base);
        Int b = IntFrom(9, &alloc.base);
    
        Int a = IntFrom(5, &alloc.base);
        Int p = IntFrom(7, &alloc.base);
        Int b = IntFrom(9, &alloc.base);
        Int n = IntFrom(21, &alloc.base);
        Int a = IntFrom(5, &alloc.base);
        Int p = IntFrom(7, &alloc.base);
        Int b = IntFrom(9, &alloc.base);
        Int n = IntFrom(21, &alloc.base);
        Int p = IntFrom(7, &alloc.base);
        Int b = IntFrom(9, &alloc.base);
        Int n = IntFrom(21, &alloc.base);
    
        bool result = IntJacobi(&a, &p) == -1;
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value        = IntFrom(12345, &alloc.base);
        Int mod          = IntFrom(97, &alloc.base);
        Int result_value = IntInit(&alloc.base);
    
        Int value        = IntFrom(12345, &alloc.base);
        Int mod          = IntFrom(97, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int a            = IntFrom(100, &alloc.base);
        Int b            = IntFrom(250, &alloc.base);
        Int m            = IntFrom(13, &alloc.base);
    
        Int a            = IntFrom(100, &alloc.base);
        Int b            = IntFrom(250, &alloc.base);
        Int m            = IntFrom(13, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        Int a            = IntFrom(100, &alloc.base);
        Int b            = IntFrom(250, &alloc.base);
        Int m            = IntFrom(13, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int a            = IntFrom(5, &alloc.base);
        Int b            = IntFrom(9, &alloc.base);
        Int m            = IntFrom(13, &alloc.base);
    
        Int a            = IntFrom(5, &alloc.base);
        Int b            = IntFrom(9, &alloc.base);
        Int m            = IntFrom(13, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        Int a            = IntFrom(5, &alloc.base);
        Int b            = IntFrom(9, &alloc.base);
        Int m            = IntFrom(13, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int a            = IntFrom(123, &alloc.base);
        Int b            = IntFrom(456, &alloc.base);
        Int m            = IntFrom(97, &alloc.base);
    
        Int a            = IntFrom(123, &alloc.base);
        Int b            = IntFrom(456, &alloc.base);
        Int m            = IntFrom(97, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        Int a            = IntFrom(123, &alloc.base);
        Int b            = IntFrom(456, &alloc.base);
        Int m            = IntFrom(97, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int a            = IntFrom(10, &alloc.base);
        Int b            = IntFrom(3, &alloc.base);
        Int m            = IntFrom(13, &alloc.base);
    
        Int a            = IntFrom(10, &alloc.base);
        Int b            = IntFrom(3, &alloc.base);
        Int m            = IntFrom(13, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        Int a            = IntFrom(10, &alloc.base);
        Int b            = IntFrom(3, &alloc.base);
        Int m            = IntFrom(13, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        Int check        = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int base         = IntFrom(7, &alloc.base);
        Int mod          = IntFrom(13, &alloc.base);
        Int result_value = IntInit(&alloc.base);
    
        Int base         = IntFrom(7, &alloc.base);
        Int mod          = IntFrom(13, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int base         = IntFrom(4, &alloc.base);
        Int exp          = IntFrom(13, &alloc.base);
        Int mod          = IntFrom(497, &alloc.base);
    
        Int base         = IntFrom(4, &alloc.base);
        Int exp          = IntFrom(13, &alloc.base);
        Int mod          = IntFrom(497, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        Int base         = IntFrom(4, &alloc.base);
        Int exp          = IntFrom(13, &alloc.base);
        Int mod          = IntFrom(497, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value        = IntFrom(3, &alloc.base);
        Int mod          = IntFrom(11, &alloc.base);
        Int result_value = IntInit(&alloc.base);
    
        Int value        = IntFrom(3, &alloc.base);
        Int mod          = IntFrom(11, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        Int check        = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(10, &alloc.base);
        Int mod   = IntFrom(13, &alloc.base);
        Int root  = IntInit(&alloc.base);
    
        Int value = IntFrom(10, &alloc.base);
        Int mod   = IntFrom(13, &alloc.base);
        Int root  = IntInit(&alloc.base);
        Int check = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(3, &alloc.base);
        Int mod   = IntFrom(7, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
    
        Int value = IntFrom(3, &alloc.base);
        Int mod   = IntFrom(7, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
        Int value = IntFrom(3, &alloc.base);
        Int mod   = IntFrom(7, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
    
        bool result = !IntModSqrt(&root, &value, &mod);
    
        Int prime     = IntFromStr("1000000007", &alloc.base);
        Int composite = IntFrom(561, &alloc.base);
    
        bool result = IntIsProbablePrime(&prime);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value        = IntFrom(6, &alloc.base);
        Int mod          = IntFrom(15, &alloc.base);
        Int result_value = IntFrom(99, &alloc.base);
    
        Int value        = IntFrom(6, &alloc.base);
        Int mod          = IntFrom(15, &alloc.base);
        Int result_value = IntFrom(99, &alloc.base);
        Int value        = IntFrom(6, &alloc.base);
        Int mod          = IntFrom(15, &alloc.base);
        Int result_value = IntFrom(99, &alloc.base);
    
        bool result = !IntModInv(&result_value, &value, &mod);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int a            = IntFrom(1, &alloc.base);
        Int b            = IntFrom(6, &alloc.base);
        Int m            = IntFrom(15, &alloc.base);
    
        Int a            = IntFrom(1, &alloc.base);
        Int b            = IntFrom(6, &alloc.base);
        Int m            = IntFrom(15, &alloc.base);
        Int result_value = IntFrom(99, &alloc.base);
        Int a            = IntFrom(1, &alloc.base);
        Int b            = IntFrom(6, &alloc.base);
        Int m            = IntFrom(15, &alloc.base);
        Int result_value = IntFrom(99, &alloc.base);
        Int b            = IntFrom(6, &alloc.base);
        Int m            = IntFrom(15, &alloc.base);
        Int result_value = IntFrom(99, &alloc.base);
    
        bool result = !IntModDiv(&result_value, &a, &b, &m);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int a = IntFrom(1, &alloc.base);
        Int b = IntFrom(2, &alloc.base);
    
        Int a = IntFrom(1, &alloc.base);
        Int b = IntFrom(2, &alloc.base);
    
        IntAdd(NULL, &a, &b);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int dividend  = IntFrom(1, &alloc.base);
        Int divisor   = IntInit(&alloc.base);
        Int quotient  = IntFrom(99, &alloc.base);
        Int dividend  = IntFrom(1, &alloc.base);
        Int divisor   = IntInit(&alloc.base);
        Int quotient  = IntFrom(99, &alloc.base);
        Int remainder = IntFrom(77, &alloc.base);
        Int divisor   = IntInit(&alloc.base);
        Int quotient  = IntFrom(99, &alloc.base);
        Int remainder = IntFrom(77, &alloc.base);
    
        bool result = !IntDivMod(&quotient, &remainder, &dividend, &divisor);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int  value     = IntFrom(16, &alloc.base);
        Int  root      = IntFrom(99, &alloc.base);
        Int  remainder = IntFrom(77, &alloc.base);
    
        Int  value     = IntFrom(16, &alloc.base);
        Int  root      = IntFrom(99, &alloc.base);
        Int  remainder = IntFrom(77, &alloc.base);
        bool result    = !IntRootRem(&root, &remainder, &value, 0);
        Int  value     = IntFrom(16, &alloc.base);
        Int  root      = IntFrom(99, &alloc.base);
        Int  remainder = IntFrom(77, &alloc.base);
        bool result    = !IntRootRem(&root, &remainder, &value, 0);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int dividend = IntFrom(10, &alloc.base);
        Int quotient = IntFrom(99, &alloc.base);
    
        Int dividend = IntFrom(10, &alloc.base);
        Int quotient = IntFrom(99, &alloc.base);
    
        IntDiv(&quotient, &dividend, 0u);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value        = IntFrom(10, &alloc.base);
        Int result_value = IntFrom(99, &alloc.base);
    
        Int value        = IntFrom(10, &alloc.base);
        Int result_value = IntFrom(99, &alloc.base);
    
        IntMod(&result_value, &value, 0u);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int a            = IntFrom(10, &alloc.base);
        Int b            = IntFrom(3, &alloc.base);
        Int m            = IntInit(&alloc.base);
    
        Int a            = IntFrom(10, &alloc.base);
        Int b            = IntFrom(3, &alloc.base);
        Int m            = IntInit(&alloc.base);
        Int result_value = IntFrom(99, &alloc.base);
        Int b            = IntFrom(3, &alloc.base);
        Int m            = IntInit(&alloc.base);
        Int result_value = IntFrom(99, &alloc.base);
    
        bool result = !IntModDiv(&result_value, &a, &b, &m);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int  a      = IntFrom(3, &alloc.base);
        Int  n      = IntFrom(8, &alloc.base);
        int  symbol = 99;
    
        Int  a      = IntFrom(3, &alloc.base);
        Int  n      = IntFrom(8, &alloc.base);
        int  symbol = 99;
        bool error  = false;
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int base         = IntFrom(2, &alloc.base);
        Int mod          = IntInit(&alloc.base);
        Int result_value = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int base         = IntFrom(2, &alloc.base);
        Int exp          = IntFrom(8, &alloc.base);
        Int mod          = IntInit(&alloc.base);
    
        Int base         = IntFrom(2, &alloc.base);
        Int exp          = IntFrom(8, &alloc.base);
        Int mod          = IntInit(&alloc.base);
        Int result_value = IntFrom(99, &alloc.base);
        Int exp          = IntFrom(8, &alloc.base);
        Int mod          = IntInit(&alloc.base);
        Int result_value = IntFrom(99, &alloc.base);
    
        bool result = !IntPowMod(&result_value, &base, &exp, &mod);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(2, &alloc.base);
        Int mod   = IntFrom(7, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
    
        Int value = IntFrom(2, &alloc.base);
        Int mod   = IntFrom(7, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
        Int check = IntInit(&alloc.base);
        Int value = IntFrom(2, &alloc.base);
        Int mod   = IntFrom(7, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
        Int check = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(3, &alloc.base);
        Int mod   = IntFrom(7, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
    
        Int value = IntFrom(3, &alloc.base);
        Int mod   = IntFrom(7, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
        Int value = IntFrom(3, &alloc.base);
        Int mod   = IntFrom(7, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
    
        bool result = !IntModSqrt(&root, &value, &mod);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(2, &alloc.base);
        Int mod   = IntFrom(17, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
    
        Int value = IntFrom(2, &alloc.base);
        Int mod   = IntFrom(17, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
        Int check = IntInit(&alloc.base);
        Int value = IntFrom(2, &alloc.base);
        Int mod   = IntFrom(17, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
        Int check = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(4, &alloc.base);
        Int mod   = IntFrom(17, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
    
        Int value = IntFrom(4, &alloc.base);
        Int mod   = IntFrom(17, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
        Int check = IntInit(&alloc.base);
        Int value = IntFrom(4, &alloc.base);
        Int mod   = IntFrom(17, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
        Int check = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(3, &alloc.base);
        Int mod   = IntFrom(97, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
    
        Int value = IntFrom(3, &alloc.base);
        Int mod   = IntFrom(97, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
        Int check = IntInit(&alloc.base);
        Int value = IntFrom(3, &alloc.base);
        Int mod   = IntFrom(97, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
        Int check = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(2, &alloc.base);
        Int mod   = IntFrom(257, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
    
        Int value = IntFrom(2, &alloc.base);
        Int mod   = IntFrom(257, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
        Int check = IntInit(&alloc.base);
        Int value = IntFrom(2, &alloc.base);
        Int mod   = IntFrom(257, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
        Int check = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(10, &alloc.base);
        Int mod   = IntFrom(13, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
    
        Int value = IntFrom(10, &alloc.base);
        Int mod   = IntFrom(13, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
        Int check = IntInit(&alloc.base);
        Int value = IntFrom(10, &alloc.base);
        Int mod   = IntFrom(13, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
        Int check = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(2, &alloc.base);
        Int mod   = IntFrom(13, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
    
        Int value = IntFrom(2, &alloc.base);
        Int mod   = IntFrom(13, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
        Int value = IntFrom(2, &alloc.base);
        Int mod   = IntFrom(13, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
    
        bool result = !IntModSqrt(&root, &value, &mod);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(0, &alloc.base);
        Int mod   = IntFrom(7, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
    
        Int value = IntFrom(0, &alloc.base);
        Int mod   = IntFrom(7, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
        Int value = IntFrom(0, &alloc.base);
        Int mod   = IntFrom(7, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
    
        bool result = IntModSqrt(&root, &value, &mod);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(21, &alloc.base);
        Int mod   = IntFrom(7, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
    
        Int value = IntFrom(21, &alloc.base);
        Int mod   = IntFrom(7, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
        Int value = IntFrom(21, &alloc.base);
        Int mod   = IntFrom(7, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
    
        bool result = IntModSqrt(&root, &value, &mod);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(5, &alloc.base);
        Int mod   = IntFrom(2, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
    
        Int value = IntFrom(5, &alloc.base);
        Int mod   = IntFrom(2, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
        Int value = IntFrom(5, &alloc.base);
        Int mod   = IntFrom(2, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
    
        bool result = IntModSqrt(&root, &value, &mod);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(1, &alloc.base);
        Int mod   = IntFrom(8, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
    
        Int value = IntFrom(1, &alloc.base);
        Int mod   = IntFrom(8, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
        Int value = IntFrom(1, &alloc.base);
        Int mod   = IntFrom(8, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
    
        bool result = !IntModSqrt(&root, &value, &mod);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(4, &alloc.base);
        Int mod   = IntFrom(9, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
    
        Int value = IntFrom(4, &alloc.base);
        Int mod   = IntFrom(9, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
        Int value = IntFrom(4, &alloc.base);
        Int mod   = IntFrom(9, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
    
        bool result = !IntModSqrt(&root, &value, &mod);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(4, &alloc.base);
        Int mod   = IntInit(&alloc.base);
        Int root  = IntFrom(99, &alloc.base);
        Int value = IntFrom(4, &alloc.base);
        Int mod   = IntInit(&alloc.base);
        Int root  = IntFrom(99, &alloc.base);
    
        bool result = !IntModSqrt(&root, &value, &mod);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(23, &alloc.base);
        Int mod   = IntFrom(7, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
    
        Int value = IntFrom(23, &alloc.base);
        Int mod   = IntFrom(7, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
        Int check = IntInit(&alloc.base);
        Int value = IntFrom(23, &alloc.base);
        Int mod   = IntFrom(7, &alloc.base);
        Int root  = IntFrom(99, &alloc.base);
        Int check = IntInit(&alloc.base);
    
        /* 123456789 * 987654321 = 121932631112635269 */
        Int a       = IntFrom((u64)123456789u, &alloc.base);
        Int b       = IntFrom((u64)987654321u, &alloc.base);
        Int product = IntInit(&alloc.base);
        /* 123456789 * 987654321 = 121932631112635269 */
        Int a       = IntFrom((u64)123456789u, &alloc.base);
        Int b       = IntFrom((u64)987654321u, &alloc.base);
        Int product = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int a       = IntFrom((u64)999u, &alloc.base);
        Int zero    = IntInit(&alloc.base);
        Int product = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int a = IntFrom((u64)2u, &alloc.base);
        Int b = IntFrom((u64)3u, &alloc.base);
    
        Int a = IntFrom((u64)2u, &alloc.base);
        Int b = IntFrom((u64)3u, &alloc.base);
    
        IntMul(NULL, &a, &b);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int base   = IntFrom(7, &alloc.base);
        Int result = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int a = IntFrom(12, &alloc.base);
        Int b = IntFrom(8, &alloc.base);
    
        Int a = IntFrom(12, &alloc.base);
        Int b = IntFrom(8, &alloc.base);
    
        IntGCD(NULL, &a, &b);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int b      = IntFrom(8, &alloc.base);
        Int result = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int a      = IntFrom(12, &alloc.base);
        Int result = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int a = IntFrom(7, &alloc.base);
        Int b = IntFrom(3, &alloc.base);
        Int m = IntFrom(11, &alloc.base);
    
        Int a = IntFrom(7, &alloc.base);
        Int b = IntFrom(3, &alloc.base);
        Int m = IntFrom(11, &alloc.base);
        Int a = IntFrom(7, &alloc.base);
        Int b = IntFrom(3, &alloc.base);
        Int m = IntFrom(11, &alloc.base);
    
        IntModAdd(NULL, &a, &b, &m);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int a   = IntFrom(3, &alloc.base);
        Int b   = IntFrom(5, &alloc.base);
        Int mod = IntFrom(7, &alloc.base);
    
        Int a   = IntFrom(3, &alloc.base);
        Int b   = IntFrom(5, &alloc.base);
        Int mod = IntFrom(7, &alloc.base);
        Int a   = IntFrom(3, &alloc.base);
        Int b   = IntFrom(5, &alloc.base);
        Int mod = IntFrom(7, &alloc.base);
    
        IntModMul(NULL, &a, &b, &mod);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int a            = IntFrom(4, &alloc.base);
        Int b            = IntFrom(1, &alloc.base);
        Int result_value = IntInit(&alloc.base);
    
        Int a            = IntFrom(4, &alloc.base);
        Int b            = IntFrom(1, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int a = IntFrom(9, &alloc.base);
        Int b = IntFrom(2, &alloc.base);
    
        Int a = IntFrom(9, &alloc.base);
        Int b = IntFrom(2, &alloc.base);
    
        int_sub(NULL, &a, &b);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int dividend = IntFrom(100, &alloc.base);
    
        int_div_u64_rem(NULL, &dividend, 7);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int a            = IntFrom(0, &alloc.base);
        Int b            = IntFrom(5, &alloc.base);
        Int result_value = IntFrom(99, &alloc.base);
    
        Int a            = IntFrom(0, &alloc.base);
        Int b            = IntFrom(5, &alloc.base);
        Int result_value = IntFrom(99, &alloc.base);
        Int a            = IntFrom(0, &alloc.base);
        Int b            = IntFrom(5, &alloc.base);
        Int result_value = IntFrom(99, &alloc.base);
    
        bool result = IntLCM(&result_value, &a, &b);
        // 32 = 2^5: only perfect-power exponent in [2, max_degree] is the boundary
        // value max_degree itself, so it distinguishes `<=` from `<`.
        Int boundary = IntFrom(32, &alloc.base);
        // 64 = 2^6 = 8^2 = 4^3 = 2^6: a perfect square found at degree 2, used as a
        // sanity anchor so the test also exercises the common early-hit path.
        // 64 = 2^6 = 8^2 = 4^3 = 2^6: a perfect square found at degree 2, used as a
        // sanity anchor so the test also exercises the common early-hit path.
        Int square_anchor = IntFrom(64, &alloc.base);
    
        bool result = IntIsPerfectPower(&boundary);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int dividend = IntFrom(12, &alloc.base);
        Int divisor  = IntFrom(4, &alloc.base);
    
        Int dividend = IntFrom(12, &alloc.base);
        Int divisor  = IntFrom(4, &alloc.base);
    
        IntDivExact(NULL, &dividend, &divisor);
    
        Int ones = IntFromBinary("1111111", &alloc.base); // 127
        Int one  = IntFrom(1u, &alloc.base);
        Int sum  = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value     = IntFrom(0, &alloc.base);
        Int root      = IntFrom(99, &alloc.base);
        Int remainder = IntFrom(77, &alloc.base);
    
        Int value     = IntFrom(0, &alloc.base);
        Int root      = IntFrom(99, &alloc.base);
        Int remainder = IntFrom(77, &alloc.base);
        Int value     = IntFrom(0, &alloc.base);
        Int root      = IntFrom(99, &alloc.base);
        Int remainder = IntFrom(77, &alloc.base);
    
        bool ok     = IntRootRem(&root, &remainder, &value, 3);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value     = IntFrom(10000, &alloc.base);
        Int root      = IntInit(&alloc.base);
        Int remainder = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value     = IntFrom(1000, &alloc.base);
        Int root      = IntInit(&alloc.base);
        Int remainder = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value     = IntFrom(1001, &alloc.base);
        Int root      = IntInit(&alloc.base);
        Int remainder = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value     = IntFrom(999, &alloc.base);
        Int root      = IntInit(&alloc.base);
        Int remainder = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value     = IntFrom(1000000, &alloc.base);
        Int root      = IntInit(&alloc.base);
        Int remainder = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int base  = IntFrom(7, &alloc.base);
        Int exp   = IntFrom(5, &alloc.base);
        Int power = IntInit(&alloc.base);
    
        Int base  = IntFrom(7, &alloc.base);
        Int exp   = IntFrom(5, &alloc.base);
        Int power = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int base = IntFrom(2, &alloc.base);
        // 2**64 == 18446744073709551616 -> bit length 65, does not fit u64.
        Int exp      = IntFromStr("18446744073709551616", &alloc.base);
        // 2**64 == 18446744073709551616 -> bit length 65, does not fit u64.
        Int exp      = IntFromStr("18446744073709551616", &alloc.base);
        Int power    = IntFrom(123, &alloc.base);
        Int sentinel = IntFrom(123, &alloc.base);
        Int exp      = IntFromStr("18446744073709551616", &alloc.base);
        Int power    = IntFrom(123, &alloc.base);
        Int sentinel = IntFrom(123, &alloc.base);
    
        bool rejected = !IntPow(&power, &base, &exp);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int dividend = IntFrom(1000, &alloc.base);
        Int quotient = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int dividend = IntFrom(1000, &alloc.base);
        Int quotient = IntFrom(55, &alloc.base);
    
        Int dividend = IntFrom(1000, &alloc.base);
        Int quotient = IntFrom(55, &alloc.base);
    
        bool failed = !IntDiv(&quotient, &dividend, (i64)-7);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int dividend = IntFrom(1001, &alloc.base);
        Int quotient = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int dividend = IntFrom(1001, &alloc.base);
        Int quotient = IntFrom(55, &alloc.base);
    
        Int dividend = IntFrom(1001, &alloc.base);
        Int quotient = IntFrom(55, &alloc.base);
    
        bool failed = !IntDivExact(&quotient, &dividend, (i64)-7);
    // ---------------------------------------------------------------------------
    bool test_m24_from_u64_roundtrip(void) {
        WriteFmt("Testing IntFrom(5u) round-trip and bit length\n");
    
        DefaultAllocator alloc = DefaultAllocatorInit();
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(5u, &alloc.base);
    
        bool fail = (IntCompare(&value, 5u) != 0);
    // stored value or trips the allocation guard).
    bool test_m24_from_u64_value_one(void) {
        WriteFmt("Testing IntFrom(1u) round-trip\n");
    
        DefaultAllocator alloc = DefaultAllocatorInit();
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(1u, &alloc.base);
    
        bool fail = (IntCompare(&value, 1u) != 0);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value        = IntFrom(7, &alloc.base);
        Int result_value = IntFrom(99, &alloc.base);
    
        Int value        = IntFrom(7, &alloc.base);
        Int result_value = IntFrom(99, &alloc.base);
    
        /* Signed literal forces int_mul_i64 dispatch. */
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value        = IntFrom(123, &alloc.base);
        Int result_value = IntFrom(99, &alloc.base);
    
        Int value        = IntFrom(123, &alloc.base);
        Int result_value = IntFrom(99, &alloc.base);
    
        bool ok     = IntMul(&result_value, &value, (i64)0);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int base         = IntFrom(3, &alloc.base);
        Int result_value = IntFrom(99, &alloc.base);
    
        Int base         = IntFrom(3, &alloc.base);
        Int result_value = IntFrom(99, &alloc.base);
    
        bool ok     = IntPow(&result_value, &base, (i64)4);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int base         = IntFrom(7, &alloc.base);
        Int result_value = IntFrom(99, &alloc.base);
    
        Int base         = IntFrom(7, &alloc.base);
        Int result_value = IntFrom(99, &alloc.base);
    
        bool ok     = IntPow(&result_value, &base, (i64)0);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int dividend     = IntFrom(100, &alloc.base);
        Int result_value = IntFrom(99, &alloc.base);
    
        Int dividend     = IntFrom(100, &alloc.base);
        Int result_value = IntFrom(99, &alloc.base);
    
        /* Unsigned literal forces int_div_u64 dispatch. */
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int dividend     = IntFrom(123456789, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int base         = IntFrom(7, &alloc.base);
        Int modulus      = IntFrom(1000000007, &alloc.base);
        Int result_value = IntInit(&alloc.base);
    
        Int base         = IntFrom(7, &alloc.base);
        Int modulus      = IntFrom(1000000007, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int base         = IntFrom(7, &alloc.base);
        Int modulus      = IntFrom(1000000007, &alloc.base);
        Int result_value = IntInit(&alloc.base);
    
        Int base         = IntFrom(7, &alloc.base);
        Int modulus      = IntFrom(1000000007, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value        = IntFrom(4096, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int dividend = IntFrom((u64)100u, &alloc.base);
        Int result   = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int a      = IntFrom(2, &alloc.base);
        Int n_odd  = IntFrom(7, &alloc.base);
        Int n_even = IntFrom(8, &alloc.base);
    
        Int a      = IntFrom(2, &alloc.base);
        Int n_odd  = IntFrom(7, &alloc.base);
        Int n_even = IntFrom(8, &alloc.base);
        Int a      = IntFrom(2, &alloc.base);
        Int n_odd  = IntFrom(7, &alloc.base);
        Int n_even = IntFrom(8, &alloc.base);
    
        bool err_ok  = true;
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value  = IntFrom(3, &alloc.base);
        Int mod    = IntFrom(11, &alloc.base);
        Int result = IntInit(&alloc.base);
    
        Int value  = IntFrom(3, &alloc.base);
        Int mod    = IntFrom(11, &alloc.base);
        Int result = IntInit(&alloc.base);
        Int check  = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value  = IntFrom(5, &alloc.base);
        Int mod    = IntFrom(11, &alloc.base);
        Int result = IntInit(&alloc.base);
    
        Int value  = IntFrom(5, &alloc.base);
        Int mod    = IntFrom(11, &alloc.base);
        Int result = IntInit(&alloc.base);
        Int check  = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int dividend = IntFrom(10, &alloc.base);
        Int quotient = IntFrom(99, &alloc.base);
    
        Int dividend = IntFrom(10, &alloc.base);
        Int quotient = IntFrom(99, &alloc.base);
    
        bool ok     = IntDiv(&quotient, &dividend, 0u);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int dividend = IntFrom(10, &alloc.base);
        Int quotient = IntFrom(99, &alloc.base);
    
        Int dividend = IntFrom(10, &alloc.base);
        Int quotient = IntFrom(99, &alloc.base);
    
        bool ok     = IntDiv(&quotient, &dividend, (i64)0);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int dividend = IntFrom(127, &alloc.base);
        Int quotient = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int dividend = IntFrom(127, &alloc.base);
        Int quotient = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int dividend  = IntFrom(127, &alloc.base);
        Int quotient  = IntInit(&alloc.base);
        Int remainder = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int dividend  = IntFrom(127, &alloc.base);
        Int quotient  = IntInit(&alloc.base);
        Int remainder = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int dividend     = IntFrom(127, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int dividend     = IntFrom(127, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(1, &alloc.base);
        IntShiftLeft(&value, 50); // 2^50
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int a = IntFrom(3, &alloc.base);
        Int n = IntFrom(7, &alloc.base);
    
        Int a = IntFrom(3, &alloc.base);
        Int n = IntFrom(7, &alloc.base);
    
        int  symbol = 99;
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(2, &alloc.base);
        Int mod   = IntFrom(17, &alloc.base);
        Int root  = IntInit(&alloc.base);
    
        Int value = IntFrom(2, &alloc.base);
        Int mod   = IntFrom(17, &alloc.base);
        Int root  = IntInit(&alloc.base);
        Int check = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(1, &alloc.base);
    
        bool result = !IntIsProbablePrime(&value);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(2, &alloc.base);
    
        bool result = IntIsProbablePrime(&value);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(4, &alloc.base);
    
        bool result = !IntIsProbablePrime(&value);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(3, &alloc.base);
    
        bool result = IntIsProbablePrime(&value);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(97, &alloc.base);
    
        bool result = IntIsProbablePrime(&value);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(561, &alloc.base);
    
        bool result = !IntIsProbablePrime(&value);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(1763, &alloc.base);
    
        bool result = !IntIsProbablePrime(&value);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int  value = IntFrom(97, &alloc.base);
        bool error = true;
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int base         = IntFrom(7, &alloc.base);
        Int exp          = IntFrom(0, &alloc.base);
        Int mod          = IntFrom(1, &alloc.base);
    
        Int base         = IntFrom(7, &alloc.base);
        Int exp          = IntFrom(0, &alloc.base);
        Int mod          = IntFrom(1, &alloc.base);
        Int result_value = IntFrom(99, &alloc.base);
        Int base         = IntFrom(7, &alloc.base);
        Int exp          = IntFrom(0, &alloc.base);
        Int mod          = IntFrom(1, &alloc.base);
        Int result_value = IntFrom(99, &alloc.base);
        Int exp          = IntFrom(0, &alloc.base);
        Int mod          = IntFrom(1, &alloc.base);
        Int result_value = IntFrom(99, &alloc.base);
    
        bool ok = int_pow_mod(&result_value, &base, &exp, &mod);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int base         = IntFrom(123456, &alloc.base);
        Int exp          = IntFrom(11, &alloc.base);
        Int mod          = IntFrom(1, &alloc.base);
    
        Int base         = IntFrom(123456, &alloc.base);
        Int exp          = IntFrom(11, &alloc.base);
        Int mod          = IntFrom(1, &alloc.base);
        Int result_value = IntFrom(42, &alloc.base);
        Int base         = IntFrom(123456, &alloc.base);
        Int exp          = IntFrom(11, &alloc.base);
        Int mod          = IntFrom(1, &alloc.base);
        Int result_value = IntFrom(42, &alloc.base);
        Int exp          = IntFrom(11, &alloc.base);
        Int mod          = IntFrom(1, &alloc.base);
        Int result_value = IntFrom(42, &alloc.base);
    
        bool ok = int_pow_mod(&result_value, &base, &exp, &mod);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int base         = IntFrom(3, &alloc.base);
        Int exp          = IntFrom(13, &alloc.base);
        Int mod          = IntFrom(497, &alloc.base);
    
        Int base         = IntFrom(3, &alloc.base);
        Int exp          = IntFrom(13, &alloc.base);
        Int mod          = IntFrom(497, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        Int base         = IntFrom(3, &alloc.base);
        Int exp          = IntFrom(13, &alloc.base);
        Int mod          = IntFrom(497, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        DebugAllocator dbg = DebugAllocatorInit();
    
        Int base         = IntFrom(123456789u, &dbg.base);
        Int exp          = IntFrom(987654321u, &dbg.base); // many set bits + bits
        Int mod          = IntFrom(1000000007u, &dbg.base);
    
        Int base         = IntFrom(123456789u, &dbg.base);
        Int exp          = IntFrom(987654321u, &dbg.base); // many set bits + bits
        Int mod          = IntFrom(1000000007u, &dbg.base);
        Int result_value = IntInit(&dbg.base);
        Int base         = IntFrom(123456789u, &dbg.base);
        Int exp          = IntFrom(987654321u, &dbg.base); // many set bits + bits
        Int mod          = IntFrom(1000000007u, &dbg.base);
        Int result_value = IntInit(&dbg.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(0, &alloc.base);
        Int next  = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(10, &alloc.base);
        Int next  = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(9, &alloc.base);
        Int next  = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(10, &alloc.base);
    
        (void)IntNextPrime(NULL, &value);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int a            = IntFrom(9, &alloc.base);
        Int b            = IntFrom(5, &alloc.base);
        Int m            = IntFrom(13, &alloc.base);
    
        Int a            = IntFrom(9, &alloc.base);
        Int b            = IntFrom(5, &alloc.base);
        Int m            = IntFrom(13, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        Int a            = IntFrom(9, &alloc.base);
        Int b            = IntFrom(5, &alloc.base);
        Int m            = IntFrom(13, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int a = IntFrom(7, &alloc.base);
        Int b = IntFrom(3, &alloc.base);
        Int m = IntFrom(11, &alloc.base);
    
        Int a = IntFrom(7, &alloc.base);
        Int b = IntFrom(3, &alloc.base);
        Int m = IntFrom(11, &alloc.base);
        Int a = IntFrom(7, &alloc.base);
        Int b = IntFrom(3, &alloc.base);
        Int m = IntFrom(11, &alloc.base);
    
        IntModSub(NULL, &a, &b, &m);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int base         = IntFrom(3, &alloc.base);
        Int mod          = IntFrom(17, &alloc.base);
        Int result_value = IntInit(&alloc.base);
    
        Int base         = IntFrom(3, &alloc.base);
        Int mod          = IntFrom(17, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int base         = IntFrom(123456789, &alloc.base);
        Int mod          = IntFrom(1000000007, &alloc.base);
        Int result_value = IntInit(&alloc.base);
    
        Int base         = IntFrom(123456789, &alloc.base);
        Int mod          = IntFrom(1000000007, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int base         = IntFrom(2, &alloc.base);
        Int mod          = IntFrom(1000000007, &alloc.base);
        Int result_value = IntInit(&alloc.base);
    
        Int base         = IntFrom(2, &alloc.base);
        Int mod          = IntFrom(1000000007, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int base = IntFrom(2, &alloc.base);
        Int mod  = IntFrom(7, &alloc.base);
    
        Int base = IntFrom(2, &alloc.base);
        Int mod  = IntFrom(7, &alloc.base);
    
        IntPowMod((Int *)NULL, &base, 5u, &mod);
    
        Int result_value = IntInit(&alloc.base);
        Int mod          = IntFrom(7, &alloc.base);
    
        IntPowMod(&result_value, (Int *)NULL, 5u, &mod);
    
        Int result_value = IntInit(&alloc.base);
        Int base         = IntFrom(2, &alloc.base);
    
        IntPowMod(&result_value, &base, 5u, (Int *)NULL);
        Allocator     *a   = ALLOCATOR_OF(&dbg);
    
        Int x = IntFrom(123456u, a);
        Int y = IntFrom(7891011u, a);
        Int r = IntInit(a);
    
        Int x = IntFrom(123456u, a);
        Int y = IntFrom(7891011u, a);
        Int r = IntInit(a);
        Allocator     *a   = ALLOCATOR_OF(&dbg);
    
        Int x = IntFrom(0u, a);
        Int y = IntFrom(7891011u, a);
        Int r = IntFrom(42u, a); // r starts non-empty so the internal deinit matters
    
        Int x = IntFrom(0u, a);
        Int y = IntFrom(7891011u, a);
        Int r = IntFrom(42u, a); // r starts non-empty so the internal deinit matters
        Int x = IntFrom(0u, a);
        Int y = IntFrom(7891011u, a);
        Int r = IntFrom(42u, a); // r starts non-empty so the internal deinit matters
    
        bool ok = IntMul(&r, &x, &y);
        Allocator     *a   = ALLOCATOR_OF(&dbg);
    
        Int x = IntFrom(0xFFFFFFFFull, a);
        Int y = IntFrom(0xFFFFFFFFull, a);
        Int r = IntFrom(7u, a);
    
        Int x = IntFrom(0xFFFFFFFFull, a);
        Int y = IntFrom(0xFFFFFFFFull, a);
        Int r = IntFrom(7u, a);
        Int x = IntFrom(0xFFFFFFFFull, a);
        Int y = IntFrom(0xFFFFFFFFull, a);
        Int r = IntFrom(7u, a);
    
        bool ok = IntAdd(&r, &x, &y);
        Allocator     *a   = ALLOCATOR_OF(&dbg);
    
        Int x = IntFrom(1000000u, a);
        Int y = IntFrom(999983u, a);
        Int r = IntFrom(7u, a);
    
        Int x = IntFrom(1000000u, a);
        Int y = IntFrom(999983u, a);
        Int r = IntFrom(7u, a);
        Int x = IntFrom(1000000u, a);
        Int y = IntFrom(999983u, a);
        Int r = IntFrom(7u, a);
    
        bool ok = IntSub(&r, &x, &y);
        // IntAdd with a u64 operand drives int_add_u64 -> int_add_u64_in_place,
        // which frees lhs/rhs temporaries on success (lines 276/277).
        Int x = IntFrom(500u, a);
        Int r = IntFrom(7u, a);
        // which frees lhs/rhs temporaries on success (lines 276/277).
        Int x = IntFrom(500u, a);
        Int r = IntFrom(7u, a);
    
        bool ok = IntAdd(&r, &x, 250u);
        // IntMul with a u64 operand drives int_mul_u64 -> int_mul_u64_in_place,
        // which frees lhs/rhs temporaries on success (lines 251/252).
        Int x = IntFrom(500u, a);
        Int r = IntFrom(7u, a);
        // which frees lhs/rhs temporaries on success (lines 251/252).
        Int x = IntFrom(500u, a);
        Int r = IntFrom(7u, a);
    
        bool ok = IntMul(&r, &x, 13u);
        Allocator     *a   = ALLOCATOR_OF(&dbg);
    
        Int x = IntFrom(1000u, a);
        Int r = IntFrom(7u, a);
    
        Int x = IntFrom(1000u, a);
        Int r = IntFrom(7u, a);
    
        bool ok = IntSub(&r, &x, 250u); // int_sub_u64 frees rhs on success (1187)
        // dividend >= divisor drives the long-division branch (lines 1378..1411,
        // 1420..1423 replace/deinit).
        Int dvd = IntFrom(1000003u, a);
        Int dvs = IntFrom(101u, a);
        Int q   = IntFrom(7u, a);
        // 1420..1423 replace/deinit).
        Int dvd = IntFrom(1000003u, a);
        Int dvs = IntFrom(101u, a);
        Int q   = IntFrom(7u, a);
        Int r   = IntFrom(9u, a);
        Int dvd = IntFrom(1000003u, a);
        Int dvs = IntFrom(101u, a);
        Int q   = IntFrom(7u, a);
        Int r   = IntFrom(9u, a);
        Int dvs = IntFrom(101u, a);
        Int q   = IntFrom(7u, a);
        Int r   = IntFrom(9u, a);
    
        bool ok = IntDivMod(&q, &r, &dvd, &dvs);
    
        // dividend < divisor drives the else branch (line 1413: deinit+reinit q).
        Int dvd = IntFrom(50u, a);
        Int dvs = IntFrom(101u, a);
        Int q   = IntFrom(7u, a);
        // dividend < divisor drives the else branch (line 1413: deinit+reinit q).
        Int dvd = IntFrom(50u, a);
        Int dvs = IntFrom(101u, a);
        Int q   = IntFrom(7u, a);
        Int r   = IntFrom(9u, a);
        Int dvd = IntFrom(50u, a);
        Int dvs = IntFrom(101u, a);
        Int q   = IntFrom(7u, a);
        Int r   = IntFrom(9u, a);
        Int dvs = IntFrom(101u, a);
        Int q   = IntFrom(7u, a);
        Int r   = IntFrom(9u, a);
    
        bool ok = IntDivMod(&q, &r, &dvd, &dvs);
        Allocator     *a   = ALLOCATOR_OF(&dbg);
    
        Int dvd = IntFrom(1000003u, a);
        Int dvs = IntFrom(101u, a);
        Int r   = IntFrom(7u, a);
    
        Int dvd = IntFrom(1000003u, a);
        Int dvs = IntFrom(101u, a);
        Int r   = IntFrom(7u, a);
        Int dvd = IntFrom(1000003u, a);
        Int dvs = IntFrom(101u, a);
        Int r   = IntFrom(7u, a);
    
        bool ok = IntDiv(&r, &dvd, &dvs); // int_div frees remainder on success (1445)
        Allocator     *a   = ALLOCATOR_OF(&dbg);
    
        Int dvd = IntFrom(1000u, a);
        Int dvs = IntFrom(8u, a);
        Int r   = IntFrom(7u, a);
    
        Int dvd = IntFrom(1000u, a);
        Int dvs = IntFrom(8u, a);
        Int r   = IntFrom(7u, a);
        Int dvd = IntFrom(1000u, a);
        Int dvs = IntFrom(8u, a);
        Int r   = IntFrom(7u, a);
    
        bool ok = IntDivExact(&r, &dvd, &dvs); // frees remainder on success (1474)
        // int_div_u64 / int_div_exact_u64 / int_div_i64 etc. free divisor_value
        // on success (1488, 1514, 1501, 1527).
        Int dvd = IntFrom(1000u, a);
        Int r1  = IntFrom(7u, a);
        Int r2  = IntFrom(7u, a);
        // on success (1488, 1514, 1501, 1527).
        Int dvd = IntFrom(1000u, a);
        Int r1  = IntFrom(7u, a);
        Int r2  = IntFrom(7u, a);
        Int r3  = IntFrom(7u, a);
        Int dvd = IntFrom(1000u, a);
        Int r1  = IntFrom(7u, a);
        Int r2  = IntFrom(7u, a);
        Int r3  = IntFrom(7u, a);
        Int r1  = IntFrom(7u, a);
        Int r2  = IntFrom(7u, a);
        Int r3  = IntFrom(7u, a);
    
        bool ok = IntDiv(&r1, &dvd, 8u);
        // int_div_mod_u64 / int_div_mod_i64 free divisor_value on success
        // (1540, 1553); int_mod_u64_into / int_mod_i64_into free quotient (1607/1615).
        Int dvd = IntFrom(1003u, a);
        Int q   = IntFrom(7u, a);
        Int r   = IntFrom(7u, a);
        // (1540, 1553); int_mod_u64_into / int_mod_i64_into free quotient (1607/1615).
        Int dvd = IntFrom(1003u, a);
        Int q   = IntFrom(7u, a);
        Int r   = IntFrom(7u, a);
        Int m1  = IntFrom(7u, a);
        Int dvd = IntFrom(1003u, a);
        Int q   = IntFrom(7u, a);
        Int r   = IntFrom(7u, a);
        Int m1  = IntFrom(7u, a);
        Int m2  = IntFrom(7u, a);
        Int q   = IntFrom(7u, a);
        Int r   = IntFrom(7u, a);
        Int m1  = IntFrom(7u, a);
        Int m2  = IntFrom(7u, a);
        Int r   = IntFrom(7u, a);
        Int m1  = IntFrom(7u, a);
        Int m2  = IntFrom(7u, a);
    
        bool ok = IntDivMod(&q, &r, &dvd, 100u);
        Allocator     *a   = ALLOCATOR_OF(&dbg);
    
        Int dvd = IntFrom(1003u, a);
        Int dvs = IntFrom(100u, a);
        Int r   = IntFrom(7u, a);
    
        Int dvd = IntFrom(1003u, a);
        Int dvs = IntFrom(100u, a);
        Int r   = IntFrom(7u, a);
        Int dvd = IntFrom(1003u, a);
        Int dvs = IntFrom(100u, a);
        Int r   = IntFrom(7u, a);
    
        bool ok = IntMod(&r, &dvd, &dvs); // int_mod frees quotient on success (1598)
        // exponent 13 = 0b1101 hits both the multiply-acc branch (1317) and the
        // square-current branch (1331), and final current/acc cleanup (1336).
        Int base = IntFrom(3u, a);
        Int r    = IntFrom(7u, a);
        // square-current branch (1331), and final current/acc cleanup (1336).
        Int base = IntFrom(3u, a);
        Int r    = IntFrom(7u, a);
    
        bool ok = IntPow(&r, &base, 13u);
    
        // Euclid loop frees x each iteration (1657), final y cleanup (1663).
        Int x = IntFrom(123456u, a);
        Int y = IntFrom(7890u, a);
        Int r = IntFrom(7u, a);
        // Euclid loop frees x each iteration (1657), final y cleanup (1663).
        Int x = IntFrom(123456u, a);
        Int y = IntFrom(7890u, a);
        Int r = IntFrom(7u, a);
        Int x = IntFrom(123456u, a);
        Int y = IntFrom(7890u, a);
        Int r = IntFrom(7u, a);
    
        bool ok = IntGCD(&r, &x, &y);
    
        // Success path frees gcd + quotient (1689/1690).
        Int x = IntFrom(21u, a);
        Int y = IntFrom(6u, a);
        Int r = IntFrom(7u, a);
        // Success path frees gcd + quotient (1689/1690).
        Int x = IntFrom(21u, a);
        Int y = IntFrom(6u, a);
        Int r = IntFrom(7u, a);
        Int x = IntFrom(21u, a);
        Int y = IntFrom(6u, a);
        Int r = IntFrom(7u, a);
    
        bool ok = IntLCM(&r, &x, &y);
        // Non-trivial cube root drives the bisection loop: low/high/mid/mid_pow
        // deinits (1813,1819,1832,1837,1838), the final block (1855..1858).
        Int v    = IntFrom(1000000u, a);
        Int root = IntFrom(7u, a);
        Int rem  = IntFrom(9u, a);
        // deinits (1813,1819,1832,1837,1838), the final block (1855..1858).
        Int v    = IntFrom(1000000u, a);
        Int root = IntFrom(7u, a);
        Int rem  = IntFrom(9u, a);
        Int v    = IntFrom(1000000u, a);
        Int root = IntFrom(7u, a);
        Int rem  = IntFrom(9u, a);
    
        bool ok = IntRootRem(&root, &rem, &v, 3); // 100^3 = 1e6
    
        // Inexact root exercises the cmp>0 branch (1819/1822/1832 high update).
        Int v    = IntFrom(1000u, a);
        Int root = IntFrom(7u, a);
        Int rem  = IntFrom(9u, a);
        // Inexact root exercises the cmp>0 branch (1819/1822/1832 high update).
        Int v    = IntFrom(1000u, a);
        Int root = IntFrom(7u, a);
        Int rem  = IntFrom(9u, a);
        Int v    = IntFrom(1000u, a);
        Int root = IntFrom(7u, a);
        Int rem  = IntFrom(9u, a);
    
        bool ok = IntRootRem(&root, &rem, &v, 3); // cbrt(1000)=10 exact actually
    
        // and a genuinely inexact one
        Int v2 = IntFrom(999u, a);
        ok     = ok && IntRootRem(&root, &rem, &v2, 3);
        ok     = ok && IntToU64(&root) == 9u && IntToU64(&rem) == 999u - 729u;
        Allocator     *a   = ALLOCATOR_OF(&dbg);
    
        Int v = IntFrom(1000000u, a);
        Int r = IntFrom(7u, a);
    
        Int v = IntFrom(1000000u, a);
        Int r = IntFrom(7u, a);
    
        bool ok = IntRoot(&r, &v, 3); // frees remainder on success (1877)
    
        // Frees root + remainder on success (1904/1905).
        Int sq  = IntFrom(123201u, a); // 351^2
        Int nsq = IntFrom(123202u, a);
        // Frees root + remainder on success (1904/1905).
        Int sq  = IntFrom(123201u, a); // 351^2
        Int nsq = IntFrom(123202u, a);
    
        bool ok = IntIsPerfectSquare(&sq) && !IntIsPerfectSquare(&nsq);
    
        // Loop frees root + remainder each degree (1934/1935).
        Int pw  = IntFrom(7776u, a); // 6^5
        Int npw = IntFrom(7777u, a);
        // Loop frees root + remainder each degree (1934/1935).
        Int pw  = IntFrom(7776u, a); // 6^5
        Int npw = IntFrom(7777u, a);
    
        bool ok = IntIsPerfectPower(&pw) && !IntIsPerfectPower(&npw);
        // Drives the main loop (swap, even-stripping 1972, inner deinits) and both
        // tail branches: result-1 path (1998) and nn!=1 -> 0 path requires gcd!=1.
        Int x  = IntFrom(1001u, a);
        Int n  = IntFrom(9907u, a); // prime
        int jr = 0;
        // tail branches: result-1 path (1998) and nn!=1 -> 0 path requires gcd!=1.
        Int x  = IntFrom(1001u, a);
        Int n  = IntFrom(9907u, a); // prime
        int jr = 0;
    
        // a case where gcd(a,n) != 1 -> the *out=0 branch (frees nn at 1998)
        Int x2  = IntFrom(15u, a);
        Int n2  = IntFrom(9u, a); // odd, gcd(15,9)=3
        int jr2 = 0;
        // a case where gcd(a,n) != 1 -> the *out=0 branch (frees nn at 1998)
        Int x2  = IntFrom(15u, a);
        Int n2  = IntFrom(9u, a); // odd, gcd(15,9)=3
        int jr2 = 0;
        ok      = ok && IntTryJacobi(&jr2, &x2, &n2) && jr2 == 0;
        Allocator     *a   = ALLOCATOR_OF(&dbg);
    
        Int x = IntFrom(12345u, a);
        Int y = IntFrom(67890u, a);
        Int m = IntFrom(1009u, a);
    
        Int x = IntFrom(12345u, a);
        Int y = IntFrom(67890u, a);
        Int m = IntFrom(1009u, a);
        Int r = IntFrom(7u, a);
        Int x = IntFrom(12345u, a);
        Int y = IntFrom(67890u, a);
        Int m = IntFrom(1009u, a);
        Int r = IntFrom(7u, a);
        Int y = IntFrom(67890u, a);
        Int m = IntFrom(1009u, a);
        Int r = IntFrom(7u, a);
    
        bool ok = IntModAdd(&r, &x, &y, &m); // frees ar/br/sum on success (2042-2044)
    
        // ar >= br branch (2098/2099 frees ar/br).
        Int x = IntFrom(900u, a);
        Int y = IntFrom(100u, a);
        Int m = IntFrom(1009u, a);
        // ar >= br branch (2098/2099 frees ar/br).
        Int x = IntFrom(900u, a);
        Int y = IntFrom(100u, a);
        Int m = IntFrom(1009u, a);
        Int r = IntFrom(7u, a);
        Int x = IntFrom(900u, a);
        Int y = IntFrom(100u, a);
        Int m = IntFrom(1009u, a);
        Int r = IntFrom(7u, a);
        Int y = IntFrom(100u, a);
        Int m = IntFrom(1009u, a);
        Int r = IntFrom(7u, a);
    
        bool ok = IntModSub(&r, &x, &y, &m);
    
        // ar < br branch: nonzero diff -> modulus-diff (2095 frees diff).
        Int x = IntFrom(100u, a);
        Int y = IntFrom(900u, a);
        Int m = IntFrom(1009u, a);
        // ar < br branch: nonzero diff -> modulus-diff (2095 frees diff).
        Int x = IntFrom(100u, a);
        Int y = IntFrom(900u, a);
        Int m = IntFrom(1009u, a);
        Int r = IntFrom(7u, a);
        Int x = IntFrom(100u, a);
        Int y = IntFrom(900u, a);
        Int m = IntFrom(1009u, a);
        Int r = IntFrom(7u, a);
        Int y = IntFrom(900u, a);
        Int m = IntFrom(1009u, a);
        Int r = IntFrom(7u, a);
    
        bool ok = IntModSub(&r, &x, &y, &m);
        // Instead exercise the ar<br with diff==0 by x=0 mod m, y=0 mod m won't.
        // Use the generic ar<br path already covered; here cover equal-after-mod.
        Int x = IntFrom(5u, a);
        Int y = IntFrom(5u, a);
        Int m = IntFrom(1009u, a);
        // Use the generic ar<br path already covered; here cover equal-after-mod.
        Int x = IntFrom(5u, a);
        Int y = IntFrom(5u, a);
        Int m = IntFrom(1009u, a);
        Int r = IntFrom(7u, a);
        Int x = IntFrom(5u, a);
        Int y = IntFrom(5u, a);
        Int m = IntFrom(1009u, a);
        Int r = IntFrom(7u, a);
        Int y = IntFrom(5u, a);
        Int m = IntFrom(1009u, a);
        Int r = IntFrom(7u, a);
    
        bool ok = IntModSub(&r, &x, &y, &m);
        Allocator     *a   = ALLOCATOR_OF(&dbg);
    
        Int x = IntFrom(12345u, a);
        Int y = IntFrom(67890u, a);
        Int m = IntFrom(1009u, a);
    
        Int x = IntFrom(12345u, a);
        Int y = IntFrom(67890u, a);
        Int m = IntFrom(1009u, a);
        Int r = IntFrom(7u, a);
        Int x = IntFrom(12345u, a);
        Int y = IntFrom(67890u, a);
        Int m = IntFrom(1009u, a);
        Int r = IntFrom(7u, a);
        Int y = IntFrom(67890u, a);
        Int m = IntFrom(1009u, a);
        Int r = IntFrom(7u, a);
    
        bool ok = IntModMul(&r, &x, &y, &m); // frees ar/br/prod (2126-2128)
        Allocator     *a   = ALLOCATOR_OF(&dbg);
    
        Int x = IntFrom(12345u, a);
        Int m = IntFrom(1009u, a);
        Int r = IntFrom(7u, a);
    
        Int x = IntFrom(12345u, a);
        Int m = IntFrom(1009u, a);
        Int r = IntFrom(7u, a);
        Int x = IntFrom(12345u, a);
        Int m = IntFrom(1009u, a);
        Int r = IntFrom(7u, a);
    
        bool ok = IntSquareMod(&r, &x, &m);
    
        // IntModDiv frees inverse on success (2160).
        Int x = IntFrom(42u, a);
        Int y = IntFrom(5u, a);
        Int m = IntFrom(1009u, a);
        // IntModDiv frees inverse on success (2160).
        Int x = IntFrom(42u, a);
        Int y = IntFrom(5u, a);
        Int m = IntFrom(1009u, a);
        Int r = IntFrom(7u, a);
        Int x = IntFrom(42u, a);
        Int y = IntFrom(5u, a);
        Int m = IntFrom(1009u, a);
        Int r = IntFrom(7u, a);
        Int y = IntFrom(5u, a);
        Int m = IntFrom(1009u, a);
        Int r = IntFrom(7u, a);
    
        bool ok = IntModDiv(&r, &x, &y, &m);
        // int_pow_u64_mod: multiply-acc (2201) and square (2215), final cleanup
        // (2220 frees base_mod).
        Int base = IntFrom(7u, a);
        Int m    = IntFrom(1000000007u, a);
        Int r    = IntFrom(9u, a);
        // (2220 frees base_mod).
        Int base = IntFrom(7u, a);
        Int m    = IntFrom(1000000007u, a);
        Int r    = IntFrom(9u, a);
        Int base = IntFrom(7u, a);
        Int m    = IntFrom(1000000007u, a);
        Int r    = IntFrom(9u, a);
    
        bool ok = IntPowMod(&r, &base, 13u, &m);
    
        // int_pow_mod (Int exponent) main loop + final base_mod/exp cleanup.
        Int base = IntFrom(7u, a);
        Int exp  = IntFrom(13u, a);
        Int m    = IntFrom(1000000007u, a);
        // int_pow_mod (Int exponent) main loop + final base_mod/exp cleanup.
        Int base = IntFrom(7u, a);
        Int exp  = IntFrom(13u, a);
        Int m    = IntFrom(1000000007u, a);
        Int r    = IntFrom(9u, a);
        Int base = IntFrom(7u, a);
        Int exp  = IntFrom(13u, a);
        Int m    = IntFrom(1000000007u, a);
        Int r    = IntFrom(9u, a);
        Int exp  = IntFrom(13u, a);
        Int m    = IntFrom(1000000007u, a);
        Int r    = IntFrom(9u, a);
    
        bool ok = IntPowMod(&r, &base, &exp, &m);
        Allocator     *a   = ALLOCATOR_OF(&dbg);
    
        Int v = IntFrom(17u, a);
        Int m = IntFrom(3120u, a); // gcd(17,3120)=1
        Int r = IntFrom(7u, a);
    
        Int v = IntFrom(17u, a);
        Int m = IntFrom(3120u, a); // gcd(17,3120)=1
        Int r = IntFrom(7u, a);
        Int v = IntFrom(17u, a);
        Int m = IntFrom(3120u, a); // gcd(17,3120)=1
        Int r = IntFrom(7u, a);
    
        bool ok = IntModInv(&r, &v, &m);
        // t.negative && !zero branch (modulus - mag_mod, frees positive/mag_mod
        // and mag_mod at 2414).
        Int v = IntFrom(3u, a);
        Int m = IntFrom(7u, a); // inverse of 3 mod 7 is 5
        Int r = IntFrom(9u, a);
        // and mag_mod at 2414).
        Int v = IntFrom(3u, a);
        Int m = IntFrom(7u, a); // inverse of 3 mod 7 is 5
        Int r = IntFrom(9u, a);
        Int v = IntFrom(3u, a);
        Int m = IntFrom(7u, a); // inverse of 3 mod 7 is 5
        Int r = IntFrom(9u, a);
    
        bool ok = IntModInv(&r, &v, &m);
        // false; the function still frees reduced/r/new_r/one/t/new_t at the tail
        // (2419-2424). All those carry allocations.
        Int v = IntFrom(6u, a);
        Int m = IntFrom(9u, a);           // gcd(6,9)=3, no inverse
        Int r = IntFrom(7u, a);
        // (2419-2424). All those carry allocations.
        Int v = IntFrom(6u, a);
        Int m = IntFrom(9u, a);           // gcd(6,9)=3, no inverse
        Int r = IntFrom(7u, a);
        Int v = IntFrom(6u, a);
        Int m = IntFrom(9u, a);           // gcd(6,9)=3, no inverse
        Int r = IntFrom(7u, a);
    
        bool ok = !IntModInv(&r, &v, &m); // returns false
    
        // modulus 7 (7 % 4 == 3) drives the fast path: frees exponent + a (2488/2489).
        Int v = IntFrom(2u, a); // 2 is QR mod 7 (3^2=2)
        Int m = IntFrom(7u, a);
        Int r = IntFrom(9u, a);
        // modulus 7 (7 % 4 == 3) drives the fast path: frees exponent + a (2488/2489).
        Int v = IntFrom(2u, a); // 2 is QR mod 7 (3^2=2)
        Int m = IntFrom(7u, a);
        Int r = IntFrom(9u, a);
        Int v = IntFrom(2u, a); // 2 is QR mod 7 (3^2=2)
        Int m = IntFrom(7u, a);
        Int r = IntFrom(9u, a);
    
        bool ok = IntModSqrt(&r, &v, &m);
        // the witness-search loop, the t-loop with t_power/b/b_sq, and the success
        // int_replace path (2724-2735). 2 is a QR mod 17 (6^2=36=2).
        Int v = IntFrom(2u, a);
        Int m = IntFrom(17u, a);
        Int r = IntFrom(9u, a);
        // int_replace path (2724-2735). 2 is a QR mod 17 (6^2=36=2).
        Int v = IntFrom(2u, a);
        Int m = IntFrom(17u, a);
        Int r = IntFrom(9u, a);
        Int v = IntFrom(2u, a);
        Int m = IntFrom(17u, a);
        Int r = IntFrom(9u, a);
    
        bool ok = IntModSqrt(&r, &v, &m);
        // modulus 41 (41 % 4 == 1, 41-1 = 40 = 8*5 so m=3 levels) drives the inner
        // b-squaring loop (2662) and the c/t/b reassignments more deeply.
        Int v = IntFrom(10u, a); // 10 is QR mod 41 (16^2=256=256-246=10)
        Int m = IntFrom(41u, a);
        Int r = IntFrom(9u, a);
        // b-squaring loop (2662) and the c/t/b reassignments more deeply.
        Int v = IntFrom(10u, a); // 10 is QR mod 41 (16^2=256=256-246=10)
        Int m = IntFrom(41u, a);
        Int r = IntFrom(9u, a);
        Int v = IntFrom(10u, a); // 10 is QR mod 41 (16^2=256=256-246=10)
        Int m = IntFrom(41u, a);
        Int r = IntFrom(9u, a);
    
        bool ok = IntModSqrt(&r, &v, &m);
    
        // value % modulus == 0 -> zero branch frees a (2449).
        Int v = IntFrom(0u, a);
        Int m = IntFrom(17u, a);
        Int r = IntFrom(9u, a);
        // value % modulus == 0 -> zero branch frees a (2449).
        Int v = IntFrom(0u, a);
        Int m = IntFrom(17u, a);
        Int r = IntFrom(9u, a);
        Int v = IntFrom(0u, a);
        Int m = IntFrom(17u, a);
        Int r = IntFrom(9u, a);
    
        bool ok = IntModSqrt(&r, &v, &m) && IntIsZero(&r);
        // modulus 2 path: int_replace(result, &a) (no extra deinit, but reaches
        // the compare-u64==2 branch); a is moved into result.
        Int v = IntFrom(1u, a);
        Int m = IntFrom(2u, a);
        Int r = IntFrom(9u, a);
        // the compare-u64==2 branch); a is moved into result.
        Int v = IntFrom(1u, a);
        Int m = IntFrom(2u, a);
        Int r = IntFrom(9u, a);
        Int v = IntFrom(1u, a);
        Int m = IntFrom(2u, a);
        Int r = IntFrom(9u, a);
    
        bool ok = IntModSqrt(&r, &v, &m) && IntToU64(&r) == 1u;
        // jacobi != 1 -> non-residue, frees a and returns false (2473's deinit at
        // the early non-residue return). 3 is a non-residue mod 7.
        Int v = IntFrom(3u, a);
        Int m = IntFrom(7u, a);
        Int r = IntFrom(9u, a);
        // the early non-residue return). 3 is a non-residue mod 7.
        Int v = IntFrom(3u, a);
        Int m = IntFrom(7u, a);
        Int r = IntFrom(9u, a);
        Int v = IntFrom(3u, a);
        Int m = IntFrom(7u, a);
        Int r = IntFrom(9u, a);
    
        bool ok = !IntModSqrt(&r, &v, &m);
    
        // composite (non-prime) odd modulus -> !prime branch frees a (2465).
        Int v = IntFrom(2u, a);
        Int m = IntFrom(9u, a); // odd composite
        Int r = IntFrom(9u, a);
        // composite (non-prime) odd modulus -> !prime branch frees a (2465).
        Int v = IntFrom(2u, a);
        Int m = IntFrom(9u, a); // odd composite
        Int r = IntFrom(9u, a);
        Int v = IntFrom(2u, a);
        Int m = IntFrom(9u, a); // odd composite
        Int r = IntFrom(9u, a);
    
        bool ok = !IntModSqrt(&r, &v, &m);
    
        // even modulus (>2) -> IntIsEven branch frees a (2465).
        Int v = IntFrom(3u, a);
        Int m = IntFrom(8u, a);
        Int r = IntFrom(9u, a);
        // even modulus (>2) -> IntIsEven branch frees a (2465).
        Int v = IntFrom(3u, a);
        Int m = IntFrom(8u, a);
        Int r = IntFrom(9u, a);
        Int v = IntFrom(3u, a);
        Int m = IntFrom(8u, a);
        Int r = IntFrom(9u, a);
    
        bool ok = !IntModSqrt(&r, &v, &m);
        // witness inner loop (2839), per-iteration base/x (2853/2854), and the d /
        // n_minus_one tail (2860/2861).
        Int prime     = IntFrom(1000003u, a); // prime
        Int composite = IntFrom(1000005u, a); // composite
        // n_minus_one tail (2860/2861).
        Int prime     = IntFrom(1000003u, a); // prime
        Int composite = IntFrom(1000005u, a); // composite
    
        bool ok = IntIsProbablePrime(&prime) && !IntIsProbablePrime(&composite);
        // (squaring x repeatedly) before failing. 2047 = 23*89 passes base 2 (it's
        // a 2-SPRP) but fails on another base -> exercises x squaring (2839).
        Int n = IntFrom(2047u, a);
    
        bool ok = !IntIsProbablePrime(&n);
        // Drives candidate-stepping loop (frees candidate on success at 2924, and
        // the +2 stepping at 2918). Starting from an even-ish composite.
        Int v = IntFrom(1000000u, a);
        Int r = IntFrom(7u, a);
        // the +2 stepping at 2918). Starting from an even-ish composite.
        Int v = IntFrom(1000000u, a);
        Int r = IntFrom(7u, a);
    
        bool ok = IntNextPrime(&r, &v);
        // value <= 1 -> two path (2879 int_replace) and the candidate<=2 path
        // (2902/2903 frees candidate then replaces with two).
        Int v0 = IntFrom(0u, a);
        Int r0 = IntFrom(7u, a);
        Int v1 = IntFrom(2u, a);
        // (2902/2903 frees candidate then replaces with two).
        Int v0 = IntFrom(0u, a);
        Int r0 = IntFrom(7u, a);
        Int v1 = IntFrom(2u, a);
        Int r1 = IntFrom(7u, a);
        Int v0 = IntFrom(0u, a);
        Int r0 = IntFrom(7u, a);
        Int v1 = IntFrom(2u, a);
        Int r1 = IntFrom(7u, a);
        Int r0 = IntFrom(7u, a);
        Int v1 = IntFrom(2u, a);
        Int r1 = IntFrom(7u, a);
    
        bool ok = IntNextPrime(&r0, &v0) && IntToU64(&r0) == 2u;
        Allocator     *a   = ALLOCATOR_OF(&dbg);
    
        Int x = IntFrom(123456u, a);
        Int y = IntFrom(7891011u, a);
        Int r = IntFrom(0xDEADBEEFu, a); // pre-populated: holds a live buffer
    
        Int x = IntFrom(123456u, a);
        Int y = IntFrom(7891011u, a);
        Int r = IntFrom(0xDEADBEEFu, a); // pre-populated: holds a live buffer
        Int x = IntFrom(123456u, a);
        Int y = IntFrom(7891011u, a);
        Int r = IntFrom(0xDEADBEEFu, a); // pre-populated: holds a live buffer
    
        bool ok = IntMul(&r, &x, &y);
        Allocator     *a   = ALLOCATOR_OF(&dbg);
    
        Int dvd = IntFrom(1000u, a);
        Int r   = IntFrom(7u, a);
    
        Int dvd = IntFrom(1000u, a);
        Int r   = IntFrom(7u, a);
    
        bool ok = IntDivExact(&r, &dvd, (i64)8);
            for (u64 si = 0; si < samples && ok; si++) {
                u64 vv = 1u + (si * (p - 2u)) / (samples - 1u);
                Int v  = IntFrom(vv, a);
                Int m  = IntFrom(p, a);
                Int r  = IntFrom(9u, a);
                u64 vv = 1u + (si * (p - 2u)) / (samples - 1u);
                Int v  = IntFrom(vv, a);
                Int m  = IntFrom(p, a);
                Int r  = IntFrom(9u, a);
                Int v  = IntFrom(vv, a);
                Int m  = IntFrom(p, a);
                Int r  = IntFrom(9u, a);
    
                bool found = IntModSqrt(&r, &v, &m);
        Allocator     *alloc = ALLOCATOR_OF(&dbg);
    
        Int value   = IntFrom(7u, alloc);
        Int modulus = IntFrom(40u, alloc); // 7 * 23 = 161 = 1 (mod 40)
        Int inverse = IntFrom(0u, alloc);
    
        Int value   = IntFrom(7u, alloc);
        Int modulus = IntFrom(40u, alloc); // 7 * 23 = 161 = 1 (mod 40)
        Int inverse = IntFrom(0u, alloc);
        Int value   = IntFrom(7u, alloc);
        Int modulus = IntFrom(40u, alloc); // 7 * 23 = 161 = 1 (mod 40)
        Int inverse = IntFrom(0u, alloc);
    
        bool ok = IntModInv(&inverse, &value, &modulus);
        Allocator     *alloc = ALLOCATOR_OF(&dbg);
    
        Int value   = IntFrom(9u, alloc);
        Int modulus = IntFrom(41u, alloc); // 41-1 = 8*5 -> several Tonelli rounds
        Int root    = IntFrom(0u, alloc);
    
        Int value   = IntFrom(9u, alloc);
        Int modulus = IntFrom(41u, alloc); // 41-1 = 8*5 -> several Tonelli rounds
        Int root    = IntFrom(0u, alloc);
        Int check   = IntFrom(0u, alloc);
        Int value   = IntFrom(9u, alloc);
        Int modulus = IntFrom(41u, alloc); // 41-1 = 8*5 -> several Tonelli rounds
        Int root    = IntFrom(0u, alloc);
        Int check   = IntFrom(0u, alloc);
        Int modulus = IntFrom(41u, alloc); // 41-1 = 8*5 -> several Tonelli rounds
        Int root    = IntFrom(0u, alloc);
        Int check   = IntFrom(0u, alloc);
    
        bool ok = IntModSqrt(&root, &value, &modulus);
        Allocator     *alloc = ALLOCATOR_OF(&dbg);
    
        Int value   = IntFrom(2u, alloc);
        Int modulus = IntFrom(7u, alloc); // 7 % 4 == 3
        Int root    = IntFrom(0u, alloc);
    
        Int value   = IntFrom(2u, alloc);
        Int modulus = IntFrom(7u, alloc); // 7 % 4 == 3
        Int root    = IntFrom(0u, alloc);
        Int check   = IntFrom(0u, alloc);
        Int value   = IntFrom(2u, alloc);
        Int modulus = IntFrom(7u, alloc); // 7 % 4 == 3
        Int root    = IntFrom(0u, alloc);
        Int check   = IntFrom(0u, alloc);
        Int modulus = IntFrom(7u, alloc); // 7 % 4 == 3
        Int root    = IntFrom(0u, alloc);
        Int check   = IntFrom(0u, alloc);
    
        bool ok = IntModSqrt(&root, &value, &modulus);
        Allocator     *alloc = ALLOCATOR_OF(&dbg);
    
        Int m = IntFrom(7u, alloc);
        Int r = IntFrom(0u, alloc);
    
        Int m = IntFrom(7u, alloc);
        Int r = IntFrom(0u, alloc);
    
        // ar >= br branch: 5 - 2 = 3 (mod 7)
    
        // ar >= br branch: 5 - 2 = 3 (mod 7)
        Int  a1 = IntFrom(5u, alloc), b1 = IntFrom(2u, alloc);
        bool ok = IntModSub(&r, &a1, &b1, &m) && IntCompare(&r, 3u) == 0;
        // ar < br branch: 2 - 5 = -3 = 4 (mod 7)
        bool ok = IntModSub(&r, &a1, &b1, &m) && IntCompare(&r, 3u) == 0;
        // ar < br branch: 2 - 5 = -3 = 4 (mod 7)
        Int a2 = IntFrom(2u, alloc), b2 = IntFrom(5u, alloc);
        ok = ok && IntModSub(&r, &a2, &b2, &m) && IntCompare(&r, 4u) == 0;
        // equal branch: 5 - 12 = 0 (mod 7)
        ok = ok && IntModSub(&r, &a2, &b2, &m) && IntCompare(&r, 4u) == 0;
        // equal branch: 5 - 12 = 0 (mod 7)
        Int a3 = IntFrom(5u, alloc), b3 = IntFrom(12u, alloc);
        ok = ok && IntModSub(&r, &a3, &b3, &m) && IntIsZero(&r);
        Allocator     *alloc = ALLOCATOR_OF(&dbg);
    
        Int value = IntFrom(100u, alloc);
        Int next  = IntFrom(0u, alloc);
    
        Int value = IntFrom(100u, alloc);
        Int next  = IntFrom(0u, alloc);
    
        bool ok = IntNextPrime(&next, &value);
        Allocator     *alloc = ALLOCATOR_OF(&dbg);
    
        Int  value = IntFrom(561u, alloc);
        bool error = false;
        bool prime = IntIsProbablePrime(&value, &error);
    
    bool test_int_from_unsigned_integer(void) {
        WriteFmt("Testing IntFrom with unsigned integer\n");
    
        DefaultAllocator alloc = DefaultAllocatorInit();
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(13, ALLOCATOR_OF(&alloc));
        Str text  = IntToBinary(&value);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(0xBEEF, ALLOCATOR_OF(&alloc));
        Str text  = IntToStrRadix(&value, 16, true);
        alloc.base.retry_limit = 4;
    
        Int value = IntFrom(0xBEEF, ALLOCATOR_OF(&alloc));
    
        ok = int_try_to_str_radix(&text, &value, 16, true, ALLOCATOR_OF(&alloc));
    
        Int lhs = IntFromBinary("0001011", ALLOCATOR_OF(&alloc));
        Int rhs = IntFrom(11, ALLOCATOR_OF(&alloc));
    
        bool result = IntCompare(&lhs, &rhs) == 0;
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int  value = IntFrom(1, ALLOCATOR_OF(&alloc));
        u64  out   = 0;
        bool error = false;
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(255, ALLOCATOR_OF(&alloc));
        Str text  = IntToStrRadix(&value, 37, false);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(1, ALLOCATOR_OF(&alloc));
        IntToBytesLE(&value, NULL, 1);
        DefaultAllocatorDeinit(&alloc);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(1, ALLOCATOR_OF(&alloc));
        u8  byte  = 0;
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int a       = IntFrom((u64)13u, &alloc.base);
        Int b       = IntFrom((u64)21u, &alloc.base);
        Int product = IntInit(&alloc.base);
    
        Int a       = IntFrom((u64)13u, &alloc.base);
        Int b       = IntFrom((u64)21u, &alloc.base);
        Int product = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int small = IntFrom(7u, &alloc.base);
        Int mid   = IntFrom(255u, &alloc.base);
        Int big   = IntFromStr("123456789012345678901234567890", &alloc.base);
    
        Int small = IntFrom(7u, &alloc.base);
        Int mid   = IntFrom(255u, &alloc.base);
        Int big   = IntFromStr("123456789012345678901234567890", &alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value     = IntFrom(0x1234, ALLOCATOR_OF(&alloc));
        u8  out[8]    = {0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA};
        u64 written   = IntToBytesLE(&value, out, sizeof(out));
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value   = IntFrom(1, ALLOCATOR_OF(&alloc));
        u8  out[4]  = {0xAA, 0xAA, 0xAA, 0xAA};
        u64 written = IntToBytesLE(&value, out, sizeof(out));
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value     = IntFrom(0x1234, ALLOCATOR_OF(&alloc));
        u8  out[8]    = {0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA};
        u64 written   = IntToBytesBE(&value, out, sizeof(out));
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value   = IntFrom(1, ALLOCATOR_OF(&alloc));
        u8  out[4]  = {0xAA, 0xAA, 0xAA, 0xAA};
        u64 written = IntToBytesBE(&value, out, sizeof(out));
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int a = IntFrom(1, &alloc.base);
        Int b = IntFrom(257, &alloc.base);
    
        Int a = IntFrom(1, &alloc.base);
        Int b = IntFrom(257, &alloc.base);
    
        u64  ha     = int_hash(&a, 0);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(0x0102, &alloc.base);
        u8  buf[4];
        MemSet(buf, 0xAA, sizeof(buf));
        // Drives int_try_to_str_radix loop (760, 772) and int_div_u64_rem
        // (1583/1584) and int_mod_u64 (1630).
        Int  v   = IntFrom(1234567u, a);
        Str  s   = IntToStrRadix(&v, 10, false, a);
        bool ok  = StrLen(&s) == 7;
        Allocator     *a   = ALLOCATOR_OF(&dbg);
    
        Int out = IntFrom(987654321u, a); // pre-populated: holds a live buffer
    
        bool ok = IntTryFromStr(&out, "123456789");
    
        Int zero     = IntInit(&alloc.base);
        Int non_zero = IntFrom(1, &alloc.base);
    
        bool result = IntIsZero(&zero);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int one = IntFrom(1, &alloc.base);
        Int two = IntFrom(2, &alloc.base);
    
        Int one = IntFrom(1, &alloc.base);
        Int two = IntFrom(2, &alloc.base);
    
        bool result = IntIsOne(&one);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int even = IntFrom(42, &alloc.base);
        Int odd  = IntFrom(43, &alloc.base);
    
        Int even = IntFrom(42, &alloc.base);
        Int odd  = IntFrom(43, &alloc.base);
    
        bool result = IntIsEven(&even);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int small = IntFrom(UINT64_MAX, &alloc.base);
        Int big   = IntFrom(1, &alloc.base);
    
        Int small = IntFrom(UINT64_MAX, &alloc.base);
        Int big   = IntFrom(1, &alloc.base);
    
        IntShiftLeft(&big, 64);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int  value = IntFrom(1025, &alloc.base);
        bool error = true;
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int one   = IntFrom(1, &alloc.base);
        Int power = IntFrom(1, &alloc.base);
        Int other = IntFrom(24, &alloc.base);
    
        Int one   = IntFrom(1, &alloc.base);
        Int power = IntFrom(1, &alloc.base);
        Int other = IntFrom(24, &alloc.base);
        Int zero  = IntInit(&alloc.base);
        Int one   = IntFrom(1, &alloc.base);
        Int power = IntFrom(1, &alloc.base);
        Int other = IntFrom(24, &alloc.base);
        Int zero  = IntInit(&alloc.base);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value     = IntFrom(12345, &alloc.base);
        Int root      = IntFrom(99, &alloc.base);
        Int remainder = IntFrom(77, &alloc.base);
    
        Int value     = IntFrom(12345, &alloc.base);
        Int root      = IntFrom(99, &alloc.base);
        Int remainder = IntFrom(77, &alloc.base);
        Int value     = IntFrom(12345, &alloc.base);
        Int root      = IntFrom(99, &alloc.base);
        Int remainder = IntFrom(77, &alloc.base);
    
        bool ok     = IntRootRem(&root, &remainder, &value, 1);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(0, &alloc.base);
    
        u64  h      = int_hash(&value, 0);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(255, &alloc.base);
    
        u64 expected  = 1469598103934665603ULL;
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom(5, &alloc.base);
    
        bool ok     = IntShiftRight(&value, 0);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int  value = IntFrom(7u, &alloc.base);
        bool ok    = IntShiftLeft(&value, 0);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int value = IntFrom((u64)40u, &alloc.base);
    
        bool result = (IntBitLength(&value) == 6u);
        DefaultAllocator alloc = DefaultAllocatorInit();
    
        Int base         = IntFrom(7, &alloc.base);
        Int mod          = IntFrom(13, &alloc.base);
        Int result_value = IntInit(&alloc.base);
    
        Int base         = IntFrom(7, &alloc.base);
        Int mod          = IntFrom(13, &alloc.base);
        Int result_value = IntInit(&alloc.base);
        Int hex_val = IntFromHexStr("deadbeefcafebabe1234", alloc_base);
        Int bin_val = IntFromBinary("10100011", alloc_base);
        Int oct_val = IntFrom(493, alloc_base);
    
        StrAppendFmt(&output, "{}", big_dec);
    
        Str  output  = StrInit(&alloc);
        Int  a       = IntFrom(0x41, alloc_base); // 'A'
        bool success = true;
    
        Str  output  = StrInit(&alloc);
        Int  a       = IntFrom(0x7a, alloc_base); // 'z'
        bool success = true;
    
        Str  output  = StrInit(&alloc);
        Int  seven   = IntFrom(7, alloc_base);
        bool success = true;
        Allocator       *ab    = ALLOCATOR_OF(&alloc);
        Str              out   = StrInit(&alloc);
        Int              v     = IntFrom(42, ab);
        StrAppendFmt(&out, "{}", v);
        bool ok = (ZstrCompare(StrBegin(&out), "42") == 0);
    static bool test_read_int_underscore_rejected(void) {
        DefaultAllocator alloc = DefaultAllocatorInit();
        Int              v     = IntFrom(777, &alloc.base);
        Zstr             z     = "12_3";
        Zstr             out   = str_read_fmt(z, "{}", (TypeSpecificIO[]) {TO_TYPE_SPECIFIC_IO(Int, &v)}, 1);
Last updated on