From 99055b553a70f4d5eb589a9e6a315e86ac1e1ab1 Mon Sep 17 00:00:00 2001 From: Nicolas Luck Date: Mon, 4 Dec 2023 20:10:06 +0100 Subject: [PATCH] =?utf8?q?Don=E2=80=99t=20include=20unbound=20variables=20?= =?utf8?q?in=20results=20returned=20from=20run=5Fquery?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- src/machine/lib_machine.rs | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/machine/lib_machine.rs b/src/machine/lib_machine.rs index b0cc880f..9d166c51 100644 --- a/src/machine/lib_machine.rs +++ b/src/machine/lib_machine.rs @@ -196,7 +196,9 @@ impl Machine { let output: String = outputter.result(); // println!("Result: {} = {}", var_key.to_string(), output); - bindings.insert(var_key.to_string(), Value::try_from(output).expect("asdfs")); + if var_key.to_string() != output { + bindings.insert(var_key.to_string(), Value::try_from(output).expect("Couldn't convert Houtput to Value")); + } } matches.push(QueryResolutionLine::Match(bindings)); @@ -338,6 +340,24 @@ mod tests { ); } + #[test] + fn empty_predicate() { + let mut machine = Machine::new_lib(); + machine.load_module_string( + "facts", + r#" + :- discontiguous(subject_class/2). + "#.to_string()); + + let result = machine.run_query(String::from( + "subject_class(X, _).", + )); + assert_eq!( + result, + Ok(QueryResolution::True) + ); + } + #[test] fn list_results() { let mut machine = Machine::new_lib(); @@ -486,14 +506,12 @@ mod tests { output, Ok(QueryResolution::Matches(vec![QueryMatch::from( btreemap! { - "Predicate" => Value::from("Predicate"), "Result" => Value::List( Vec::from([ Value::List([Value::from("p1"), Value::from("b")].into()), Value::List([Value::from("p2"), Value::from("b")].into()), ]) ), - "Target" => Value::from("Target"), } ),])) ); -- 2.54.0