expy 0.0.2

Embeddable & extensible expression evaluator
Documentation
//! Tests for pretty-printing expressions.

use expy::prettify;


#[test]
fn single_value() {
    assert_eq!(prettify("42").unwrap(), "42");
    assert_eq!(prettify("true").unwrap(), "true");
    assert_eq!(prettify("foo").unwrap(), "foo");
    assert_eq!(prettify("@bar").unwrap(), "@bar");
}

#[test]
fn unary_expression() {
    assert_eq!(prettify("-55").unwrap(), "-55");  // noop
    assert_eq!(prettify("- 66 ").unwrap(), "-66");
}

#[test]
fn binary_expression() {
    assert_eq!(prettify("3 * 2").unwrap(), "3 * 2");  // noop
    assert_eq!(prettify("3.4 *7").unwrap(), "3.4 * 7");
    assert_eq!(prettify("12e6/ 4").unwrap(), "12e6 / 4");
    assert_eq!(prettify("17-5").unwrap(), "17 - 5");
    assert_eq!(prettify("1+2+3+4+5").unwrap(), "1 + 2 + 3 + 4 + 5");
    assert_eq!(prettify("2==2||3>1").unwrap(), "2 == 2 || 3 > 1");
}

#[test]
fn function_call() {
    assert_eq!(prettify("foo()").unwrap(), "foo()");  // noop
    assert_eq!(prettify("foo  ()").unwrap(), "foo()");
    assert_eq!(prettify("foo(  )").unwrap(), "foo()");
    assert_eq!(prettify("foo ( )").unwrap(), "foo()");

    assert_eq!(prettify("foo(42)").unwrap(), "foo(42)");  // noop
    assert_eq!(prettify("foo( 42 )").unwrap(), "foo(42)");
    assert_eq!(prettify("foo(42 )").unwrap(), "foo(42)");
    assert_eq!(prettify("foo(  42)").unwrap(), "foo(42)");
    assert_eq!(prettify("foo   (42)").unwrap(), "foo(42)");

    assert_eq!(prettify("foo(42, 69)").unwrap(), "foo(42, 69)");  // noop
    assert_eq!(prettify("foo(42,69)").unwrap(), "foo(42, 69)");
    assert_eq!(prettify("foo( 42, 69 )").unwrap(), "foo(42, 69)");
    assert_eq!(prettify("foo(42, 69     )").unwrap(), "foo(42, 69)");
    assert_eq!(prettify("foo    (  42  , 69   )").unwrap(), "foo(42, 69)");
}

// TODO subscript tests

#[test]
fn member_access() {
    assert_eq!(prettify("foo.bar").unwrap(), "foo.bar");  // noop
    assert_eq!(prettify("foo.      bar").unwrap(), "foo.bar");
    assert_eq!(prettify("foo    .bar").unwrap(), "foo.bar");
    assert_eq!(prettify("foo   .   bar").unwrap(), "foo.bar");
    assert_eq!(prettify("(  foo ).bar").unwrap(), "(foo).bar");

    assert_eq!(prettify("foo.bar.baz").unwrap(), "foo.bar.baz");  // noop
    assert_eq!(prettify("foo   .bar.   baz").unwrap(), "foo.bar.baz");
    assert_eq!(prettify("foo. bar .baz").unwrap(), "foo.bar.baz");
    assert_eq!(prettify("foo . bar . baz").unwrap(), "foo.bar.baz");
}

#[test]
fn parentheses() {
    assert_eq!(prettify("1 + (2 + 3)").unwrap(), "1 + (2 + 3)");  // noop
    assert_eq!(prettify("1 + ( 2 + 3 )").unwrap(), "1 + (2 + 3)");
    assert_eq!(prettify("1 + ( 2  + 3         )").unwrap(), "1 + (2 + 3)");
    assert_eq!(prettify("1+(2+3)").unwrap(), "1 + (2 + 3)");
    assert_eq!(prettify("((((((1 + (2 + 3)))))))").unwrap(), "((((((1 + (2 + 3)))))))");  // noop
    assert_eq!(prettify("( ( ( ( 42))))").unwrap(), "((((42))))");
}

#[test]
fn mixed_scalars() {
    assert_eq!(prettify("foo(3 + foo(42))").unwrap(), "foo(3 + foo(42))");  // noop
    assert_eq!(
        prettify("foo(  6.7,100,   foo(0.33 , foo(  ) ) )").unwrap(),
        "foo(6.7, 100, foo(0.33, foo()))");
    assert_eq!(prettify("( 0 * 8888)/foo(  9^(2 +   0))").unwrap(), "(0 * 8888) / foo(9^(2 + 0))");
}

#[cfg(glam)]
#[test]
fn vectors() {
    assert_eq!(prettify("[1, 2]").unwrap(), "[1, 2]");  // noop
    assert_eq!(prettify("[32., 42.]").unwrap(), "[32., 42.]");  // noop
    assert_eq!(prettify("[   454, 987 ]").unwrap(), "[454, 987]");
}