mirror of
https://github.com/zaphar/ucg.git
synced 2025-07-21 18:10:42 -04:00
This makes it both easier to correctly write a select expression as well as easier to parse and report syntax errors.
60 lines
1.6 KiB
Plaintext
60 lines
1.6 KiB
Plaintext
let todo_desc = "TODO description";
|
|
|
|
// Test that a value is true.
|
|
let ok = module{
|
|
// test value expected to be true for success.
|
|
test=false,
|
|
// descriptive message to use in output.
|
|
desc=todo_desc,
|
|
} => ({ok=ok, desc=desc}) {
|
|
(mod.desc != NULL) || fail "description can't be null";
|
|
|
|
let ok = mod.test;
|
|
let desc = "@" % (mod.desc);
|
|
};
|
|
|
|
// Test that a value is not true.
|
|
let not_ok = module{
|
|
// Test value expected to to be false for success.
|
|
test=true,
|
|
// descriptive message to use in output.
|
|
desc=todo_desc,
|
|
} => ({ok=ok, desc=desc}) {
|
|
(mod.desc != NULL) || fail "description can't be null";
|
|
|
|
let ok = not mod.test;
|
|
let desc = "@" % (mod.desc);
|
|
|
|
};
|
|
|
|
// Asserts that two values are equal. Does deep equal comparisons.
|
|
let equal = module{
|
|
// Left value for deep equal comparison.
|
|
left=NULL,
|
|
// right value for deep equal comparison.
|
|
right=NULL,
|
|
desc="",
|
|
} => ({ok=ok, desc=desc}) {
|
|
(mod.desc != NULL) || fail "description can't be null";
|
|
|
|
let ok = mod.left == mod.right;
|
|
let desc = select ((mod.desc == ""), "@ == @" % (mod.left, mod.right)) => {
|
|
false = mod.desc,
|
|
};
|
|
};
|
|
|
|
// Asserts that two values are not equal. Does deep equal comparisons.
|
|
let not_equal = module{
|
|
// Left value for deep equal comparison.
|
|
left=NULL,
|
|
// right value for deep equal comparison.
|
|
right=NULL,
|
|
desc="",
|
|
} => ({ok=ok, desc=desc}) {
|
|
(mod.desc != NULL) || fail "description can't be null";
|
|
|
|
let ok = mod.left != mod.right;
|
|
let desc = select ((mod.desc == ""), "@ != @" % (mod.left, mod.right)) => {
|
|
false = mod.desc,
|
|
};
|
|
}; |