Skip to main content

yevm_base/
lib.rs

1pub mod acc;
2pub mod dto;
3pub mod int;
4
5pub use acc::*;
6pub use int::*;
7
8#[cfg(test)]
9mod tests {
10    use yevm_misc::hex::Hex;
11
12    use super::*;
13
14    fn roundtrip<T: for<'a> From<&'a [u8]> + AsRef<[u8]>>(s: &str) -> String {
15        let buf = hex::decode(s).unwrap_or_default();
16        let t = T::from(&buf);
17        hex::encode(t.as_ref())
18    }
19
20    fn check<const N: usize>(s: &str) {
21        let actual = roundtrip::<Hex<N>>(s);
22        let expected = s.chars().take(s.len().min(N * 2)).collect::<String>();
23        let zeroes = N * 2 - (N * 2).min(s.len());
24        let zeroes = "0".repeat(zeroes);
25        let expected = format!("{zeroes}{expected}");
26        assert_eq!(actual, expected, "case '{s}'");
27    }
28
29    #[test]
30    fn test_int_roundtrip() {
31        for s in [
32            "ff",
33            "deadbeef",
34            "0102030405060708090a",
35            "aabbccddeeff00112233445566778899aabbccdd",
36            "aabbccddeeff00112233445566778899aabbccddee",
37            "aabbccddeeff00112233445566778899aabbccddeeff001122",
38            "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
39        ] {
40            check::<{ Int::N }>(s);
41        }
42    }
43
44    #[test]
45    fn test_acc_roundtrip() {
46        for s in [
47            "ff",
48            "deadbeef",
49            "0102030405060708090a",
50            "aabbccddeeff00112233445566778899aabbccdd",
51        ] {
52            check::<{ Acc::N }>(s);
53        }
54    }
55}