vyre-conform 0.1.0

Conformance suite for vyre backends — proves byte-identical output to CPU reference
Documentation
// primitive.math.add_sat — saturating add.
test_binary_op!(
    test_add_sat,
    "primitive.math.add_sat",
    [
        (0x00000000, 0x00000000, 0x00000000, "zero vs zero"),
        (0x00000001, 0x00000000, 0x00000001, "one vs zero"),
        (0xFFFFFFFF, 0x00000001, 0xFFFFFFFF, "saturation at max"),
        (0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, "double max saturation"),
        (0x80000000, 0x80000000, 0xFFFFFFFF, "sign-bit overflow saturates"),
        (0x00000007, 0x00000003, 0x0000000A, "prime vs prime"),
    ]
);

// primitive.math.sub_sat — saturating sub.
test_binary_op!(
    test_sub_sat,
    "primitive.math.sub_sat",
    [
        (0x00000000, 0x00000000, 0x00000000, "zero vs zero"),
        (0x00000001, 0x00000000, 0x00000001, "one vs zero"),
        (0x00000000, 0x00000001, 0x00000000, "underflow saturates at zero"),
        (0x00000005, 0x0000000A, 0x00000000, "underflow saturates"),
        (0xFFFFFFFF, 0x00000001, 0xFFFFFFFE, "max minus one"),
        (0x0000000C, 0x00000005, 0x00000007, "composite vs prime"),
    ]
);

// primitive.math.abs_diff — unsigned absolute difference.
test_binary_op!(
    test_abs_diff,
    "primitive.math.abs_diff",
    [
        (0x00000000, 0x00000000, 0x00000000, "zero vs zero"),
        (0x0000000A, 0x00000005, 0x00000005, "a > b"),
        (0x00000005, 0x0000000A, 0x00000005, "b > a"),
        (0xFFFFFFFF, 0x00000000, 0xFFFFFFFF, "max vs zero"),
        (0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, "zero vs max"),
        (0x80000000, 0x80000000, 0x00000000, "same sign-bit"),
    ]
);

// primitive.math.gcd — greatest common divisor.
test_binary_op!(
    test_gcd,
    "primitive.math.gcd",
    [
        (0x00000000, 0x00000000, 0x00000000, "zero vs zero"),
        (0x0000000C, 0x00000008, 0x00000004, "gcd(12, 8) = 4"),
        (0x00000007, 0x00000003, 0x00000001, "coprime"),
        (0x00000064, 0x0000001E, 0x00000002, "gcd(100, 30) = 2"),
        (0x00000000, 0x00000005, 0x00000005, "gcd(0, 5) = 5"),
        (0x00000005, 0x00000000, 0x00000005, "gcd(5, 0) = 5"),
    ]
);

// primitive.math.lcm — least common multiple.
test_binary_op!(
    test_lcm,
    "primitive.math.lcm",
    [
        (0x00000000, 0x00000000, 0x00000000, "zero vs zero"),
        (0x00000004, 0x00000006, 0x0000000C, "lcm(4, 6) = 12"),
        (0x00000007, 0x00000003, 0x00000015, "lcm(7, 3) = 21"),
        (0x00000000, 0x00000005, 0x00000000, "lcm(0, 5) = 0"),
        (0x00000005, 0x00000000, 0x00000000, "lcm(5, 0) = 0"),
        (0x00000001, 0xFFFFFFFF, 0xFFFFFFFF, "lcm(1, max) = max"),
    ]
);