diff --git a/std/tests/tuples_test.ucg b/std/tests/tuples_test.ucg new file mode 100644 index 0000000..3138933 --- /dev/null +++ b/std/tests/tuples_test.ucg @@ -0,0 +1,12 @@ +import "../tuples.ucg" as tpl; +import "../testing.ucg" as t; + +assert t.asserts{}.equal{ + left = tpl.fields{tpl={foo=1, bar=2}}.result, + right = ["foo", "bar"], +}; + +assert t.asserts{}.equal{ + left = tpl.values{tpl={foo=1, bar=2}}.result, + right = [1, 2], +}; \ No newline at end of file diff --git a/std/tuples.ucg b/std/tuples.ucg new file mode 100644 index 0000000..561f2a0 --- /dev/null +++ b/std/tuples.ucg @@ -0,0 +1,20 @@ + +let fields = module{ + tpl = NULL, +} => { + let reducer = macro(acc, field, value) => { + result = acc + [field], + }; + + let result = reduce reducer.result [], (mod.tpl); +}; + +let values = module{ + tpl = NULL, +} => { + let reducer = macro(acc, field, value) => { + result = acc + [value], + }; + + let result = reduce reducer.result [], (mod.tpl); +}; \ No newline at end of file