use super::*;
#[test]
fn test_equals_with_more_than_two_arguments_is_rejected() {
let predicates = vec![Predicate::Root("equals".into())];
let arguments = vec![
Argument::Pronoun(Pronoun::Me), Argument::Pronoun(Pronoun::You), Argument::Pronoun(Pronoun::This), ];
let proposition = Proposition {
relation: 0,
terms: vec![0, 1, 2],
x1_present: true,
negated: false,
tense: None,
deontic: None,
};
let (_form, compiler) = compile_one(predicates, arguments, proposition);
assert!(
!compiler.errors.is_empty(),
">2-place du must be rejected fail-closed"
);
}
#[test]
fn test_cll_place_counter_resumes_after_fi() {
let predicates = vec![
Predicate::Root("goes".into()), Predicate::Root("market".into()), ];
let arguments = vec![
Argument::Description((Determiner::Definite, 1)), Argument::Tagged((2, 0)), Argument::Pronoun(Pronoun::You), ];
let proposition = Proposition {
relation: 0,
terms: vec![1, 2],
x1_present: false,
negated: false,
tense: None,
deontic: None,
};
let (form, compiler) = compile_one(predicates, arguments, proposition);
assert!(compiler.errors.is_empty(), "errors: {:?}", compiler.errors);
let x4 = get_pred_args(&form, "goes_x4", &compiler).expect("goes_x4 present");
assert_eq!(
const_str(&compiler, &x4[1]),
"you",
"untagged `do` must fill x4 after fi"
);
let x1 = get_pred_args(&form, "goes_x1", &compiler).expect("goes_x1 present");
assert!(
!matches!(&x1[1], IrTerm::Constant(c) if resolve(&compiler, c) == "you"),
"do must NOT land in x1 (pre-fix bug), got {:?}",
x1[1]
);
let x3 = get_pred_args(&form, "goes_x3", &compiler).expect("goes_x3 present");
assert!(
matches!(&x3[1], IrTerm::Description(_)),
"fi `le zarci` must fill x3, got {:?}",
x3[1]
);
}