| ... | ... | @@ -516,8 +516,8 @@ test "big.int add multi-single" { |
| 516 | 516 | } |
| 517 | 517 | |
| 518 | 518 | test "big.int add multi-multi" { |
| 519 | | const op1 = 0xefefefef7f7f7f7f; |
| 520 | | const op2 = 0xfefefefe9f9f9f9f; |
| 519 | var op1: u128 = 0xefefefef7f7f7f7f; |
| 520 | var op2: u128 = 0xfefefefe9f9f9f9f; |
| 521 | 521 | var a = try Managed.initSet(testing.allocator, op1); |
| 522 | 522 | defer a.deinit(); |
| 523 | 523 | var b = try Managed.initSet(testing.allocator, op2); |
| ... | ... | @@ -830,8 +830,8 @@ test "big.int sub multi-single" { |
| 830 | 830 | } |
| 831 | 831 | |
| 832 | 832 | test "big.int sub multi-multi" { |
| 833 | | const op1 = 0xefefefefefefefefefefefef; |
| 834 | | const op2 = 0xabababababababababababab; |
| 833 | var op1: u128 = 0xefefefefefefefefefefefef; |
| 834 | var op2: u128 = 0xabababababababababababab; |
| 835 | 835 | |
| 836 | 836 | var a = try Managed.initSet(testing.allocator, op1); |
| 837 | 837 | defer a.deinit(); |
| ... | ... | @@ -914,8 +914,8 @@ test "big.int mul multi-single" { |
| 914 | 914 | } |
| 915 | 915 | |
| 916 | 916 | test "big.int mul multi-multi" { |
| 917 | | const op1 = 0x998888efefefefefefefef; |
| 918 | | const op2 = 0x333000abababababababab; |
| 917 | var op1: u256 = 0x998888efefefefefefefef; |
| 918 | var op2: u256 = 0x333000abababababababab; |
| 919 | 919 | var a = try Managed.initSet(testing.allocator, op1); |
| 920 | 920 | defer a.deinit(); |
| 921 | 921 | var b = try Managed.initSet(testing.allocator, op2); |
| ... | ... | @@ -1033,8 +1033,8 @@ test "big.int mulWrap single-single signed" { |
| 1033 | 1033 | } |
| 1034 | 1034 | |
| 1035 | 1035 | test "big.int mulWrap multi-multi unsigned" { |
| 1036 | | const op1 = 0x998888efefefefefefefef; |
| 1037 | | const op2 = 0x333000abababababababab; |
| 1036 | var op1: u256 = 0x998888efefefefefefefef; |
| 1037 | var op2: u256 = 0x333000abababababababab; |
| 1038 | 1038 | var a = try Managed.initSet(testing.allocator, op1); |
| 1039 | 1039 | defer a.deinit(); |
| 1040 | 1040 | var b = try Managed.initSet(testing.allocator, op2); |
| ... | ... | @@ -1044,7 +1044,7 @@ test "big.int mulWrap multi-multi unsigned" { |
| 1044 | 1044 | defer c.deinit(); |
| 1045 | 1045 | try c.mulWrap(&a, &b, .unsigned, 65); |
| 1046 | 1046 | |
| 1047 | | try testing.expect((try c.to(u128)) == (op1 * op2) & ((1 << 65) - 1)); |
| 1047 | try testing.expect((try c.to(u256)) == (op1 * op2) & ((1 << 65) - 1)); |
| 1048 | 1048 | } |
| 1049 | 1049 | |
| 1050 | 1050 | test "big.int mulWrap multi-multi signed" { |
| ... | ... | @@ -1150,8 +1150,8 @@ test "big.int div single-single with rem" { |
| 1150 | 1150 | } |
| 1151 | 1151 | |
| 1152 | 1152 | test "big.int div multi-single no rem" { |
| 1153 | | const op1 = 0xffffeeeeddddcccc; |
| 1154 | | const op2 = 34; |
| 1153 | var op1: u128 = 0xffffeeeeddddcccc; |
| 1154 | var op2: u128 = 34; |
| 1155 | 1155 | |
| 1156 | 1156 | var a = try Managed.initSet(testing.allocator, op1); |
| 1157 | 1157 | defer a.deinit(); |
| ... | ... | @@ -1169,8 +1169,8 @@ test "big.int div multi-single no rem" { |
| 1169 | 1169 | } |
| 1170 | 1170 | |
| 1171 | 1171 | test "big.int div multi-single with rem" { |
| 1172 | | const op1 = 0xffffeeeeddddcccf; |
| 1173 | | const op2 = 34; |
| 1172 | var op1: u128 = 0xffffeeeeddddcccf; |
| 1173 | var op2: u128 = 34; |
| 1174 | 1174 | |
| 1175 | 1175 | var a = try Managed.initSet(testing.allocator, op1); |
| 1176 | 1176 | defer a.deinit(); |
| ... | ... | @@ -1188,8 +1188,8 @@ test "big.int div multi-single with rem" { |
| 1188 | 1188 | } |
| 1189 | 1189 | |
| 1190 | 1190 | test "big.int div multi>2-single" { |
| 1191 | | const op1 = 0xfefefefefefefefefefefefefefefefe; |
| 1192 | | const op2 = 0xefab8; |
| 1191 | var op1: u128 = 0xfefefefefefefefefefefefefefefefe; |
| 1192 | var op2: u128 = 0xefab8; |
| 1193 | 1193 | |
| 1194 | 1194 | var a = try Managed.initSet(testing.allocator, op1); |
| 1195 | 1195 | defer a.deinit(); |
| ... | ... | @@ -1981,22 +1981,22 @@ test "big.int shift-right negative" { |
| 1981 | 1981 | var arg = try Managed.initSet(testing.allocator, -20); |
| 1982 | 1982 | defer arg.deinit(); |
| 1983 | 1983 | try a.shiftRight(&arg, 2); |
| 1984 | | try testing.expect((try a.to(i32)) == -20 >> 2); |
| 1984 | try testing.expect((try a.to(i32)) == -5); // -20 >> 2 == -5 |
| 1985 | 1985 | |
| 1986 | 1986 | var arg2 = try Managed.initSet(testing.allocator, -5); |
| 1987 | 1987 | defer arg2.deinit(); |
| 1988 | 1988 | try a.shiftRight(&arg2, 10); |
| 1989 | | try testing.expect((try a.to(i32)) == -5 >> 10); |
| 1989 | try testing.expect((try a.to(i32)) == -1); // -5 >> 10 == -1 |
| 1990 | 1990 | } |
| 1991 | 1991 | |
| 1992 | | test "big.int shift-left negative" { |
| 1992 | test "big.int shift-right negative" { |
| 1993 | 1993 | var a = try Managed.init(testing.allocator); |
| 1994 | 1994 | defer a.deinit(); |
| 1995 | 1995 | |
| 1996 | 1996 | var arg = try Managed.initSet(testing.allocator, -10); |
| 1997 | 1997 | defer arg.deinit(); |
| 1998 | 1998 | try a.shiftRight(&arg, 1232); |
| 1999 | | try testing.expect((try a.to(i32)) == -10 >> 1232); |
| 1999 | try testing.expect((try a.to(i32)) == -1); // -10 >> 1232 == -1 |
| 2000 | 2000 | } |
| 2001 | 2001 | |
| 2002 | 2002 | test "big.int sat shift-left simple unsigned" { |
| ... | ... | @@ -2064,34 +2064,35 @@ test "big.int sat shift-left signed simple positive" { |
| 2064 | 2064 | } |
| 2065 | 2065 | |
| 2066 | 2066 | test "big.int sat shift-left signed multi positive" { |
| 2067 | | const x = 1; |
| 2067 | var x: SignedDoubleLimb = 1; |
| 2068 | 2068 | const shift = @bitSizeOf(SignedDoubleLimb) - 1; |
| 2069 | 2069 | |
| 2070 | 2070 | var a = try Managed.initSet(testing.allocator, x); |
| 2071 | 2071 | defer a.deinit(); |
| 2072 | 2072 | try a.shiftLeftSat(&a, shift, .signed, @bitSizeOf(SignedDoubleLimb)); |
| 2073 | 2073 | |
| 2074 | | try testing.expect((try a.to(SignedDoubleLimb)) == @as(SignedDoubleLimb, x) <<| shift); |
| 2074 | try testing.expect((try a.to(SignedDoubleLimb)) == x <<| shift); |
| 2075 | 2075 | } |
| 2076 | 2076 | |
| 2077 | 2077 | test "big.int sat shift-left signed multi negative" { |
| 2078 | | const x = -1; |
| 2078 | var x: SignedDoubleLimb = -1; |
| 2079 | 2079 | const shift = @bitSizeOf(SignedDoubleLimb) - 1; |
| 2080 | 2080 | |
| 2081 | 2081 | var a = try Managed.initSet(testing.allocator, x); |
| 2082 | 2082 | defer a.deinit(); |
| 2083 | 2083 | try a.shiftLeftSat(&a, shift, .signed, @bitSizeOf(SignedDoubleLimb)); |
| 2084 | 2084 | |
| 2085 | | try testing.expect((try a.to(SignedDoubleLimb)) == @as(SignedDoubleLimb, x) <<| shift); |
| 2085 | try testing.expect((try a.to(SignedDoubleLimb)) == x <<| shift); |
| 2086 | 2086 | } |
| 2087 | 2087 | |
| 2088 | 2088 | test "big.int bitNotWrap unsigned simple" { |
| 2089 | | var a = try Managed.initSet(testing.allocator, 123); |
| 2089 | var x: u10 = 123; |
| 2090 | var a = try Managed.initSet(testing.allocator, x); |
| 2090 | 2091 | defer a.deinit(); |
| 2091 | 2092 | |
| 2092 | 2093 | try a.bitNotWrap(&a, .unsigned, 10); |
| 2093 | 2094 | |
| 2094 | | try testing.expect((try a.to(u10)) == ~@as(u10, 123)); |
| 2095 | try testing.expect((try a.to(u10)) == ~x); |
| 2095 | 2096 | } |
| 2096 | 2097 | |
| 2097 | 2098 | test "big.int bitNotWrap unsigned multi" { |
| ... | ... | @@ -2104,12 +2105,13 @@ test "big.int bitNotWrap unsigned multi" { |
| 2104 | 2105 | } |
| 2105 | 2106 | |
| 2106 | 2107 | test "big.int bitNotWrap signed simple" { |
| 2108 | var x: i11 = -456; |
| 2107 | 2109 | var a = try Managed.initSet(testing.allocator, -456); |
| 2108 | 2110 | defer a.deinit(); |
| 2109 | 2111 | |
| 2110 | 2112 | try a.bitNotWrap(&a, .signed, 11); |
| 2111 | 2113 | |
| 2112 | | try testing.expect((try a.to(i11)) == ~@as(i11, -456)); |
| 2114 | try testing.expect((try a.to(i11)) == ~x); |
| 2113 | 2115 | } |
| 2114 | 2116 | |
| 2115 | 2117 | test "big.int bitNotWrap signed multi" { |
| ... | ... | @@ -2232,14 +2234,16 @@ test "big.int bitwise xor simple" { |
| 2232 | 2234 | } |
| 2233 | 2235 | |
| 2234 | 2236 | test "big.int bitwise xor multi-limb" { |
| 2235 | | var a = try Managed.initSet(testing.allocator, maxInt(Limb) + 1); |
| 2237 | var x: DoubleLimb = maxInt(Limb) + 1; |
| 2238 | var y: DoubleLimb = maxInt(Limb); |
| 2239 | var a = try Managed.initSet(testing.allocator, x); |
| 2236 | 2240 | defer a.deinit(); |
| 2237 | | var b = try Managed.initSet(testing.allocator, maxInt(Limb)); |
| 2241 | var b = try Managed.initSet(testing.allocator, y); |
| 2238 | 2242 | defer b.deinit(); |
| 2239 | 2243 | |
| 2240 | 2244 | try a.bitXor(&a, &b); |
| 2241 | 2245 | |
| 2242 | | try testing.expect((try a.to(DoubleLimb)) == (maxInt(Limb) + 1) ^ maxInt(Limb)); |
| 2246 | try testing.expect((try a.to(DoubleLimb)) == x ^ y); |
| 2243 | 2247 | } |
| 2244 | 2248 | |
| 2245 | 2249 | test "big.int bitwise xor single negative simple" { |
| ... | ... | @@ -2327,7 +2331,6 @@ test "big.int bitwise or multi-limb" { |
| 2327 | 2331 | |
| 2328 | 2332 | try a.bitOr(&a, &b); |
| 2329 | 2333 | |
| 2330 | | // TODO: big.int.cpp or is wrong on multi-limb. |
| 2331 | 2334 | try testing.expect((try a.to(DoubleLimb)) == (maxInt(Limb) + 1) + maxInt(Limb)); |
| 2332 | 2335 | } |
| 2333 | 2336 | |