metamatch 0.3.0

A proc-macro for generating repetitive match arms.
Documentation
use metamatch::unquote;

#[test]
fn basic() {
    #![allow(clippy::bool_assert_comparison)]

    assert_eq!(unquote!(1 + 1), 2);
    assert_eq!(unquote!(1 - 1), 0);
    assert_eq!(unquote!(2 * 3), 6);
    assert_eq!(unquote!(3 / 2), 1);
    assert_eq!(unquote!(7 % 2), 1);
    assert_eq!(unquote!(1 | 2), 3);
    assert_eq!(unquote!(7 & 3), 3);
    assert_eq!(unquote!(1 << 10), 1024);
    assert_eq!(unquote!(8 >> 1), 4);

    assert_eq!(unquote!(7 > 2), true);
    assert_eq!(unquote!(7 > 7), false);
    assert_eq!(unquote!(7 >= 7), true);
    assert_eq!(unquote!(7 > 8), false);

    assert_eq!(unquote!(2 < 7), true);
    assert_eq!(unquote!(7 < 7), false);
    assert_eq!(unquote!(7 <= 7), true);
    assert_eq!(unquote!(8 < 7), false);
}

#[test]
fn precedence() {
    assert_eq!(unquote!(2 * 3 + 5), 11);
    assert_eq!(unquote!(5 + 2 * 3), 11);
}

#[test]
fn parentheses_vs_tuple() {
    assert_eq!(unquote!((1 + 2)), 3);
    assert_eq!(unquote!((1 + 2,)), (3,));
    assert_eq!(unquote!((1 + 2, 5)), (3, 5));
}

#[test]
fn unary_ops() {
    assert_eq!(unquote!(!1), !1);
    assert_eq!(unquote!(1 + -2), -1);
    assert_eq!(unquote!(-(1 + 2)), -3);
    assert_eq!(unquote!(1 + 2 - -5), 8);
}

#[test]
fn list_access() {
    let list = unquote! {
        let list = [1,2,3];
        let x0 = list[0];
        let x1 = list[1];
        let x2 = list[2];
        [x0,x1,x2]
    };

    assert_eq!(list, [1, 2, 3]);
}

#[test]
fn list_assignment() {
    let list = unquote! {
        let list = [0, 1, 2, 3];

        list[3] = 42;

        list
    };

    assert_eq!(list, [0, 1, 2, 42]);
}

#[test]
fn assignment() {
    let val = unquote! {
        let mut x = 3;
        x = 4;
        x
    };
    assert_eq!(val, 4);
}

#[test]
fn add_assign() {
    let val = unquote! {
        let mut x = 3;
        x += 4;
        x
    };
    assert_eq!(val, 7);
}