From b63dc86c7eb4b4888759da475fc899e869ddb277 Mon Sep 17 00:00:00 2001 From: Alivecow Date: Thu, 21 Nov 2024 16:56:28 +0100 Subject: [PATCH] WIP: feat: Change soring behaviour and add new testcase --- src/tasks/tasks01/pfmath.rs | 54 +++++++++++++++++++++++++++++++++++++ src/utils/field.rs | 21 ++++++++------- 2 files changed, 66 insertions(+), 9 deletions(-) diff --git a/src/tasks/tasks01/pfmath.rs b/src/tasks/tasks01/pfmath.rs index 9742be8..71d6991 100644 --- a/src/tasks/tasks01/pfmath.rs +++ b/src/tasks/tasks01/pfmath.rs @@ -138,4 +138,58 @@ mod tests { assert_eq!(json!(result), expected); //assert_eq!(BASE64_STANDARD.encode(product), "MoAAAAAAAAAAAAAAAAAAAA=="); } + + #[test] + fn test_poly_sorting_02() { + let json1 = json!( + {"polys": [ + [ + "AQAAAAAAAAAAAAAAAAAAAA==", // 0x01 + "AgAAAAAAAAAAAAAAAAAAAA==", // 0x02 + "AwAAAAAAAAAAAAAAAAAAAA==" // 0x03 + ], + [ + "AQAAAAAAAAAAAAAAAAAAAA==", // 0x01 + "AgAAAAAAAAAAAAAAAAAAAA==", // 0x02 + "BAAAAAAAAAAAAAAAAAAAAA==" // 0x04 + ], + [ + "AQAAAAAAAAAAAAAAAAAAAA==", // 0x01 + "AgAAAAAAAAAAAAAAAAAAAA==" // 0x02 + ], + [ + "AQAAAAAAAAAAAAAAAAAAAA==", // 0x01 + "AwAAAAAAAAAAAAAAAAAAAA==" // 0x03 + ] + ],}); + + let expected = json!([ + [ + "WereNoStrangersToLoveA==", + "YouKnowTheRulesAAAAAAA==", + "AndSoDoIAAAAAAAAAAAAAA==" + ], + [ + "NeverGonnaMakeYouCryAA==", + "NeverGonnaSayGoodbyeAA==", + "NeverGonnaTellALieAAAA==", + "AndHurtYouAAAAAAAAAAAA==" + ], + [ + "NeverGonnaGiveYouUpAAA==", + "NeverGonnaLetYouDownAA==", + "NeverGonnaRunAroundAAA==", + "AndDesertYouAAAAAAAAAA==" + ] + ]); + + let sorted_array = gfpoly_sort(&json1).unwrap(); + let mut result: Vec> = vec![]; + for poly in sorted_array { + result.push(poly.to_c_array()); + } + + assert_eq!(json!(result), expected); + //assert_eq!(BASE64_STANDARD.encode(product), "MoAAAAAAAAAAAAAAAAAAAA=="); + } } diff --git a/src/utils/field.rs b/src/utils/field.rs index a682eff..2c80b51 100644 --- a/src/utils/field.rs +++ b/src/utils/field.rs @@ -324,17 +324,20 @@ impl PartialEq for Polynomial { } impl PartialOrd for Polynomial { - fn partial_cmp(&self, other: &Self) -> Option { - if self.polynomial.len() != other.polynomial.len() { - return Some(self.polynomial.len().cmp(&other.polynomial.len())); - } else { - for (field_a, field_b) in self.as_ref().iter().rev().zip(other.as_ref().iter().rev()) { - match field_a.cmp(field_b) { - std::cmp::Ordering::Equal => continue, - other => return Some(other.reverse()), + fn partial_cmp(&self, other: &Self) -> Option { + match self.polynomial.len().cmp(&other.polynomial.len()) { + Ordering::Equal => { + for (field_a, field_b) in + self.as_ref().iter().rev().zip(other.as_ref().iter().rev()) + { + match field_a.cmp(field_b) { + std::cmp::Ordering::Equal => continue, + other => return Some(other.reverse()), + } } + Some(Ordering::Equal) } - Some(Ordering::Equal) + other => Some(other), } } }