master
  1// Disable formatting to avoid unnecessary source repository bloat.
  2// zig fmt: off
  3const testing = @import("std").testing;
  4const builtin = @import("builtin");
  5const __udivmodsi4 = @import("int.zig").__udivmodsi4;
  6
  7fn test__udivmodsi4(a: u32, b: u32, expected_q: u32, expected_r: u32) !void {
  8    var r: u32 = undefined;
  9    const q = __udivmodsi4(a, b, &r);
 10    try testing.expectEqual(expected_q, q);
 11    try testing.expectEqual(expected_r, r);
 12}
 13
 14test "udivmodsi4" {
 15    for (cases) |case| {
 16        try test__udivmodsi4(case[0], case[1], case[2], case[3]);
 17    }
 18}
 19
 20const cases = [_][4]u32{
 21    [_]u32{0x00000000, 0x00000001, 0x00000000, 0x00000000},
 22    [_]u32{0x00000000, 0x00000002, 0x00000000, 0x00000000},
 23    [_]u32{0x00000000, 0x00000003, 0x00000000, 0x00000000},
 24    [_]u32{0x00000000, 0x00000010, 0x00000000, 0x00000000},
 25    [_]u32{0x00000000, 0x078644FA, 0x00000000, 0x00000000},
 26    [_]u32{0x00000000, 0x0747AE14, 0x00000000, 0x00000000},
 27    [_]u32{0x00000000, 0x7FFFFFFF, 0x00000000, 0x00000000},
 28    [_]u32{0x00000000, 0x80000000, 0x00000000, 0x00000000},
 29    [_]u32{0x00000000, 0xFFFFFFFD, 0x00000000, 0x00000000},
 30    [_]u32{0x00000000, 0xFFFFFFFE, 0x00000000, 0x00000000},
 31    [_]u32{0x00000000, 0xFFFFFFFF, 0x00000000, 0x00000000},
 32    [_]u32{0x00000001, 0x00000001, 0x00000001, 0x00000000}, // 1/1 => q=1, r=0
 33    [_]u32{0x00000001, 0x00000002, 0x00000000, 0x00000001},
 34    [_]u32{0x00000001, 0x00000003, 0x00000000, 0x00000001},
 35    [_]u32{0x00000001, 0x00000010, 0x00000000, 0x00000001},
 36    [_]u32{0x00000001, 0x078644FA, 0x00000000, 0x00000001},
 37    [_]u32{0x00000001, 0x0747AE14, 0x00000000, 0x00000001},
 38    [_]u32{0x00000001, 0x7FFFFFFF, 0x00000000, 0x00000001},
 39    [_]u32{0x00000001, 0x80000000, 0x00000000, 0x00000001},
 40    [_]u32{0x00000001, 0xFFFFFFFD, 0x00000000, 0x00000001},
 41    [_]u32{0x00000001, 0xFFFFFFFE, 0x00000000, 0x00000001},
 42    [_]u32{0x00000001, 0xFFFFFFFF, 0x00000000, 0x00000001},
 43    [_]u32{0x00000001, 0x00000000, 0x00000000, 0x00000001},
 44    [_]u32{0x00000001, 0x00000001, 0x00000001, 0x00000000},
 45    [_]u32{0x00000001, 0x00000002, 0x00000000, 0x00000001},
 46    [_]u32{0x00000001, 0x00000003, 0x00000000, 0x00000001},
 47    [_]u32{0x00000001, 0x00000010, 0x00000000, 0x00000001},
 48    [_]u32{0x00000001, 0x078644FA, 0x00000000, 0x00000001},
 49    [_]u32{0x00000001, 0x0747AE14, 0x00000000, 0x00000001},
 50    [_]u32{0x00000001, 0x7FFFFFFF, 0x00000000, 0x00000001},
 51    [_]u32{0x00000001, 0x80000000, 0x00000000, 0x00000001},
 52    [_]u32{0x00000001, 0xFFFFFFFD, 0x00000000, 0x00000001},
 53    [_]u32{0x00000001, 0xFFFFFFFE, 0x00000000, 0x00000001},
 54    [_]u32{0x00000001, 0xFFFFFFFF, 0x00000000, 0x00000001},
 55    [_]u32{0x00000002, 0x00000001, 0x00000002, 0x00000000},
 56    [_]u32{0x00000002, 0x00000002, 0x00000001, 0x00000000},
 57    [_]u32{0x00000002, 0x00000003, 0x00000000, 0x00000002},
 58    [_]u32{0x00000002, 0x00000010, 0x00000000, 0x00000002},
 59    [_]u32{0x00000002, 0x078644FA, 0x00000000, 0x00000002},
 60    [_]u32{0x00000002, 0x0747AE14, 0x00000000, 0x00000002},
 61    [_]u32{0x00000002, 0x7FFFFFFF, 0x00000000, 0x00000002},
 62    [_]u32{0x00000002, 0x80000000, 0x00000000, 0x00000002},
 63    [_]u32{0x00000002, 0xFFFFFFFD, 0x00000000, 0x00000002},
 64    [_]u32{0x00000002, 0xFFFFFFFE, 0x00000000, 0x00000002},
 65    [_]u32{0x00000002, 0xFFFFFFFF, 0x00000000, 0x00000002},
 66
 67    [_]u32{0x00000010, 0x00000001, 0x00000010, 0x00000000},
 68    [_]u32{0x00000010, 0x00000002, 0x00000008, 0x00000000},
 69    [_]u32{0x00000010, 0x00000003, 0x00000005, 0x00000001},
 70    [_]u32{0x00000010, 0x00000010, 0x00000001, 0x00000000},
 71    [_]u32{0x00000010, 0x078644FA, 0x00000000, 0x00000010},
 72    [_]u32{0x00000010, 0x0747AE14, 0x00000000, 0x00000010},
 73    [_]u32{0x00000010, 0x7FFFFFFF, 0x00000000, 0x00000010},
 74    [_]u32{0x00000010, 0x80000000, 0x00000000, 0x00000010},
 75    [_]u32{0x00000010, 0xFFFFFFFD, 0x00000000, 0x00000010},
 76    [_]u32{0x00000010, 0xFFFFFFFE, 0x00000000, 0x00000010},
 77    [_]u32{0x00000010, 0xFFFFFFFF, 0x00000000, 0x00000010},
 78
 79    [_]u32{0x078644FA, 0x00000001, 0x078644FA, 0x00000000},
 80    [_]u32{0x078644FA, 0x00000002, 0x03C3227D, 0x00000000},
 81    [_]u32{0x078644FA, 0x00000003, 0x028216FE, 0x00000000},
 82    [_]u32{0x078644FA, 0x00000010, 0x0078644F, 0x0000000A},
 83    [_]u32{0x078644FA, 0x078644FA, 0x00000001, 0x00000000},
 84    [_]u32{0x078644FA, 0x0747AE14, 0x00000001, 0x003E96E6},
 85    [_]u32{0x078644FA, 0x7FFFFFFF, 0x00000000, 0x078644FA},
 86    [_]u32{0x078644FA, 0x80000000, 0x00000000, 0x078644FA},
 87    [_]u32{0x078644FA, 0xFFFFFFFD, 0x00000000, 0x078644FA},
 88    [_]u32{0x078644FA, 0xFFFFFFFE, 0x00000000, 0x078644FA},
 89    [_]u32{0x078644FA, 0xFFFFFFFF, 0x00000000, 0x078644FA},
 90    [_]u32{0x0747AE14, 0x00000001, 0x0747AE14, 0x00000000},
 91    [_]u32{0x0747AE14, 0x00000002, 0x03A3D70A, 0x00000000},
 92    [_]u32{0x0747AE14, 0x00000003, 0x026D3A06, 0x00000002},
 93    [_]u32{0x0747AE14, 0x00000010, 0x00747AE1, 0x00000004},
 94    [_]u32{0x0747AE14, 0x078644FA, 0x00000000, 0x0747AE14},
 95    [_]u32{0x0747AE14, 0x0747AE14, 0x00000001, 0x00000000},
 96    [_]u32{0x0747AE14, 0x7FFFFFFF, 0x00000000, 0x0747AE14},
 97    [_]u32{0x0747AE14, 0x80000000, 0x00000000, 0x0747AE14},
 98    [_]u32{0x0747AE14, 0xFFFFFFFD, 0x00000000, 0x0747AE14},
 99    [_]u32{0x0747AE14, 0xFFFFFFFE, 0x00000000, 0x0747AE14},
100    [_]u32{0x0747AE14, 0xFFFFFFFF, 0x00000000, 0x0747AE14},
101    [_]u32{0x7FFFFFFF, 0x00000001, 0x7FFFFFFF, 0x00000000},
102    [_]u32{0x7FFFFFFF, 0x00000002, 0x3FFFFFFF, 0x00000001},
103    [_]u32{0x7FFFFFFF, 0x00000003, 0x2AAAAAAA, 0x00000001},
104    [_]u32{0x7FFFFFFF, 0x00000010, 0x07FFFFFF, 0x0000000F},
105    [_]u32{0x7FFFFFFF, 0x078644FA, 0x00000011, 0x00156B65},
106    [_]u32{0x7FFFFFFF, 0x0747AE14, 0x00000011, 0x043D70AB},
107    [_]u32{0x7FFFFFFF, 0x7FFFFFFF, 0x00000001, 0x00000000},
108    [_]u32{0x7FFFFFFF, 0x80000000, 0x00000000, 0x7FFFFFFF},
109    [_]u32{0x7FFFFFFF, 0xFFFFFFFD, 0x00000000, 0x7FFFFFFF},
110    [_]u32{0x7FFFFFFF, 0xFFFFFFFE, 0x00000000, 0x7FFFFFFF},
111    [_]u32{0x7FFFFFFF, 0xFFFFFFFF, 0x00000000, 0x7FFFFFFF},
112    [_]u32{0x80000000, 0x00000001, 0x80000000, 0x00000000},
113    [_]u32{0x80000000, 0x00000002, 0x40000000, 0x00000000},
114    [_]u32{0x80000000, 0x00000003, 0x2AAAAAAA, 0x00000002},
115    [_]u32{0x80000000, 0x00000010, 0x08000000, 0x00000000},
116    [_]u32{0x80000000, 0x078644FA, 0x00000011, 0x00156B66},
117    [_]u32{0x80000000, 0x0747AE14, 0x00000011, 0x043D70AC},
118    [_]u32{0x80000000, 0x7FFFFFFF, 0x00000001, 0x00000001},
119    [_]u32{0x80000000, 0x80000000, 0x00000001, 0x00000000},
120    [_]u32{0x80000000, 0xFFFFFFFD, 0x00000000, 0x80000000},
121    [_]u32{0x80000000, 0xFFFFFFFE, 0x00000000, 0x80000000},
122    [_]u32{0x80000000, 0xFFFFFFFF, 0x00000000, 0x80000000},
123    [_]u32{0xFFFFFFFD, 0x00000001, 0xFFFFFFFD, 0x00000000},
124    [_]u32{0xFFFFFFFD, 0x00000002, 0x7FFFFFFE, 0x00000001},
125    [_]u32{0xFFFFFFFD, 0x00000003, 0x55555554, 0x00000001},
126    [_]u32{0xFFFFFFFD, 0x00000010, 0x0FFFFFFF, 0x0000000D},
127    [_]u32{0xFFFFFFFD, 0x078644FA, 0x00000022, 0x002AD6C9},
128    [_]u32{0xFFFFFFFD, 0x0747AE14, 0x00000023, 0x01333341},
129    [_]u32{0xFFFFFFFD, 0x7FFFFFFF, 0x00000001, 0x7FFFFFFE},
130    [_]u32{0xFFFFFFFD, 0x80000000, 0x00000001, 0x7FFFFFFD},
131    [_]u32{0xFFFFFFFD, 0xFFFFFFFD, 0x00000001, 0x00000000},
132    [_]u32{0xFFFFFFFD, 0xFFFFFFFE, 0x00000000, 0xFFFFFFFD},
133    [_]u32{0xFFFFFFFD, 0xFFFFFFFF, 0x00000000, 0xFFFFFFFD},
134    [_]u32{0xFFFFFFFE, 0x00000001, 0xFFFFFFFE, 0x00000000},
135    [_]u32{0xFFFFFFFE, 0x00000002, 0x7FFFFFFF, 0x00000000},
136    [_]u32{0xFFFFFFFE, 0x00000003, 0x55555554, 0x00000002},
137    [_]u32{0xFFFFFFFE, 0x00000010, 0x0FFFFFFF, 0x0000000E},
138    [_]u32{0xFFFFFFFE, 0x078644FA, 0x00000022, 0x002AD6CA},
139    [_]u32{0xFFFFFFFE, 0x0747AE14, 0x00000023, 0x01333342},
140    [_]u32{0xFFFFFFFE, 0x7FFFFFFF, 0x00000002, 0x00000000},
141    [_]u32{0xFFFFFFFE, 0x80000000, 0x00000001, 0x7FFFFFFE},
142    [_]u32{0xFFFFFFFE, 0xFFFFFFFD, 0x00000001, 0x00000001},
143    [_]u32{0xFFFFFFFE, 0xFFFFFFFE, 0x00000001, 0x00000000},
144    [_]u32{0xFFFFFFFE, 0xFFFFFFFF, 0x00000000, 0xFFFFFFFE},
145    [_]u32{0xFFFFFFFF, 0x00000001, 0xFFFFFFFF, 0x00000000},
146    [_]u32{0xFFFFFFFF, 0x00000002, 0x7FFFFFFF, 0x00000001},
147    [_]u32{0xFFFFFFFF, 0x00000003, 0x55555555, 0x00000000},
148    [_]u32{0xFFFFFFFF, 0x00000010, 0x0FFFFFFF, 0x0000000F},
149    [_]u32{0xFFFFFFFF, 0x078644FA, 0x00000022, 0x002AD6CB},
150    [_]u32{0xFFFFFFFF, 0x0747AE14, 0x00000023, 0x01333343},
151    [_]u32{0xFFFFFFFF, 0x7FFFFFFF, 0x00000002, 0x00000001},
152    [_]u32{0xFFFFFFFF, 0x80000000, 0x00000001, 0x7FFFFFFF},
153    [_]u32{0xFFFFFFFF, 0xFFFFFFFD, 0x00000001, 0x00000002},
154    [_]u32{0xFFFFFFFF, 0xFFFFFFFE, 0x00000001, 0x00000001},
155    [_]u32{0xFFFFFFFF, 0xFFFFFFFF, 0x00000001, 0x00000000},
156};