jasondb 0.2.7

A Blazingly-Fast, JSON-Based, Log-Structured Database.
Documentation
use crate::query::{Predicate, PredicateCombination, Query};

use humphrey_json::Value;

#[test]
fn simple_queries() {
    let lt = query!(a < 1);
    let lte = query!(a.b <= 2);
    let gt = query!(a > 1.0);
    let gte = query!(a.b >= 2.0);
    let eq_num = query!(a == 1);
    let eq_str = query!(a == "hello");
    let eq_bool = query!(a == true);
    let eq_bool_2 = query!(a);
    let eq_null = query!(a == null);
    let eq_var = query!(a == f64::MAX);

    assert_eq!(lt, Query::from(Predicate::Lt("a".to_string(), 1.0)));
    assert_eq!(lte, Query::from(Predicate::Lte("a.b".to_string(), 2.0)));
    assert_eq!(gt, Query::from(Predicate::Gt("a".to_string(), 1.0)));
    assert_eq!(gte, Query::from(Predicate::Gte("a.b".to_string(), 2.0)));
    assert_eq!(
        eq_num,
        Query::from(Predicate::Eq("a".to_string(), Value::Number(1.0)))
    );
    assert_eq!(
        eq_str,
        Query::from(Predicate::Eq(
            "a".to_string(),
            Value::String("hello".to_string())
        ))
    );
    assert_eq!(
        eq_bool,
        Query::from(Predicate::Eq("a".to_string(), Value::Bool(true)))
    );
    assert_eq!(
        eq_bool_2,
        Query::from(Predicate::Eq("a".to_string(), Value::Bool(true)))
    );
    assert_eq!(
        eq_null,
        Query::from(Predicate::Eq("a".to_string(), Value::Null))
    );
    assert_eq!(
        eq_var,
        Query::from(Predicate::Eq("a".to_string(), Value::Number(f64::MAX)))
    );
}

#[test]
fn compound_queries() {
    let and = query!(a > 1) & query!(a.b < 2);
    let or = query!(a > 1) | query!(a.b < 2);

    assert_eq!(
        and,
        Query {
            predicates: vec![
                Predicate::Gt("a".to_string(), 1.0),
                Predicate::Lt("a.b".to_string(), 2.0),
            ],
            predicate_combination: PredicateCombination::And
        }
    );

    assert_eq!(
        or,
        Query {
            predicates: vec![
                Predicate::Gt("a".to_string(), 1.0),
                Predicate::Lt("a.b".to_string(), 2.0),
            ],
            predicate_combination: PredicateCombination::Or
        }
    );
}