crepuscularity-core 0.4.7

Parser, AST, and expression evaluation for the Crepuscularity .crepus DSL (UNSTABLE; in active development).
Documentation
#[cfg(not(target_arch = "wasm32"))]
mod cache_tests {
    use crepuscularity_core::analysis::Fingerprint;
    use crepuscularity_core::cache::DriverCache;
    use tempfile::TempDir;

    #[test]
    fn cache_miss_then_hit() {
        let tmp = TempDir::new().unwrap();
        let cache = DriverCache::open(tmp.path());
        let fp = Fingerprint::new("source content", None, "render");
        let output = "<div>hello</div>";

        assert!(
            !cache.is_up_to_date(&fp, output),
            "should miss on first call"
        );
        cache.record(&fp, output);
        assert!(cache.is_up_to_date(&fp, output), "should hit after record");
    }

    #[test]
    fn cache_misses_on_changed_output() {
        let tmp = TempDir::new().unwrap();
        let cache = DriverCache::open(tmp.path());
        let fp = Fingerprint::new("same source", None, "render");
        cache.record(&fp, "<div>v1</div>");
        assert!(!cache.is_up_to_date(&fp, "<div>v2</div>"));
    }

    #[test]
    fn different_fingerprints_are_independent() {
        let tmp = TempDir::new().unwrap();
        let cache = DriverCache::open(tmp.path());
        let fp1 = Fingerprint::new("source-a", None, "render");
        let fp2 = Fingerprint::new("source-b", None, "render");
        cache.record(&fp1, "output-a");
        assert!(!cache.is_up_to_date(&fp2, "output-a"));
    }
}