69 lines
2.2 KiB
Rust
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"));
|
||
|
|
}
|