diff options
Diffstat (limited to 'src/test/stdtest/four.rs')
| -rw-r--r-- | src/test/stdtest/four.rs | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/src/test/stdtest/four.rs b/src/test/stdtest/four.rs new file mode 100644 index 00000000000..d0af7a393d3 --- /dev/null +++ b/src/test/stdtest/four.rs @@ -0,0 +1,149 @@ +use std; + +import std::tri; +import std::four; + +fn eq1(a: four::t, b: four::t) -> bool { four::eq(a , b) } +fn ne1(a: four::t, b: four::t) -> bool { four::ne(a , b) } + +fn eq2(a: four::t, b: four::t) -> bool { eq1( a, b ) && eq1( b, a ) } + +#[test] +fn test_four_req_eq() { + four::all_values { |a| + four::all_values { |b| + assert if a == b { eq1( a, b ) } else { ne1( a, b ) }; + } + } +} + +#[test] +fn test_four_and_symmetry() { + four::all_values { |a| + four::all_values { |b| + assert eq1( four::and(a ,b), four::and(b, a) ); + } + } +} + +#[test] +fn test_four_xor_symmetry() { + four::all_values { |a| + four::all_values { |b| + assert eq1( four::and(a ,b), four::and(b, a) ); + } + } +} + +#[test] +fn test_four_or_symmetry() { + four::all_values { |a| + four::all_values { |b| + assert eq1( four::or(a ,b), four::or(b, a) ); + } + } +} + +fn to_tup(v: four::t) -> (bool, bool) { + alt v { + 0u8 { (false, false) } + 1u8 { (false, true) } + 2u8 { (true, false) } + 3u8 { (true, true) } + } +} + +#[test] +fn test_four_not() { + four::all_values { |a| + let (x, y) = to_tup(a); + assert to_tup(four::not(a)) == (y, x); + }; +} + + +#[test] +fn test_four_and() { + four::all_values { |a| + four::all_values { |b| + let (y1, x1) = to_tup(a); + let (y2, x2) = to_tup(b); + let (y3, x3) = to_tup(four::and(a, b)); + + assert (x3, y3) == (x1 && x2, y1 || y2); + } + }; +} + +#[test] +fn test_four_or() { + four::all_values { |a| + four::all_values { |b| + let (y1, x1) = to_tup(a); + let (y2, x2) = to_tup(b); + let (y3, x3) = to_tup(four::or(a, b)); + + assert (x3, y3) == (x1 || x2, y1 && y2); + } + }; +} + +#[test] +fn test_four_implies() { + four::all_values { |a| + four::all_values { |b| + let (_, x1) = to_tup(a); + let (y2, x2) = to_tup(b); + let (y3, x3) = to_tup(four::implies(a, b)); + + assert (x3, y3) == (!x1 || x2, x1 && y2); + } + }; +} + +#[test] +fn test_four_is_true() { + assert !four::is_true(four::none); + assert !four::is_true(four::false); + assert four::is_true(four::true); + assert four::is_true(four::both); +} + +#[test] +fn test_four_is_false() { + assert four::is_false(four::none); + assert four::is_false(four::false); + assert !four::is_false(four::true); + assert !four::is_false(four::both); +} + +#[test] +fn test_four_from_str() { + four::all_values { |v| + assert eq1( v, four::from_str(four::to_str(v)) ); + } +} + +#[test] +fn test_four_to_str() { + assert four::to_str(four::none) == "none"; + assert four::to_str(four::false) == "false"; + assert four::to_str(four::true) == "true" ; + assert four::to_str(four::both) == "both"; +} + +#[test] +fn test_four_to_tri() { + assert tri::eq( four::to_trit(four::true), tri::true ); + assert tri::eq( four::to_trit(four::false), tri::false ); + assert tri::eq( four::to_trit(four::none), tri::unknown ); + log four::to_trit(four::both); + assert tri::eq( four::to_trit(four::both), tri::unknown ); +} + +#[test] +fn test_four_to_bit() { + four::all_values { |v| + assert four::to_bit(v) == if four::is_true(v) { 1u8 } else { 0u8 }; + } +} \ No newline at end of file |
