quant-codec-core 0.1.0-alpha.1

Shared codec/profile/shape/eval traits and typed IDs for governed compression experiments
Documentation
use quant_codec_core::*;

#[test]
fn digest_is_stable_for_canonical_bytes() {
    let a = CodecProfileDigest::from_parts(&[b"codec", b"v1", b"profile"]);
    let b = CodecProfileDigest::from_parts(&[b"codec", b"v1", b"profile"]);
    let c = CodecProfileDigest::from_parts(&[b"codecv1", b"profile"]);

    assert_eq!(a, b);
    assert_ne!(a, c);
    assert_eq!(a.to_string().len(), 64);
}

struct MockProfile;

impl CodecProfile for MockProfile {
    fn codec_id(&self) -> CodecId {
        CodecId::new("mock").unwrap()
    }

    fn codec_version(&self) -> &str {
        "0"
    }

    fn profile_digest(&self) -> CodecProfileDigest {
        CodecProfileDigest::from_canonical_bytes(b"mock")
    }

    fn fixed_rate_bits(&self) -> Option<u16> {
        Some(8)
    }

    fn block_dim(&self) -> Option<u16> {
        Some(64)
    }

    fn is_lossy(&self) -> bool {
        true
    }
}

#[test]
fn trait_mock_compiles() {
    let profile = MockProfile;
    assert_eq!(profile.codec_id().as_str(), "mock");
    assert!(profile.is_lossy());
}