Skip to content

Commit

Permalink
Add contains_edb function
Browse files Browse the repository at this point in the history
  • Loading branch information
bluk committed Aug 18, 2023
1 parent 638ae1e commit 59a2fdd
Showing 1 changed file with 31 additions and 1 deletion.
32 changes: 31 additions & 1 deletion src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,15 @@ impl Passdata {
Some(Ok(res))
}))
}

/// Determines if there is any explicitly declared fact which matches the given parameters.
pub fn contains_edb<'a, T>(&'a self, pred: &str, values: T) -> bool
where
T: QueryResult<'a> + 'a,
<T as QueryResult<'a>>::Length: ArrayLength<ConstantId>,
{
self.query_edb(pred, values).any(|v| v.is_ok())
}
}

#[cfg(test)]
Expand All @@ -137,7 +146,7 @@ mod tests {
use super::*;

#[test]
fn interpreter_add_fact() {
fn query_edb() {
let mut data = Passdata::new();

data.add_fact("a", true);
Expand All @@ -161,4 +170,25 @@ mod tests {
let mut y = data.query_edb("c", ("xyz", 7, AnyBool));
assert!(y.next().is_none());
}

#[test]
fn contains_edb() {
let mut data = Passdata::new();

data.add_fact("a", true);
data.add_fact("b", ("xyz", 1234, false));
data.add_fact("b", ("xyz", 5678, true));

assert!(data.contains_edb("a", (true,)));
assert!(data.contains_edb("a", (AnyBool,)));
assert!(!data.contains_edb("a", (false,)));

assert!(!data.contains_edb("b", ("xyz", 5678, false)));
assert!(data.contains_edb("b", ("xyz", 5678, true)));
assert!(data.contains_edb("b", ("xyz", 5678, AnyBool)));

assert!(data.contains_edb("b", ("xyz", AnyNum, false)));
assert!(!data.contains_edb("b", (AnyStr, 5678, false)));
assert!(!data.contains_edb("b", (AnyStr, 1234, true)));
}
}

0 comments on commit 59a2fdd

Please sign in to comment.