summaryrefslogtreecommitdiff
path: root/tests/count_prefix.rs
diff options
context:
space:
mode:
authorzirkonya <zirkonya@iridium.lan>2026-09-01 09:51:18 +0200
committerzirkonya <zirkonya@iridium.lan>2026-09-01 09:51:18 +0200
commitbe62f065a62048b798e8bb2b8e3699bdd5b6d517 (patch)
tree8b3f4b05838b5fa34c3ae24e35004343baadf2af /tests/count_prefix.rs
parentfdc02f07cbd1994c1efb057f24a37a96faaa51fa (diff)
add proc macros ; benchmark ; example
Diffstat (limited to 'tests/count_prefix.rs')
-rw-r--r--tests/count_prefix.rs305
1 files changed, 0 insertions, 305 deletions
diff --git a/tests/count_prefix.rs b/tests/count_prefix.rs
deleted file mode 100644
index ab25e30..0000000
--- a/tests/count_prefix.rs
+++ /dev/null
@@ -1,305 +0,0 @@
-use zr_protocol::{
- codec::{decode::Decode, encode::Encode},
- types::prefix::count::CountPrefix,
-};
-
-fn encode_to_bytes<T: Encode>(value: T) -> Vec<u8> {
- let mut buf = Vec::new();
- value.encode(&mut buf).unwrap();
- buf
-}
-
-// ────────────────────── Vecteur vide ────────────
-
-#[test]
-fn empty_vec_u8_with_u8_count() {
- let cp = CountPrefix::<u8, u8, Vec<u8>>::new(vec![]);
- let buf = encode_to_bytes(cp);
- assert_eq!(buf, vec![0x00]);
-}
-
-#[test]
-fn empty_vec_u32_with_u16_count() {
- let cp = CountPrefix::<u32, u16, Vec<u32>>::new(vec![]);
- let buf = encode_to_bytes(cp);
- assert_eq!(buf, vec![0x00, 0x00]);
-}
-
-#[test]
-fn empty_vec_u8_with_u32_count() {
- let cp = CountPrefix::<u8, u32, Vec<u8>>::new(vec![]);
- let buf = encode_to_bytes(cp);
- assert_eq!(buf, vec![0x00, 0x00, 0x00, 0x00]);
-}
-
-// ────────────────────── Un seul élément ─────────
-
-#[test]
-fn single_u8_u8_count() {
- let cp = CountPrefix::<u8, u8, Vec<u8>>::new(vec![42]);
- let buf = encode_to_bytes(cp);
- assert_eq!(buf, vec![0x01, 0x2A]);
-}
-
-#[test]
-fn single_u32_u8_count() {
- let cp = CountPrefix::<u32, u8, Vec<u32>>::new(vec![0x01020304]);
- let buf = encode_to_bytes(cp);
- assert_eq!(buf, vec![0x01, 0x01, 0x02, 0x03, 0x04]);
-}
-
-// ────────────────────── Plusieurs éléments ──────
-
-#[test]
-fn multiple_u8_u8_count() {
- let cp = CountPrefix::<u8, u8, Vec<u8>>::new(vec![1, 2, 3]);
- let buf = encode_to_bytes(cp);
- assert_eq!(buf, vec![0x03, 0x01, 0x02, 0x03]);
-}
-
-#[test]
-fn multiple_u16_u8_count() {
- let cp = CountPrefix::<u16, u8, Vec<u16>>::new(vec![256, 512, 1024]);
- let buf = encode_to_bytes(cp);
- assert_eq!(
- buf,
- vec![
- 0x03, // count = 3
- 0x01, 0x00, // 256
- 0x02, 0x00, // 512
- 0x04, 0x00, // 1024
- ]
- );
-}
-
-#[test]
-fn multiple_u32_u16_count() {
- let cp = CountPrefix::<u32, u16, Vec<u32>>::new(vec![100, 200, 300]);
- let buf = encode_to_bytes(cp);
- assert_eq!(
- buf,
- vec![
- 0x00, 0x03, // count = 3 (u16)
- 0x00, 0x00, 0x00, 0x64, // 100
- 0x00, 0x00, 0x00, 0xC8, // 200
- 0x00, 0x00, 0x01, 0x2C, // 300
- ]
- );
-}
-
-// ────────────────────── Valeurs extrêmes ────────
-
-#[test]
-fn u8_count_max_255() {
- let data: Vec<u8> = (0..255).collect();
- let cp = CountPrefix::<u8, u8, Vec<u8>>::new(data.clone());
- let buf = encode_to_bytes(cp);
- assert_eq!(buf[0], 0xFF);
- assert_eq!(buf.len(), 1 + 255);
-}
-
-#[test]
-fn large_u32_items_u16_count() {
- let data: Vec<u32> = vec![u32::MAX, 0, u32::MIN + 1];
- let cp = CountPrefix::<u32, u16, Vec<u32>>::new(data);
- let buf = encode_to_bytes(cp);
- assert_eq!(buf.len(), 2 + 3 * 4);
- assert_eq!(&buf[0..2], &[0x00, 0x03]); // count = 3
-}
-
-// ────────────────────── Roundtrip ───────────────
-
-#[test]
-fn roundtrip_u8_u8() {
- let data = vec![10, 20, 30, 40, 50];
- let cp = CountPrefix::<u8, u8, Vec<u8>>::new(data.clone());
- let buf = encode_to_bytes(cp);
-
- let mut reader = &buf[..];
- let decoded = CountPrefix::<u8, u8, Vec<u8>>::decode(&mut reader).unwrap();
- assert_eq!(*decoded.as_ref(), data);
-}
-
-#[test]
-fn roundtrip_u32_u16() {
- let data = vec![1, 2, 3, 4, 5];
- let cp = CountPrefix::<u32, u16, Vec<u32>>::new(data.clone());
- let buf = encode_to_bytes(cp);
-
- let mut reader = &buf[..];
- let decoded = CountPrefix::<u32, u16, Vec<u32>>::decode(&mut reader).unwrap();
- assert_eq!(*decoded.as_ref(), data);
-}
-
-#[test]
-fn roundtrip_empty() {
- let cp = CountPrefix::<u32, u8, Vec<u32>>::new(vec![]);
- let buf = encode_to_bytes(cp);
-
- let mut reader = &buf[..];
- let decoded = CountPrefix::<u32, u8, Vec<u32>>::decode(&mut reader).unwrap();
- assert!(decoded.as_ref().is_empty());
-}
-
-#[test]
-fn roundtrip_single_element() {
- let cp = CountPrefix::<u64, u8, Vec<u64>>::new(vec![u64::MAX]);
- let buf = encode_to_bytes(cp);
-
- let mut reader = &buf[..];
- let decoded = CountPrefix::<u64, u8, Vec<u64>>::decode(&mut reader).unwrap();
- assert_eq!(*decoded.as_ref(), vec![u64::MAX]);
-}
-
-#[test]
-fn roundtrip_negative_i32() {
- let data = vec![-1, -100, 0, 100, 1];
- let cp = CountPrefix::<i32, u16, Vec<i32>>::new(data.clone());
- let buf = encode_to_bytes(cp);
-
- let mut reader = &buf[..];
- let decoded = CountPrefix::<i32, u16, Vec<i32>>::decode(&mut reader).unwrap();
- assert_eq!(*decoded.as_ref(), data);
-}
-
-#[test]
-fn roundtrip_f64() {
- let data = vec![0.0, 3.14, -2.71, f64::INFINITY, f64::NEG_INFINITY];
- let cp = CountPrefix::<f64, u8, Vec<f64>>::new(data.clone());
- let buf = encode_to_bytes(cp);
-
- let mut reader = &buf[..];
- let decoded = CountPrefix::<f64, u8, Vec<f64>>::decode(&mut reader).unwrap();
- let decoded_data = decoded.as_ref().clone();
- assert_eq!(decoded_data.len(), data.len());
- for (a, b) in decoded_data.iter().zip(data.iter()) {
- if a.is_nan() {
- assert!(b.is_nan());
- } else {
- assert_eq!(a, b);
- }
- }
-}
-
-#[test]
-fn roundtrip_bool() {
- let data = vec![true, false, true, true, false];
- let cp = CountPrefix::<bool, u8, Vec<bool>>::new(data.clone());
- let buf = encode_to_bytes(cp);
-
- let mut reader = &buf[..];
- let decoded = CountPrefix::<bool, u8, Vec<bool>>::decode(&mut reader).unwrap();
- assert_eq!(*decoded.as_ref(), data);
-}
-
-#[test]
-fn roundtrip_large_dataset() {
- let data: Vec<u32> = (0..1000).collect();
- let cp = CountPrefix::<u32, u16, Vec<u32>>::new(data.clone());
- let buf = encode_to_bytes(cp);
-
- let mut reader = &buf[..];
- let decoded = CountPrefix::<u32, u16, Vec<u32>>::decode(&mut reader).unwrap();
- assert_eq!(*decoded.as_ref(), data);
-}
-
-// ────────────────────── Imbrication ─────────────
-
-#[test]
-fn nested_count_prefix() {
- let inner1 = CountPrefix::<u8, u8, Vec<u8>>::new(vec![1, 2, 3]);
- let inner2 = CountPrefix::<u8, u8, Vec<u8>>::new(vec![4, 5]);
- let outer =
- CountPrefix::<CountPrefix<u8, u8, Vec<u8>>, u8, Vec<CountPrefix<u8, u8, Vec<u8>>>>::new(
- vec![inner1, inner2],
- );
-
- let buf = encode_to_bytes(outer);
-
- let mut reader = &buf[..];
- let decoded_outer =
- CountPrefix::<CountPrefix<u8, u8, Vec<u8>>, u8, Vec<CountPrefix<u8, u8, Vec<u8>>>>::decode(
- &mut reader,
- )
- .unwrap();
-
- let outer_data: Vec<_> = decoded_outer
- .as_ref()
- .iter()
- .map(|c| c.as_ref().clone())
- .collect();
- assert_eq!(outer_data.len(), 2);
- assert_eq!(outer_data[0], vec![1, 2, 3]);
- assert_eq!(outer_data[1], vec![4, 5]);
-}
-
-// ────────────────────── Erreurs de décodage ─────
-
-#[test]
-fn decode_empty_buffer_fails() {
- let result = CountPrefix::<u8, u8, Vec<u8>>::decode(&mut &[][..]);
- assert!(result.is_err());
-}
-
-#[test]
-fn decode_truncated_data_fails() {
- let cp = CountPrefix::<u32, u8, Vec<u32>>::new(vec![1, 2, 3]);
- let buf = encode_to_bytes(cp);
- let truncated = &buf[..buf.len() - 1];
- let result = CountPrefix::<u32, u8, Vec<u32>>::decode(&mut &truncated[..]);
- assert!(result.is_err());
-}
-
-#[test]
-fn decode_wrong_count_fails() {
- let cp = CountPrefix::<u32, u8, Vec<u32>>::new(vec![1, 2]);
- let mut buf = encode_to_bytes(cp);
- buf[0] = 0x05;
- let result = CountPrefix::<u32, u8, Vec<u32>>::decode(&mut &buf[..]);
- assert!(result.is_err());
-}
-
-// ────────────────────── AsRef / AsMut ───────────
-
-#[test]
-fn as_ref_returns_inner_data() {
- let data = vec![10u32, 20, 30];
- let cp = CountPrefix::<u32, u8, Vec<u32>>::new(data.clone());
- assert_eq!(*cp.as_ref(), data);
-}
-
-#[test]
-fn as_mut_allows_mutation() {
- let mut cp = CountPrefix::<u32, u8, Vec<u32>>::new(vec![1, 2, 3]);
- cp.as_mut().push(4);
- assert_eq!(*cp.as_ref(), vec![1, 2, 3, 4]);
-}
-
-// ────────────────────── Counts byte exactitude ──
-
-#[test]
-fn u8_count_header() {
- let cp = CountPrefix::<u8, u8, Vec<u8>>::new(vec![1; 10]);
- let buf = encode_to_bytes(cp);
- assert_eq!(buf[0], 10);
- assert_eq!(buf.len(), 1 + 10);
-}
-
-#[test]
-fn u16_count_header() {
- let cp = CountPrefix::<u8, u16, Vec<u8>>::new(vec![1; 300]);
- let buf = encode_to_bytes(cp);
- assert_eq!(buf[0], 0x01);
- assert_eq!(buf[1], 0x2C);
- assert_eq!(buf.len(), 2 + 300);
-}
-
-#[test]
-fn u32_count_header() {
- let data: Vec<u8> = vec![0xAA; 300];
- let len = data.len();
- let cp = CountPrefix::<u8, u32, Vec<u8>>::new(data);
- let buf = encode_to_bytes(cp);
- assert_eq!(buf.len(), 4 + len);
- assert_eq!(&buf[0..4], &[0x00, 0x00, 0x01, 0x2C]);
-}