Skip to content

Commit 757cc86

Browse files
implement From<i128> for QM31
1 parent 4dce0c6 commit 757cc86

File tree

2 files changed

+55
-6
lines changed

2 files changed

+55
-6
lines changed

crates/starknet-types-core/src/qm31/mod.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -254,10 +254,6 @@ impl QM31 {
254254
let rhs_inv = rhs.inverse()?;
255255
Ok(self.mul(&rhs_inv))
256256
}
257-
258-
pub fn is_zero(&self) -> bool {
259-
*self == Self::ZERO
260-
}
261257
}
262258

263259
impl From<&QM31> for Felt {

crates/starknet-types-core/src/qm31/primitive_conversions.rs

Lines changed: 55 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,20 @@ impl From<u128> for QM31 {
4949
}
5050
}
5151

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+
5266
macro_rules! try_from_qm31_to_unsigned {
5367
($into: ty) => {
5468
impl TryFrom<QM31> for $into {
@@ -86,7 +100,7 @@ mod tests {
86100
use crate::qm31::QM31;
87101

88102
#[test]
89-
fn test_qm31_to_primitive_to_qm31_valid_values() {
103+
fn test_qm31_to_unsigned_values_to_qm31_valid_values() {
90104
let u8_max = u8::MAX;
91105
assert_eq!(u8_max, u8::try_from(QM31::from(u8_max)).unwrap());
92106
let u8_zero: u8 = 0;
@@ -124,8 +138,47 @@ mod tests {
124138
);
125139
}
126140

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+
127180
#[test]
128-
fn qm31_to_primitive_out_of_bounds() {
181+
fn qm31_to_unsigned_values_out_of_bounds() {
129182
let qm31_u128_max = QM31::from(u128::MAX);
130183
assert!(u8::try_from(qm31_u128_max).is_err());
131184
assert!(u16::try_from(qm31_u128_max).is_err());

0 commit comments

Comments
 (0)