canrun/goals/succeed.rs
1use crate::core::State;
2use crate::goals::Goal;
3
4/** A [`Goal`] that always succeeds.
5
6# Example
7```
8use canrun::{Succeed, unify, Value, all, Query};
9
10let x = Value::var();
11let goal = all![unify(x.clone(), 1), Succeed];
12let result: Vec<_> = goal.query(x).collect();
13assert_eq!(result, vec![1])
14```
15*/
16#[derive(Debug)]
17pub struct Succeed;
18
19impl Goal for Succeed {
20 fn apply(&self, state: State) -> Option<State> {
21 Some(state)
22 }
23}
24
25#[cfg(test)]
26mod test {
27 use super::*;
28
29 #[test]
30 fn succeed() {
31 let state = State::new();
32 let goal = Succeed;
33 let result = goal.apply(state);
34 assert!(result.is_some());
35 }
36}