use super::*;
#[test]
fn single_predicate_injects_head_into_subject() {
let b = lb("goes(some dog where big).");
let big = role_filler(&b, "big_x1").unwrap();
let dog = role_filler(&b, "dog_x1").unwrap();
let goes = role_filler(&b, "goes_x1").unwrap();
assert!(matches!(big, LogicalTerm::Variable(_)));
assert_eq!(big, dog, "clause subject binds the description var");
assert_eq!(dog, goes, "matrix subject binds the same var");
}
#[test]
fn named_x1_const_x2_it_routes_both() {
let b = lb("animal(every dog where loves(lover: Alis, loved: it)).");
assert!(role_is_const(&b, "loves_x1", "alis"));
assert_eq!(role_filler(&b, "loves_x2"), role_filler(&b, "dog_x1"));
}
#[test]
fn named_x1_it_x2_const_routes_both() {
let b = lb("animal(every dog where loves(lover: it, loved: Alis)).");
assert_eq!(role_filler(&b, "loves_x1"), role_filler(&b, "dog_x1"));
assert!(role_is_const(&b, "loves_x2", "alis"));
}
#[test]
fn lone_named_it_leaves_x1_unspecified() {
let b = lb("animal(every dog where loves(loved: it)).");
assert_eq!(role_filler(&b, "loves_x1"), Some(LogicalTerm::Unspecified));
assert_eq!(role_filler(&b, "loves_x2"), role_filler(&b, "dog_x1"));
}