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.
124 lines
2.6 KiB
Plaintext
124 lines
2.6 KiB
Plaintext
let t = import "std/testing.ucg";
|
|
|
|
let test_empty_mod = module {
|
|
} => {
|
|
};
|
|
|
|
let std_lib_import = module {
|
|
} => {
|
|
let tpl = import "std/tuples.ucg";
|
|
};
|
|
|
|
let empty_mod_instance = test_empty_mod{};
|
|
|
|
let test_simple_mod = module {
|
|
arg = "value",
|
|
} => {
|
|
let value = mod.arg;
|
|
};
|
|
|
|
let simple_mod_instance = test_simple_mod{};
|
|
assert {
|
|
ok = simple_mod_instance.value == "value",
|
|
desc = "simple_mod_instance.value == \"value\"",
|
|
};
|
|
|
|
let simple_mod_with_args = test_simple_mod{arg = "othervalue"};
|
|
assert {
|
|
ok = simple_mod_with_args.value == "othervalue",
|
|
desc = "simple_mod_with_args.value == \"othervalue\"",
|
|
};
|
|
|
|
let embedded_mod = module {
|
|
deep_value = "None",
|
|
environ = "None",
|
|
} => {
|
|
let env_name = select (mod.environ, "qa") => {
|
|
None = "qa",
|
|
prod = "prod",
|
|
qa = "qa",
|
|
uat = "uat",
|
|
};
|
|
let embedded_def = module {
|
|
deep_value = "None",
|
|
} => {
|
|
let value = mod.deep_value;
|
|
};
|
|
|
|
let embedded = embedded_def{deep_value = mod.deep_value};
|
|
};
|
|
|
|
let embedded_default_params = embedded_mod{};
|
|
|
|
assert {
|
|
ok = embedded_default_params.embedded.value == "None",
|
|
desc = "embedded_default_params.embedded.value == \"None\"",
|
|
};
|
|
|
|
assert {
|
|
ok = embedded_default_params.env_name == "qa",
|
|
desc = "embedded_default_params.env_name == \"qa\"",
|
|
};
|
|
|
|
let embedded_with_params = embedded_mod{deep_value = "Some"};
|
|
|
|
assert {
|
|
ok = embedded_with_params.embedded.value == "Some",
|
|
desc = "embedded_with_params.embedded.value == \"Some\"",
|
|
};
|
|
assert {
|
|
ok = embedded_mod{dep_value="Some"}.embedded_def{}.value == "None",
|
|
desc = "embedded_mod{dep_value=\"Some\"}.embedded_def{}.value == \"None\"",
|
|
};
|
|
|
|
let export_module = module {
|
|
foo = "",
|
|
} => (result) {
|
|
let foo = mod.foo;
|
|
|
|
let result = {
|
|
out_foo = foo,
|
|
};
|
|
};
|
|
|
|
assert t.ok{
|
|
test = out_foo in export_module{foo="bar"},
|
|
desc = "out_foo is in our output tuple",
|
|
};
|
|
|
|
assert t.equal{
|
|
left = export_module{foo="bar"},
|
|
right = {out_foo = "bar"},
|
|
};
|
|
|
|
let export_module_tuple = module {
|
|
foo = "",
|
|
} => ({quux = result.out_foo}) {
|
|
let foo = mod.foo;
|
|
|
|
let result = {
|
|
out_foo = foo,
|
|
};
|
|
};
|
|
|
|
assert t.ok{
|
|
test = quux in export_module_tuple{foo="bar"},
|
|
desc = "quux is in our output tuple",
|
|
};
|
|
|
|
assert t.equal{
|
|
left = export_module_tuple{foo="bar"},
|
|
right = {quux = "bar"},
|
|
};
|
|
|
|
let recursive_module = module {start=1, end=10} => (result) {
|
|
let this = mod.this;
|
|
let result = select (mod.start != mod.end, mod.start) => {
|
|
true = this{start=mod.start + 1, end=mod.end},
|
|
};
|
|
};
|
|
|
|
assert t.equal{
|
|
left = recursive_module{},
|
|
right = 10,
|
|
}; |