rvs 0.5.0

A library for defining and evaluating random variables using a simple DSL
Documentation
//  bad = (1 | 2) ^ 3
//      = 3 ^ 3
//      = 0
// good = 1 | (2 ^ 3)
//      = 1 | 1
//      = 1
or_xor = 1 | 2 ^ 3;

//  bad = (5 ^ 2) & 3
//      = 7 & 3
//      = 3
// good = 5 ^ (2 & 3)
//      = 5 ^ 2
//      = 3
xor_and = 5 ^ 2 & 3;

//  bad = (7 & 2) << 1
//      = 2 << 1
//      = 4
// good = 7 & (2 << 1)
//      = 7 & 4
//      = 4
and_shl = 7 & 2 << 1;

//  bad = 8 << (2 >> 1)
//      = 8 << 1
//      = 16
// good = (8 << 2) >> 1
//      = 32 >> 1
//      = 16
shl_shr = 8 << 2 >> 1;

//  bad = (3 >> 1) + 2
//      = 1 + 2
//      = 3
// good = 3 >> (1 + 2)
//      = 3 >> 3
//      = 0
shr_add = 3 >> 1 + 2;

//  bad = 1 + (2 - 3)
//      = 1 + -1
//      = 0
// good = (1 + 2) - 3
//      = 3 - 3
//      = 0
add_sub = 1 + 2 - 3;

//  bad = (1 + 2) * 3
//      = 3 * 3
//      = 9
// good = 1 + (2 * 3)
//      = 1 + 6
//      = 7
add_mul = 1 + 2 * 3;

//  bad = 3 * (2 / 1)
//      = 3 * 2
//      = 6
// good = (3 * 2) / 1
//      = 6
mul_div = 3 * 2 / 1;

mod = 5 % 4;

unary_inv = ~0;
unary_neg = 5 + -4;