@@ -49,6 +49,20 @@ impl From<u128> for QM31 {
49
49
}
50
50
}
51
51
52
+ impl From < i128 > for QM31 {
53
+ fn from ( value : i128 ) -> QM31 {
54
+ let unsigned_128 = u128:: from_be_bytes ( value. to_be_bytes ( ) ) ;
55
+
56
+ let qm31 = QM31 :: from ( unsigned_128) ;
57
+
58
+ if value. is_positive ( ) {
59
+ qm31
60
+ } else {
61
+ qm31. neg ( )
62
+ }
63
+ }
64
+ }
65
+
52
66
macro_rules! try_from_qm31_to_unsigned {
53
67
( $into: ty) => {
54
68
impl TryFrom <QM31 > for $into {
@@ -86,7 +100,7 @@ mod tests {
86
100
use crate :: qm31:: QM31 ;
87
101
88
102
#[ test]
89
- fn test_qm31_to_primitive_to_qm31_valid_values ( ) {
103
+ fn test_qm31_to_unsigned_values_to_qm31_valid_values ( ) {
90
104
let u8_max = u8:: MAX ;
91
105
assert_eq ! ( u8_max, u8 :: try_from( QM31 :: from( u8_max) ) . unwrap( ) ) ;
92
106
let u8_zero: u8 = 0 ;
@@ -124,8 +138,47 @@ mod tests {
124
138
) ;
125
139
}
126
140
141
+ // #[test]
142
+ // fn test_qm31_to_signed_values_to_qm31_valid_values() {
143
+ // let i8_max = i8::MAX;
144
+ // assert_eq!(i8_max, i8::try_from(QM31::from(i8_max)).unwrap());
145
+ // let i8_zero: i8 = 0;
146
+ // assert_eq!(i8_zero, i8::try_from(QM31::from(i8_zero)).unwrap());
147
+
148
+ // let i16_max = i16::MAX;
149
+ // assert_eq!(i16_max, i16::try_from(QM31::from(i16_max)).unwrap());
150
+ // let i16_zero: i16 = 0;
151
+ // assert_eq!(u16_zero, i16::try_from(QM31::from(i16_zero)).unwrap());
152
+
153
+ // let i32_max = i32::MAX;
154
+ // assert_eq!(i32_max, i32::try_from(QM31::from(i32_max)).unwrap());
155
+ // let i32_zero: i32 = 0;
156
+ // assert_eq!(i32_zero, i32::try_from(QM31::from(i32_zero)).unwrap());
157
+
158
+ // let i64_max = i64::MAX;
159
+ // assert_eq!(i64_max, i64::try_from(QM31::from(i64_max)).unwrap());
160
+ // let i64_zero: i64 = 0;
161
+ // assert_eq!(i64_zero, i64::try_from(QM31::from(i64_zero)).unwrap());
162
+
163
+ // let i128_max = i128::MAX;
164
+ // assert_eq!(i128_max, i128::try_from(QM31::from(i128_max)).unwrap());
165
+ // let i128_zero: i128 = 0;
166
+ // assert_eq!(i128_zero, i128::try_from(QM31::from(i128_zero)).unwrap());
167
+
168
+ // let isize_max_value = isize::MAX;
169
+ // assert_eq!(
170
+ // isize_max_value,
171
+ // isize::try_from(QM31::from(isize_max_value)).unwrap()
172
+ // );
173
+ // let isize_zero_value: isize = 0;
174
+ // assert_eq!(
175
+ // isize_zero_value,
176
+ // isize::try_from(QM31::from(isize_zero_value)).unwrap()
177
+ // );
178
+ // }
179
+
127
180
#[ test]
128
- fn qm31_to_primitive_out_of_bounds ( ) {
181
+ fn qm31_to_unsigned_values_out_of_bounds ( ) {
129
182
let qm31_u128_max = QM31 :: from ( u128:: MAX ) ;
130
183
assert ! ( u8 :: try_from( qm31_u128_max) . is_err( ) ) ;
131
184
assert ! ( u16 :: try_from( qm31_u128_max) . is_err( ) ) ;
0 commit comments