diff --git a/corelib/src/circuit.cairo b/corelib/src/circuit.cairo index a977784a774..7f4b64dd2f4 100644 --- a/corelib/src/circuit.cairo +++ b/corelib/src/circuit.cairo @@ -571,3 +571,17 @@ impl U384TryIntoU256 of TryInto { conversions::try_into_u256(self) } } + +impl U384Zero of crate::num::traits::Zero { + fn zero() -> u384 { + u384 { limb0: 0, limb1: 0, limb2: 0, limb3: 0 } + } + + fn is_zero(self: @u384) -> bool { + *self == Self::zero() + } + + fn is_non_zero(self: @u384) -> bool { + !self.is_zero() + } +} diff --git a/corelib/src/test/circuit_test.cairo b/corelib/src/test/circuit_test.cairo index aa8d0a79ee1..c2aa686dcd4 100644 --- a/corelib/src/test/circuit_test.cairo +++ b/corelib/src/test/circuit_test.cairo @@ -4,6 +4,7 @@ use crate::circuit::{ AddInputResultTrait, CircuitInputs, }; +use crate::num::traits::Zero; use crate::traits::TryInto; #[test] @@ -133,3 +134,10 @@ fn test_fill_inputs_loop() { let modulus = TryInto::<_, CircuitModulus>::try_into([55, 0, 0, 0]).unwrap(); circuit_inputs.done().eval(modulus).unwrap(); } + +#[test] +fn test_u384_zero() { + assert_eq!(Zero::zero(), u384 { limb0: 0, limb1: 0, limb2: 0, limb3: 0 }); + assert!(Zero::is_zero(@u384 { limb0: 0, limb1: 0, limb2: 0, limb3: 0 })); + assert!(Zero::is_non_zero(@u384 { limb0: 0, limb1: 1, limb2: 0, limb3: 0 })); +}