2019-01-06 20:56:08 -06:00
|
|
|
// List processing
|
|
|
|
|
2018-08-21 23:05:06 -05:00
|
|
|
let list1 = [1, 2, 3, 4];
|
|
|
|
let list2 = ["foo", "bar", "foo", "bar"];
|
|
|
|
|
|
|
|
let mapper = macro(item) => { result = item + 1 };
|
|
|
|
let filtrator = macro(item) => {
|
|
|
|
result = select item, NULL, {
|
|
|
|
foo = item,
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
2018-08-22 18:56:12 -05:00
|
|
|
let boolfiltrator = macro(item) => {
|
|
|
|
result = item < 5,
|
|
|
|
};
|
|
|
|
|
2019-01-06 20:56:08 -06:00
|
|
|
let identity_list_reducer = macro(acc, item) => {
|
|
|
|
result = acc + [item],
|
|
|
|
};
|
|
|
|
|
2019-01-08 20:32:16 -06:00
|
|
|
assert {
|
|
|
|
ok = reduce identity_list_reducer.result [], list1 == list1,
|
|
|
|
desc = "reduce identity_list_reducer.result [], list1 == list1",
|
|
|
|
};
|
2019-01-06 20:56:08 -06:00
|
|
|
|
2019-01-08 19:26:56 -06:00
|
|
|
let nested_list = {
|
|
|
|
list = list1,
|
|
|
|
};
|
|
|
|
|
2019-01-08 20:32:16 -06:00
|
|
|
assert {
|
|
|
|
ok = reduce identity_list_reducer.result [], (nested_list.list) == list1,
|
|
|
|
desc = "reduce identity_list_reducer.result [], (nested_list.list) == list1",
|
|
|
|
};
|
2019-01-08 19:26:56 -06:00
|
|
|
|
2019-01-06 20:56:08 -06:00
|
|
|
let list_reducer = macro(acc, item) => {
|
|
|
|
result = acc + item,
|
|
|
|
};
|
|
|
|
|
2019-01-08 20:32:16 -06:00
|
|
|
assert {
|
|
|
|
ok = reduce list_reducer.result 0, list1 == 0 + 1 + 2 + 3 + 4,
|
|
|
|
desc = "reduce list_reducer.result 0, list1 == 0 + 1 + 2 + 3 + 4",
|
|
|
|
};
|
|
|
|
|
|
|
|
assert {
|
|
|
|
ok = map mapper.result list1 == [2, 3, 4, 5],
|
|
|
|
desc = "map mapper.result list1 == [2, 3, 4, 5]",
|
|
|
|
};
|
|
|
|
assert {
|
|
|
|
ok = (map mapper.result [1, 2, 3, 4]) == [2, 3, 4, 5],
|
|
|
|
desc = "(map mapper.result [1, 2, 3, 4]) == [2, 3, 4, 5]",
|
|
|
|
};
|
|
|
|
assert {
|
|
|
|
ok = map mapper.result [1, 2, 3, 4] == [2, 3, 4, 5],
|
|
|
|
desc = "map mapper.result [1, 2, 3, 4] == [2, 3, 4, 5]",
|
|
|
|
};
|
|
|
|
|
|
|
|
assert {
|
|
|
|
ok = filter filtrator.result list2 == ["foo", "foo"],
|
|
|
|
desc = "filter filtrator.result list2 == [\"foo\", \"foo\"]",
|
|
|
|
};
|
|
|
|
assert {
|
|
|
|
ok = (filter filtrator.result ["foo", "bar", "foo", "bar"]) == ["foo", "foo"],
|
|
|
|
desc = "(filter filtrator.result [\"foo\", \"bar\", \"foo\", \"bar\"]) == [\"foo\", \"foo\"]",
|
|
|
|
};
|
|
|
|
assert {
|
|
|
|
ok = filter filtrator.result ["foo", "bar", "foo", "bar"] == ["foo", "foo"],
|
|
|
|
desc = "filter filtrator.result [\"foo\", \"bar\", \"foo\", \"bar\"] == [\"foo\", \"foo\"]",
|
|
|
|
};
|
|
|
|
assert {
|
|
|
|
ok = filter boolfiltrator.result [1, 2, 3, 4, 5, 6, 7] == [1, 2, 3, 4],
|
|
|
|
desc = "filter boolfiltrator.result [1, 2, 3, 4, 5, 6, 7] == [1, 2, 3, 4]",
|
|
|
|
};
|
2019-01-06 16:17:00 -06:00
|
|
|
|
|
|
|
// Tuple processing
|
|
|
|
let test_tpl = {
|
|
|
|
foo = "bar",
|
|
|
|
quux = "baz",
|
|
|
|
};
|
|
|
|
|
|
|
|
let identity_tpl_mapper = macro(name, val) => {
|
|
|
|
result = [name, val],
|
|
|
|
};
|
|
|
|
|
2019-01-08 20:32:16 -06:00
|
|
|
assert {
|
|
|
|
ok = map identity_tpl_mapper.result test_tpl == test_tpl,
|
|
|
|
desc = "map identity_tpl_mapper.result test_tpl == test_tpl",
|
|
|
|
};
|
2019-01-06 16:17:00 -06:00
|
|
|
|
|
|
|
let tpl_mapper = macro(name, val) => {
|
|
|
|
result = select name, [name, val], {
|
|
|
|
"foo" = ["foo", "barbar"],
|
|
|
|
quux = ["cute", "pygmy"],
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
2019-01-08 20:32:16 -06:00
|
|
|
assert {
|
|
|
|
ok = map tpl_mapper.result test_tpl == {foo = "barbar", cute = "pygmy"},
|
|
|
|
desc = "map tpl_mapper.result test_tpl == {foo = \"barbar\", cute = \"pygmy\"}",
|
|
|
|
};
|
2019-01-06 16:17:00 -06:00
|
|
|
|
|
|
|
let identity_tpl_filter = macro(name, val) => {
|
|
|
|
result = true,
|
|
|
|
};
|
|
|
|
|
|
|
|
// strip out foo field
|
|
|
|
let tpl_filter = macro(name, val) => {
|
|
|
|
result = name != "foo",
|
|
|
|
};
|
|
|
|
|
2019-01-08 20:32:16 -06:00
|
|
|
assert {
|
|
|
|
ok = filter identity_tpl_filter.result test_tpl == test_tpl,
|
|
|
|
desc = "filter identity_tpl_filter.result test_tpl == test_tpl",
|
|
|
|
};
|
2019-01-06 16:17:00 -06:00
|
|
|
|
2019-01-08 20:32:16 -06:00
|
|
|
assert {
|
|
|
|
ok = filter tpl_filter.result test_tpl == { quux = "baz" },
|
|
|
|
desc = "filter tpl_filter.result test_tpl == { quux = \"baz\" }",
|
|
|
|
};
|
2019-01-06 20:56:08 -06:00
|
|
|
|
|
|
|
let tpl_reducer = macro(acc, name, val) => {
|
|
|
|
result = acc{
|
|
|
|
keys = self.keys + [name],
|
|
|
|
vals = self.vals + [val],
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
2019-01-08 20:32:16 -06:00
|
|
|
assert {
|
|
|
|
ok = reduce tpl_reducer.result {keys = [], vals = []}, test_tpl == {keys = ["foo", "quux"], vals = ["bar", "baz"]},
|
|
|
|
desc = "reduce tpl_reducer.result {keys = [], vals = []}, test_tpl == {keys = [\"foo\", \"quux\"], vals = [\"bar\", \"baz\"]}",
|
|
|
|
};
|