trimmer 0.3.6

A whitespace- and memory-friendly template engine
Documentation
use {Variable, Parser, Context};

fn render_x_y<A, B>(template: &str, x: A, y: B) -> String
    where A: for<'x> Variable<'x>, B: for<'x> Variable<'x>
{
    let tpl = Parser::new().parse(template).unwrap();
    let mut vars: Context = Context::new();
    vars.set("x", &x);
    vars.set("y", &y);
    tpl.render(&vars).unwrap()
}

#[test]
fn render_plus_same_types() {
    assert_eq!(render_x_y("{{ x + y }}", 1u32, 1u32), "2");
    assert_eq!(render_x_y("{{ x + y }}", 10u64, 7u64), "17");
    assert_eq!(render_x_y("{{ x + y }}", 10i64, -1i64), "9");
    assert_eq!(render_x_y("{{ x + y }}", 1.5f64, -1f64), "0.5");
}

#[test]
fn render_plus_different_types() {
    assert_eq!(render_x_y("{{ x + y }}", 1u32, 1f64), "2");
    assert_eq!(render_x_y("{{ x + y }}", 10u64, 7u64), "17");
    assert_eq!(render_x_y("{{ x + y }}", 10u64, -1i64), "9");
    assert_eq!(render_x_y("{{ x + y }}", 1.5f64, -1i64), "0.5");
    assert_eq!(render_x_y("{{ x + y }}", 10u64, -100i64), "-90");
    assert_eq!(render_x_y("{{ x + y }}", -100i64, 10i64), "-90");
}

#[test]
fn render_minus() {
    assert_eq!(render_x_y("{{ x - y }}", 1u32, 1u32), "0");
    assert_eq!(render_x_y("{{ x - y }}", 10u64, 7u64), "3");
    assert_eq!(render_x_y("{{ x - y }}", 10i64, -1i64), "11");
    assert_eq!(render_x_y("{{ x - y }}", 1.5f64, -1f64), "2.5");
}

#[test]
fn render_mul() {
    assert_eq!(render_x_y("{{ x * y }}", 2u32, 3u32), "6");
}

#[test]
fn render_div() {
    assert_eq!(render_x_y("{{ x / y }}", 6u32, 3u32), "2");
}

#[test]
fn render_mod() {
    assert_eq!(render_x_y("{{ x % y }}", 5u32, 3u32), "2");
}

#[test]
fn render_sum_mul() {
    assert_eq!(render_x_y("{{ 2 + x * y }}", 2u32, 3u32), "8");
}

#[test]
fn render_parenthesis() {
    assert_eq!(render_x_y("{{ (2+x) * y }}", 2u32, 3u32), "12");
}

#[test]
fn render_greater() {
    let x = String::from("x");
    let y = String::from("y");
    assert_eq!(render_x_y("{{ x > y }}", x, y), "false");
    assert_eq!(render_x_y("{{ x > y }}", 2, 1), "true");
    assert_eq!(render_x_y("{{ x > y > 3 }}", 5, 4), "true");
}