holmes 0.1.0

Holmes Inference System
Documentation
#[macro_use]
extern crate holmes;
use holmes::simple::*;

#[test]
pub fn simple_substr() {
    single(&|holmes: &mut Engine, core: &mut Core| {
        try!(holmes_exec!(holmes, {
      predicate!(test_pred(uint64, bytes));
      predicate!(sub(uint64, bytes));
      fact!(test_pred(1, vec![3u8, 2u8, 1u8]));
      fact!(test_pred(2, vec![1u8, 2u8, 3u8]));
      rule!(sub(n, x) <= test_pred(n, {(1), (2), x}))
    }));
        core.run(holmes.quiesce()).unwrap();
        assert_eq!(query!(holmes, sub((1), x)).unwrap(),
               vec![vec![(vec![2u8, 1u8]).to_value()]]);
        assert_eq!(query!(holmes, sub((2), x)).unwrap(),
               vec![vec![(vec![2u8, 3u8]).to_value()]]);
        Ok(())
    })
}

#[test]
pub fn param_substr() {
    single(&|holmes: &mut Engine, core: &mut Core| {
        try!(holmes_exec!(holmes, {
      predicate!(test_pred(uint64, bytes));
      predicate!(sub(uint64, bytes));
      fact!(test_pred(1, vec![3u8, 2u8, 1u8]));
      fact!(test_pred(2, vec![1u8, 2u8, 3u8]));
      rule!(sub(n, x) <= test_pred(n, {[n], (2), x}))
    }));
        core.run(holmes.quiesce()).unwrap();
        assert_eq!(query!(holmes, sub((1), x)).unwrap(),
               vec![vec![(vec![2u8, 1u8]).to_value()]]);
        assert_eq!(query!(holmes, sub((2), x)).unwrap(),
               vec![vec![(vec![3u8]).to_value()]]);
        Ok(())
    })
}