TESTS: Add a whole raft of integration tests.

* Integrate them into the build::comopile_test module as well.
This commit is contained in:
Jeremy Wall 2018-08-20 22:16:42 -05:00
parent 9fdc845e77
commit b87d75c5c7
4 changed files with 83 additions and 85 deletions

View File

@ -0,0 +1,56 @@
// Simple Comparisons
let one = 1;
let two = 2;
let foo = "foo";
let bar = "bar";
let tpl1 = {
foo = "bar",
one = 1
};
let tpl2 = tpl1{};
let tpl3 = {
bar = "foo",
two = 1
};
let list = [1, 2, 3];
let list2 = list;
let list3 = [1, 2];
assert "one == one";
assert "one == one";
assert "one >= one";
assert "two > one";
assert "two >= two";
assert "tpl1 == tpl2";
assert "tpl1 != tpl3";
assert "list == list2";
assert "list != list3";
// Deep Comparisons
let tpl4 = {
foo = "bar",
lst = [1, 2, 3],
inner = {
fld = "value",
}
};
let copy = tpl4;
let extra = tpl4{one = 1};
let less = {
foo = "bar"
};
assert "tpl4.inner == copy.inner";
assert "tpl4.inner.fld == copy.inner.fld";
assert "tpl4.lst == copy.lst";
assert "tpl4.foo == copy.foo";
assert "tpl4 == copy";
assert "tpl4 != extra";
assert "tpl4 != less";
// Expression comparisons
assert "2 == 1+1";
assert "(1+1) == 2";
assert "(1+1) == (1+1)";
let want = "foo";
assert "select want, 1, { foo=2, } == 2";

View File

@ -0,0 +1,5 @@
let empty = NULL;
let tpl = {
foo = NULL,
};
assert "tpl.foo == empty";

View File

@ -0,0 +1,7 @@
assert "2 * 2 + 1 == 5";
assert "2 + 2 * 3 == 8";
assert "2 * (2 + 1) == 6";
assert "2 * 2 + 1 > 4";
assert "2 * 2 + 1 > 6";
assert "2 * 2 + 1 >= 5";
assert "2 * 2 + 1 <= 5";

View File

@ -30,97 +30,27 @@ fn assert_build(input: &str) {
#[test]
fn test_comparisons() {
assert_build(
"let one = 1;
let two = 2;
let foo = \"foo\";
let bar = \"bar\";
let tpl1 = {
foo = \"bar\",
one = 1
};
let tpl2 = tpl1{};
let tpl3 = {
bar = \"foo\",
two = 1
};
let list = [1, 2, 3];
let list2 = list;
let list3 = [1, 2];
assert \"one == one\";
assert \"one == one\";
assert \"one >= one\";
assert \"two > one\";
assert \"two >= two\";
assert \"tpl1 == tpl2\";
assert \"tpl1 != tpl3\";
assert \"list == list2\";
assert \"list != list3\";
",
);
assert_build(include_str!("../../integration_tests/comparisons_test.ucg"));
}
#[test]
fn test_macros() {
assert_build(include_str!("../../integration_tests/macros_test.ucg"));
}
#[test]
fn test_selectors() {
assert_build(include_str!("../../integration_tests/selectors_test.ucg"));
}
#[test]
fn test_empty_value() {
assert_build(
"let empty = NULL;
let tpl = {
foo = NULL,
};
assert \"tpl.foo == empty\";
",
);
}
#[test]
fn test_deep_comparison() {
assert_build(
"let tpl1 = {
foo = \"bar\",
lst = [1, 2, 3],
inner = {
fld = \"value\",
}
};
let copy = tpl1;
let extra = tpl1{one = 1};
let less = {
foo = \"bar\"
};
assert \"tpl1.inner == copy.inner\";
assert \"tpl1.inner.fld == copy.inner.fld\";
assert \"tpl1.lst == copy.lst\";
assert \"tpl1.foo == copy.foo\";
assert \"tpl1 == copy\";
assert \"tpl1 != extra\";
assert \"tpl1 != less\";
",
);
}
#[test]
fn test_expression_comparisons() {
assert_build("assert \"2 == 1+1\";");
assert_build("assert \"(1+1) == 2\";");
assert_build("assert \"(1+1) == (1+1)\";");
assert_build(
"let want = \"foo\";
assert \"select want, 1, { foo=2, } == 2\";",
);
assert_build(include_str!("../../integration_tests/empty_test.ucg"));
}
#[test]
fn test_binary_operator_precedence() {
assert_build(
"let result = 2 * 2 + 1;
assert \"result == 5\";",
);
assert_build(
"let result = 2 + 2 * 3;
assert \"result == 8\";",
);
assert_build(
"let result = 2 * (2 + 1);
assert \"result == 6\";",
);
assert_build(include_str!(
"../../integration_tests/operator_precedence_test.ucg"
));
}