Skip to content

IntGCD

Usage example (Cross-references)

Usage examples (Cross-references)
    }
    
    bool IntGCD(Int *result, const Int *a, const Int *b) {
        ValidateInt(result);
        ValidateInt(a);
        Int lcm      = IntInit(IntAllocator(result));
    
        if (!IntGCD(&gcd, a, b) || !int_div(&quotient, a, &gcd) || !int_mul(&lcm, &quotient, b)) {
            IntDeinit(&gcd);
            IntDeinit(&quotient);
    
    bool test_int_gcd(void) {
        WriteFmt("Testing IntGCD\n");
    
        DefaultAllocator alloc = DefaultAllocatorInit();
        Int result_value = IntInit(&alloc.base);
    
        IntGCD(&result_value, &a, &b);
    
        bool result = IntToU64(&result_value) == 6;
    // different, distinguishable outcome.
    bool test_m13_gcd_null_result(void) {
        WriteFmt("Testing IntGCD NULL result handling\n");
    
        DefaultAllocator alloc = DefaultAllocatorInit();
        Int b = IntFrom(8, &alloc.base);
    
        IntGCD(NULL, &a, &b);
    
        IntDeinit(&a);
    // caller-observable.
    bool test_m13_gcd_null_a(void) {
        WriteFmt("Testing IntGCD NULL a handling\n");
    
        DefaultAllocator alloc = DefaultAllocatorInit();
        Int result = IntInit(&alloc.base);
    
        IntGCD(&result, NULL, &b);
    
        IntDeinit(&b);
    // LOG_FATAL abort.
    bool test_m13_gcd_null_b(void) {
        WriteFmt("Testing IntGCD NULL b handling\n");
    
        DefaultAllocator alloc = DefaultAllocatorInit();
        Int result = IntInit(&alloc.base);
    
        IntGCD(&result, &a, NULL);
    
        IntDeinit(&a);
        Int r = IntFrom(7u, a);
    
        bool ok = IntGCD(&r, &x, &y);
        ok      = ok && IntToU64(&r) == 6u;
Last updated on