From db809fad972b58d4af43ea4eb6f4174498b77ce4 Mon Sep 17 00:00:00 2001 From: Jeremy Wall Date: Wed, 9 Jan 2019 22:25:11 -0600 Subject: [PATCH] STDLIB: Add some helper modules for tuples. --- std/tests/tuples_test.ucg | 12 ++++++++++++ std/tuples.ucg | 20 ++++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 std/tests/tuples_test.ucg create mode 100644 std/tuples.ucg 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