╭ mulodi4_test.zig ─────────────────────────────────────────────╮ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ╰───────────────────────────────────────────────────────────────╯
╭ find file ─ ─ ─ ─ ─ ─ ─ ─ ─ ─╮ ╭────╮ ╭ clone ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ╮ │ │ │http│ ssh │ │ ╰ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─╯ ╰────╯ ╰ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ╯
.. aarch64_outline_atomics.zig absv.zig absvdi2.zig absvdi2_test.zig absvsi2.zig absvsi2_test.zig absvti2.zig absvti2_test.zig addf3.zig addf3_test.zig addvdi3.zig addvsi3.zig arm.zig atomics.zig aulldiv.zig aullrem.zig bitreverse.zig bitreversedi2_test.zig bitreversesi2_test.zig bitreverseti2_test.zig bswap.zig bswapdi2_test.zig bswapsi2_test.zig bswapti2_test.zig clear_cache.zig clzdi2_test.zig clzsi2_test.zig clzti2_test.zig cmp.zig cmpdi2_test.zig cmpsi2_test.zig cmpti2_test.zig comparedf2_test.zig comparef.zig comparesf2_test.zig cos.zig count0bits.zig ctzdi2_test.zig ctzsi2_test.zig ctzti2_test.zig divc3.zig divc3_test.zig divdf3.zig divdf3_test.zig divmodei4.zig divsf3.zig divsf3_test.zig divtf3.zig divtf3_test.zig divti3_test.zig divxf3.zig divxf3_test.zig emutls.zig exp.zig exp2.zig exp_f128.zig extendf.zig extendf_test.zig fabs.zig ffsdi2_test.zig ffssi2_test.zig ffsti2_test.zig float_from_int.zig float_from_int_test.zig floor_ceil.zig fma.zig fmax.zig fmin.zig fmod.zig fmodq_test.zig fmodx_test.zig hexagon.zig int.zig int_from_float.zig int_from_float_test.zig limb64.zig log.zig log10.zig log2.zig log_f128.zig memcpy.zig memmove.zig modti3_test.zig mulXi3.zig mulXi3_test.zig mulc3.zig mulc3_test.zig mulf3.zig mulf3_test.zig mulo.zig ╭─────────────────────────────────╮ │mulodi4_test.zig │ ╰─────────────────────────────────╯ mulosi4_test.zig muloti4_test.zig mulvsi3.zig negdi2_test.zig negsi2_test.zig negti2_test.zig negv.zig negvdi2_test.zig negvsi2_test.zig negvti2_test.zig os_version_check.zig parity.zig paritydi2_test.zig paritysi2_test.zig parityti2_test.zig popcount.zig popcountdi2_test.zig popcountsi2_test.zig popcountti2_test.zig powiXf2.zig powiXf2_test.zig rem_pio2.zig rem_pio2_large.zig rem_pio2f.zig rem_pio2l.zig round.zig shift.zig shift_test.zig sin.zig sincos.zig sqrt.zig ssp.zig stack_probe.zig subvdi3.zig subvsi3.zig tan.zig trig.zig trunc.zig truncf.zig truncf_test.zig ucmpdi2_test.zig ucmpsi2_test.zig ucmpti2_test.zig udivmod.zig udivmoddi4_test.zig udivmodei4.zig udivmodsi4_test.zig udivmodti4_test.zig
1 const mulo = @import("mulo.zig"); 2 const testing = @import("std").testing; 3 4 // ported from https://github.com/llvm-mirror/compiler-rt/tree/release_80/test/builtins/Unit 5 6 fn test__mulodi4(a: i64, b: i64, expected: i64, expected_overflow: c_int) !void { 7 var overflow: c_int = undefined; 8 const x = mulo.__mulodi4(a, b, &overflow); 9 try testing.expect(overflow == expected_overflow and (expected_overflow != 0 or x == expected)); 10 } 11 12 test "mulodi4" { 13 try test__mulodi4(0, 0, 0, 0); 14 try test__mulodi4(0, 1, 0, 0); 15 try test__mulodi4(1, 0, 0, 0); 16 try test__mulodi4(0, 10, 0, 0); 17 try test__mulodi4(10, 0, 0, 0); 18 try test__mulodi4(0, 81985529216486895, 0, 0); 19 try test__mulodi4(81985529216486895, 0, 0, 0); 20 21 try test__mulodi4(0, -1, 0, 0); 22 try test__mulodi4(-1, 0, 0, 0); 23 try test__mulodi4(0, -10, 0, 0); 24 try test__mulodi4(-10, 0, 0, 0); 25 try test__mulodi4(0, -81985529216486895, 0, 0); 26 try test__mulodi4(-81985529216486895, 0, 0, 0); 27 28 try test__mulodi4(1, 1, 1, 0); 29 try test__mulodi4(1, 10, 10, 0); 30 try test__mulodi4(10, 1, 10, 0); 31 try test__mulodi4(1, 81985529216486895, 81985529216486895, 0); 32 try test__mulodi4(81985529216486895, 1, 81985529216486895, 0); 33 34 try test__mulodi4(1, -1, -1, 0); 35 try test__mulodi4(1, -10, -10, 0); 36 try test__mulodi4(-10, 1, -10, 0); 37 try test__mulodi4(1, -81985529216486895, -81985529216486895, 0); 38 try test__mulodi4(-81985529216486895, 1, -81985529216486895, 0); 39 40 try test__mulodi4(3037000499, 3037000499, 9223372030926249001, 0); 41 try test__mulodi4(-3037000499, 3037000499, -9223372030926249001, 0); 42 try test__mulodi4(3037000499, -3037000499, -9223372030926249001, 0); 43 try test__mulodi4(-3037000499, -3037000499, 9223372030926249001, 0); 44 45 try test__mulodi4(4398046511103, 2097152, 9223372036852678656, 0); 46 try test__mulodi4(-4398046511103, 2097152, -9223372036852678656, 0); 47 try test__mulodi4(4398046511103, -2097152, -9223372036852678656, 0); 48 try test__mulodi4(-4398046511103, -2097152, 9223372036852678656, 0); 49 50 try test__mulodi4(2097152, 4398046511103, 9223372036852678656, 0); 51 try test__mulodi4(-2097152, 4398046511103, -9223372036852678656, 0); 52 try test__mulodi4(2097152, -4398046511103, -9223372036852678656, 0); 53 try test__mulodi4(-2097152, -4398046511103, 9223372036852678656, 0); 54 55 try test__mulodi4(0x7FFFFFFFFFFFFFFF, -2, 2, 1); 56 try test__mulodi4(-2, 0x7FFFFFFFFFFFFFFF, 2, 1); 57 try test__mulodi4(0x7FFFFFFFFFFFFFFF, -1, @as(i64, @bitCast(@as(u64, 0x8000000000000001))), 0); 58 try test__mulodi4(-1, 0x7FFFFFFFFFFFFFFF, @as(i64, @bitCast(@as(u64, 0x8000000000000001))), 0); 59 try test__mulodi4(0x7FFFFFFFFFFFFFFF, 0, 0, 0); 60 try test__mulodi4(0, 0x7FFFFFFFFFFFFFFF, 0, 0); 61 try test__mulodi4(0x7FFFFFFFFFFFFFFF, 1, 0x7FFFFFFFFFFFFFFF, 0); 62 try test__mulodi4(1, 0x7FFFFFFFFFFFFFFF, 0x7FFFFFFFFFFFFFFF, 0); 63 try test__mulodi4(0x7FFFFFFFFFFFFFFF, 2, @as(i64, @bitCast(@as(u64, 0x8000000000000001))), 1); 64 try test__mulodi4(2, 0x7FFFFFFFFFFFFFFF, @as(i64, @bitCast(@as(u64, 0x8000000000000001))), 1); 65 66 try test__mulodi4(@as(i64, @bitCast(@as(u64, 0x8000000000000000))), -2, @as(i64, @bitCast(@as(u64, 0x8000000000000000))), 1); 67 try test__mulodi4(-2, @as(i64, @bitCast(@as(u64, 0x8000000000000000))), @as(i64, @bitCast(@as(u64, 0x8000000000000000))), 1); 68 try test__mulodi4(@as(i64, @bitCast(@as(u64, 0x8000000000000000))), -1, @as(i64, @bitCast(@as(u64, 0x8000000000000000))), 1); 69 try test__mulodi4(-1, @as(i64, @bitCast(@as(u64, 0x8000000000000000))), @as(i64, @bitCast(@as(u64, 0x8000000000000000))), 1); 70 try test__mulodi4(@as(i64, @bitCast(@as(u64, 0x8000000000000000))), 0, 0, 0); 71 try test__mulodi4(0, @as(i64, @bitCast(@as(u64, 0x8000000000000000))), 0, 0); 72 try test__mulodi4(@as(i64, @bitCast(@as(u64, 0x8000000000000000))), 1, @as(i64, @bitCast(@as(u64, 0x8000000000000000))), 0); 73 try test__mulodi4(1, @as(i64, @bitCast(@as(u64, 0x8000000000000000))), @as(i64, @bitCast(@as(u64, 0x8000000000000000))), 0); 74 try test__mulodi4(@as(i64, @bitCast(@as(u64, 0x8000000000000000))), 2, @as(i64, @bitCast(@as(u64, 0x8000000000000000))), 1); 75 try test__mulodi4(2, @as(i64, @bitCast(@as(u64, 0x8000000000000000))), @as(i64, @bitCast(@as(u64, 0x8000000000000000))), 1); 76 77 try test__mulodi4(@as(i64, @bitCast(@as(u64, 0x8000000000000001))), -2, @as(i64, @bitCast(@as(u64, 0x8000000000000001))), 1); 78 try test__mulodi4(-2, @as(i64, @bitCast(@as(u64, 0x8000000000000001))), @as(i64, @bitCast(@as(u64, 0x8000000000000001))), 1); 79 try test__mulodi4(@as(i64, @bitCast(@as(u64, 0x8000000000000001))), -1, 0x7FFFFFFFFFFFFFFF, 0); 80 try test__mulodi4(-1, @as(i64, @bitCast(@as(u64, 0x8000000000000001))), 0x7FFFFFFFFFFFFFFF, 0); 81 try test__mulodi4(@as(i64, @bitCast(@as(u64, 0x8000000000000001))), 0, 0, 0); 82 try test__mulodi4(0, @as(i64, @bitCast(@as(u64, 0x8000000000000001))), 0, 0); 83 try test__mulodi4(@as(i64, @bitCast(@as(u64, 0x8000000000000001))), 1, @as(i64, @bitCast(@as(u64, 0x8000000000000001))), 0); 84 try test__mulodi4(1, @as(i64, @bitCast(@as(u64, 0x8000000000000001))), @as(i64, @bitCast(@as(u64, 0x8000000000000001))), 0); 85 try test__mulodi4(@as(i64, @bitCast(@as(u64, 0x8000000000000001))), 2, @as(i64, @bitCast(@as(u64, 0x8000000000000000))), 1); 86 try test__mulodi4(2, @as(i64, @bitCast(@as(u64, 0x8000000000000001))), @as(i64, @bitCast(@as(u64, 0x8000000000000000))), 1); 87 } 88