From 42eb1f5fd2e3cd1a7cf8273bfa2596634399c12b Mon Sep 17 00:00:00 2001 From: ohad-agadi Date: Wed, 29 Apr 2026 10:09:15 +0300 Subject: [PATCH] fixed a bug in znpow2 from_base_u64 --- src/rings/zn/zn_pow2.rs | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/rings/zn/zn_pow2.rs b/src/rings/zn/zn_pow2.rs index d3a5088..628f444 100644 --- a/src/rings/zn/zn_pow2.rs +++ b/src/rings/zn/zn_pow2.rs @@ -135,7 +135,9 @@ where x } }); - Z2kEl(SmallVec::from_iter(data)) + let mut data = SmallVec::from_iter(data); + data.resize(self.n_limbs, 0); + Z2kEl(data) } } @@ -624,4 +626,24 @@ mod tests { crate::rings::finite::generic_tests::test_finite_ring_axioms(&R); } } + + #[test] + fn test_abs_from_base_u64_repr_roundtrip() { + let r: Z2k = Z2k::new(130); + let rb = r.get_ring(); + let x = rb.from_base_u64_repr([1u64, 2, 0xFFFF_FFFF_FFFF_FFFDu64].into_iter()); + let y = rb.from_base_u64_repr(rb.abs_base_u64_repr(&x)); + assert_el_eq!(r, x, y); + } + + #[test] + fn test_from_base_u64_repr_iterator_shorter_than_limbs() { + let r: Z2k = Z2k::new(130); + let rb = r.get_ring(); + assert_eq!(rb.n_limbs, 3); + + let padded = rb.from_base_u64_repr([0xDEAD_BEEF_CAFEu64].into_iter()); + let full = rb.from_base_u64_repr([0xDEAD_BEEF_CAFEu64, 0, 0].into_iter()); + assert_el_eq!(r, padded, full); + } }