From 26ca12b4198172406492ac93500be6639ebcd6ea Mon Sep 17 00:00:00 2001 From: 0xalivecow Date: Sat, 2 Nov 2024 14:18:10 +0100 Subject: [PATCH] feat: Add more tests to b2p edge cases --- src/tasks/tasks01/block2poly.rs | 42 +++++++++++++++++++++++++++++++++ src/utils/poly.rs | 40 +++++++++++++++++-------------- 2 files changed, 64 insertions(+), 18 deletions(-) diff --git a/src/tasks/tasks01/block2poly.rs b/src/tasks/tasks01/block2poly.rs index dbdaf66..b6a215d 100644 --- a/src/tasks/tasks01/block2poly.rs +++ b/src/tasks/tasks01/block2poly.rs @@ -51,4 +51,46 @@ mod tests { Ok(()) } + + #[test] + fn block2poly_task03() -> Result<()> { + let block: Value = json!({"block" : "AAAAAAAAAAAAAAAAAAAAAA==", "semantic" : "gcm"}); + let coefficients: Vec = vec![]; + assert_eq!( + block2poly(&block)?, + coefficients, + "Coefficients were: {:?}", + block2poly(&block)? + ); + + Ok(()) + } + + #[test] + fn block2poly_task04() -> Result<()> { + let block: Value = json!({"block" : "", "semantic" : "gcm"}); + let coefficients: Vec = vec![]; + assert_eq!( + block2poly(&block)?, + coefficients, + "Coefficients were: {:?}", + block2poly(&block)? + ); + + Ok(()) + } + + #[test] + fn block2poly_task_empty_xex() -> Result<()> { + let block: Value = json!({"block" : "", "semantic" : "xex"}); + let coefficients: Vec = vec![]; + assert_eq!( + block2poly(&block)?, + coefficients, + "Coefficients were: {:?}", + block2poly(&block)? + ); + + Ok(()) + } } diff --git a/src/utils/poly.rs b/src/utils/poly.rs index ec316a4..50e7ce6 100644 --- a/src/utils/poly.rs +++ b/src/utils/poly.rs @@ -104,31 +104,35 @@ pub fn get_bit_indices_from_byte(byte: u8) -> Vec { } pub fn block_2_polynomial(block: Vec, semantic: &str) -> Result> { - let mut output: Vec = vec![]; - match semantic { - "xex" => { - for i in 0u8..=15 { - for j in 0u8..=7 { - if (block[i as usize] >> j) & 1 == 1 { - output.push(8 * i + j); + if block.len() == 0 { + Ok(Vec::new()) + } else { + let mut output: Vec = vec![]; + match semantic { + "xex" => { + for i in 0u8..=15 { + for j in 0u8..=7 { + if (block[i as usize] >> j) & 1 == 1 { + output.push(8 * i + j); + } } } + output.sort(); + Ok(output) } - output.sort(); - Ok(output) - } - "gcm" => { - for i in 0u8..=15 { - for j in 0u8..=7 { - if (block[i as usize] >> j) & 1 == 1 { - output.push(8 * i + 7 - j); + "gcm" => { + for i in 0u8..=15 { + for j in 0u8..=7 { + if (block[i as usize] >> j) & 1 == 1 { + output.push(8 * i + 7 - j); + } } } + output.sort(); + Ok(output) } - output.sort(); - Ok(output) + _ => Err(anyhow!("Error in b2p")), } - _ => Err(anyhow!("Error in b2p")), } }