geolog-zeta-fork/tests/unit_workspace.rs
2026-02-26 11:50:51 +01:00

69 lines
2.2 KiB
Rust

//! Unit tests for structure serialization
//!
//! Tests for save/load functionality in the serialize module.
use geolog::core::Structure;
use geolog::elaborate::InstanceEntry;
use geolog::id::{NumericId, Slid};
use geolog::serialize::{load_structure, save_structure, StructureData};
use geolog::universe::Universe;
use tempfile::tempdir;
#[test]
fn test_structure_roundtrip() {
let mut universe = Universe::new();
let mut structure = Structure::new(2);
structure.add_element(&mut universe, 0);
structure.add_element(&mut universe, 0);
structure.add_element(&mut universe, 1);
let data = StructureData::from_structure(&structure);
let restored = data.to_structure();
assert_eq!(restored.len(), 3);
assert_eq!(restored.num_sorts(), 2);
}
#[test]
fn test_save_load_structure() {
let mut universe = Universe::new();
let mut structure = Structure::new(2);
structure.add_element(&mut universe, 0);
structure.add_element(&mut universe, 1);
let dir = tempdir().unwrap();
let path = dir.path().join("test.structure");
save_structure(&structure, &path).expect("save should succeed");
let loaded = load_structure(&path).expect("load should succeed");
assert_eq!(loaded.len(), 2);
assert_eq!(loaded.num_sorts(), 2);
}
#[test]
fn test_instance_entry_element_management() {
let mut universe = Universe::new();
// Create a simple structure
let mut structure = Structure::new(1);
structure.add_element(&mut universe, 0);
structure.add_element(&mut universe, 0);
// Create instance entry
let mut entry = InstanceEntry::new(structure, "TestTheory".to_string(), "TestTheory".to_string());
entry.register_element("a".to_string(), Slid::from_usize(0));
entry.register_element("b".to_string(), Slid::from_usize(1));
// Verify element lookup works
assert_eq!(entry.get_element("a"), Some(Slid::from_usize(0)));
assert_eq!(entry.get_element("b"), Some(Slid::from_usize(1)));
assert_eq!(entry.get_element("c"), None);
// Verify reverse lookup works
assert_eq!(entry.get_name(Slid::from_usize(0)), Some("a"));
assert_eq!(entry.get_name(Slid::from_usize(1)), Some("b"));
}