holmes 0.1.0

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

#[test]
pub fn new_fact_basic() {
    single(&|holmes: &mut Engine, _| {
        holmes_exec!(holmes, {
            predicate!(test_pred(string, bytes, uint64));
            fact!(test_pred("foo", vec![3u8, 4u8, 5u8], 7))
        })
    })
}

#[test]
pub fn new_fact_type_err() {
    single(&|holmes: &mut Engine, _| {
        holmes_exec!(holmes, {
            predicate!(test_pred(string, bytes, uint64));
            should_fail(fact!(test_pred(7, vec![3u8, 4u8, 5u8], 7)))
        })
    })
}

#[test]
pub fn new_fact_echo() {
    single(&|holmes: &mut Engine, _| {
        try!(holmes_exec!(holmes, {
            predicate!(test_pred(string, bytes, uint64));
            fact!(test_pred("foo", vec![3u8, 3u8], 7))
        }));
        assert_eq!(query!(holmes,
                       test_pred(("foo"), [_], x)).unwrap(),
               vec![vec![7.to_value()]]);
        Ok(())
    })
}

#[test]
pub fn two_strings() {
    single(&|holmes: &mut Engine, _| {
        holmes_exec!(holmes, {
            predicate!(test_pred(string, string));
            fact!(test_pred("foo", "bar"))
        })
    })
}