yevm-base 0.1.0

Primitive types (address, uint256, transaction, block header) for the YEVM Ethereum VM.
Documentation
pub mod acc;
pub mod dto;
pub mod int;

pub use acc::*;
pub use int::*;

#[cfg(test)]
mod tests {
    use yevm_misc::hex::Hex;

    use super::*;

    fn roundtrip<T: for<'a> From<&'a [u8]> + AsRef<[u8]>>(s: &str) -> String {
        let buf = hex::decode(s).unwrap_or_default();
        let t = T::from(&buf);
        hex::encode(t.as_ref())
    }

    fn check<const N: usize>(s: &str) {
        let actual = roundtrip::<Hex<N>>(s);
        let expected = s.chars().take(s.len().min(N * 2)).collect::<String>();
        let zeroes = N * 2 - (N * 2).min(s.len());
        let zeroes = "0".repeat(zeroes);
        let expected = format!("{zeroes}{expected}");
        assert_eq!(actual, expected, "case '{s}'");
    }

    #[test]
    fn test_int_roundtrip() {
        for s in [
            "ff",
            "deadbeef",
            "0102030405060708090a",
            "aabbccddeeff00112233445566778899aabbccdd",
            "aabbccddeeff00112233445566778899aabbccddee",
            "aabbccddeeff00112233445566778899aabbccddeeff001122",
            "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
        ] {
            check::<{ Int::N }>(s);
        }
    }

    #[test]
    fn test_acc_roundtrip() {
        for s in [
            "ff",
            "deadbeef",
            "0102030405060708090a",
            "aabbccddeeff00112233445566778899aabbccdd",
        ] {
            check::<{ Acc::N }>(s);
        }
    }
}