Files

71 lines
2.1 KiB
Rust
Raw Permalink Normal View History

use mem_store::{EventRecord, LogWriter, RebuildState};
use serde_json::json;
use std::fs;
#[test]
fn m2_gate_rebuild_idempotent() {
// Write events to log
let _ = fs::remove_dir_all("log/test/rebuild");
let mut writer = LogWriter::new("test", "rebuild", "r1").unwrap();
for i in 1..=5 {
writer.log(EventRecord {
project: "test".to_string(),
query: "q1".to_string(),
run: "r1".to_string(),
turn: i,
event_type: format!("event_{}", i),
data: json!({"n": i}),
}).unwrap();
}
// Read back
let events1 = writer.read_all().unwrap();
// Rebuild state
let state1 = RebuildState::from_events(&events1).unwrap();
// Read again - should be identical
let events2 = writer.read_all().unwrap();
let state2 = RebuildState::from_events(&events2).unwrap();
// Proof: events are identical
assert_eq!(events1.len(), events2.len());
for (e1, e2) in events1.iter().zip(events2.iter()) {
assert_eq!(e1.turn, e2.turn);
assert_eq!(e1.event_type, e2.event_type);
}
// Proof: rebuild produces same state
assert_eq!(state1.event_count, state2.event_count);
assert_eq!(state1.chunks_seen, state2.chunks_seen);
assert_eq!(state1.chunks_used, state2.chunks_used);
let _ = fs::remove_dir_all("log/test/rebuild");
}
#[test]
fn m2_gate_rebuild_byte_identical() {
// Key proof: serialize -> deserialize -> serialize produces identical bytes
let _ = fs::remove_dir_all("log/test/byte_id");
let mut writer = LogWriter::new("test", "byte_id", "r2").unwrap();
let original = EventRecord {
project: "test".to_string(),
query: "q1".to_string(),
run: "r2".to_string(),
turn: 1,
event_type: "test_event".to_string(),
data: json!({"key": "value", "num": 42}),
};
writer.log(original.clone()).unwrap();
// Read back and verify it's byte-identical
let events = writer.read_all().unwrap();
assert_eq!(events.len(), 1);
assert_eq!(events[0], original);
let _ = fs::remove_dir_all("log/test/byte_id");
}