ic-storage 0.68.8

Governed stable allocation and collections for Internet Computer applications
Documentation
use super::*;

#[test]
fn byte_codec_borrows_and_preserves_every_encoding() {
    for value in u8::MIN..=u8::MAX {
        let bytes = value.to_bytes_checked().unwrap();
        assert!(matches!(bytes, Cow::Borrowed(_)));
        assert_eq!(bytes.as_ref(), &[value]);
        assert_eq!(u8::from_bytes(bytes).unwrap(), value);
        let owned = value.into_bytes_checked().unwrap();
        assert_eq!(owned, [value]);
        assert_eq!(u8::from_bytes(Cow::Owned(owned)).unwrap(), value);
    }
    for bytes in [&[][..], &[0, 1][..]] {
        assert_eq!(
            u8::from_bytes(Cow::Borrowed(bytes)),
            Err(CodecError::Invalid("integer width"))
        );
    }
}

#[test]
fn boolean_codec_borrows_and_rejects_non_boolean_bytes() {
    for (value, byte) in [(false, 0), (true, 1)] {
        let bytes = value.to_bytes_checked().unwrap();
        assert!(matches!(bytes, Cow::Borrowed(_)));
        assert_eq!(bytes.as_ref(), &[byte]);
        assert_eq!(bool::from_bytes(bytes).unwrap(), value);
        let owned = value.into_bytes_checked().unwrap();
        assert_eq!(owned, [byte]);
        assert_eq!(bool::from_bytes(Cow::Owned(owned)).unwrap(), value);
    }
    for byte in 2..=u8::MAX {
        assert!(bool::from_bytes(Cow::Borrowed(&[byte])).is_err());
    }
    for bytes in [&[][..], &[0, 1][..]] {
        assert!(bool::from_bytes(Cow::Borrowed(bytes)).is_err());
    }
}