1
- use compiler_builtins:: int:: { i256, u256, HInt , MinInt } ;
1
+ use compiler_builtins:: int:: { i256, u256, HInt , Int , MinInt } ;
2
2
3
3
const LOHI_SPLIT : u128 = 0xaaaaaaaaaaaaaaaaffffffffffffffff ;
4
4
@@ -34,7 +34,9 @@ fn widen_mul_u128() {
34
34
35
35
let mut errors = Vec :: new ( ) ;
36
36
for ( i, ( a, b, exp) ) in tests. iter ( ) . enumerate ( ) {
37
- let res = a. zero_widen_mul ( * b) ;
37
+ let res = a. widen_mul ( * b) ;
38
+ let res_z = a. zero_widen_mul ( * b) ;
39
+ assert_eq ! ( res, res_z) ;
38
40
if res != * exp {
39
41
errors. push ( ( i, a, b, exp, res) ) ;
40
42
}
@@ -52,13 +54,17 @@ fn widen_mul_i128() {
52
54
(
53
55
i128:: MAX / 2 ,
54
56
2_i128 ,
55
- i256 ( [ u64:: MAX , u64:: MAX , u64 :: MAX , u64 :: MAX ] ) ,
57
+ i256 ( [ u64:: MAX - 1 , u64:: MAX >> 1 , 0 , 0 ] ) ,
56
58
) ,
57
- ( i128:: MAX , 2_i128 , i256 ( [ u64:: MAX - 1 , u64:: MAX , 1 , 0 ] ) ) ,
58
- ( i128:: MIN , 2_i128 , i256 ( [ u64:: MAX - 1 , u64:: MAX , 1 , 0 ] ) ) ,
59
- ( i128:: MAX , i128:: MAX , i256 ( [ 1 , 0 , u64:: MAX - 1 , u64:: MAX ] ) ) ,
60
- ( i128:: MAX , i128:: MAX , i256 ( [ 1 , 0 , u64:: MAX - 1 , u64:: MAX ] ) ) ,
61
- ( i128:: MIN , i128:: MIN , i256:: ZERO ) ,
59
+ ( i128:: MAX , 2_i128 , i256 ( [ u64:: MAX - 1 , u64:: MAX , 0 , 0 ] ) ) ,
60
+ ( i128:: MIN , 2_i128 , i256 ( [ 0 , 0 , u64:: MAX , u64:: MAX ] ) ) ,
61
+ (
62
+ i128:: MAX ,
63
+ i128:: MAX ,
64
+ i256 ( [ 1 , 0 , u64:: MAX - 1 , u64:: MAX >> 2 ] ) ,
65
+ ) ,
66
+ ( i128:: MAX , i128:: MIN , i256 ( [ 0 , 0 , 0 , 0b11 << 62 ] ) ) ,
67
+ ( i128:: MIN , i128:: MIN , i256 ( [ 0 , 0 , 0 , 0 ] ) ) ,
62
68
( 1234 , 0 , i256:: ZERO ) ,
63
69
( 0 , 1234 , i256:: ZERO ) ,
64
70
( -1234 , 0 , i256:: ZERO ) ,
@@ -67,7 +73,7 @@ fn widen_mul_i128() {
67
73
68
74
let mut errors = Vec :: new ( ) ;
69
75
for ( i, ( a, b, exp) ) in tests. iter ( ) . enumerate ( ) {
70
- let res = a. zero_widen_mul ( * b) ;
76
+ let res = a. widen_mul ( * b) ;
71
77
if res != * exp {
72
78
errors. push ( ( i, a, b, exp, res) ) ;
73
79
}
0 commit comments