mirror of
https://github.com/zaphar/ucg.git
synced 2025-07-22 18:19:54 -04:00
FEATURE: The beginnings of a standard library for strings.
This commit is contained in:
parent
dd373b6680
commit
87e5db7dbf
38
std/strings.ucg
Normal file
38
std/strings.ucg
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
let ops = module {
|
||||||
|
str="",
|
||||||
|
} => {
|
||||||
|
let split_on = module{
|
||||||
|
on=" ",
|
||||||
|
str=mod.str,
|
||||||
|
} => {
|
||||||
|
let splitter = func(acc, char) => acc{
|
||||||
|
out = select char == mod.on, acc.out, {
|
||||||
|
true = acc.out + [acc.buf],
|
||||||
|
},
|
||||||
|
buf = select char != mod.on, "", {
|
||||||
|
true = acc.buf + char,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
let accumulated = reduce(splitter, {out=[], buf=""}, mod.str);
|
||||||
|
|
||||||
|
let result = accumulated.out + [accumulated.buf];
|
||||||
|
};
|
||||||
|
|
||||||
|
let split_at = func(idx) => filter(
|
||||||
|
func(name, val) => name != "counter",
|
||||||
|
reduce(
|
||||||
|
func(acc, char) => acc{
|
||||||
|
counter = acc.counter + 1,
|
||||||
|
left = select acc.counter < idx, acc.left, {
|
||||||
|
true = acc.left + char,
|
||||||
|
},
|
||||||
|
right = select acc.counter >= idx, acc.right, {
|
||||||
|
true = acc.right + char,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{counter = 0, left = "", right = ""},
|
||||||
|
mod.str
|
||||||
|
)
|
||||||
|
);
|
||||||
|
};
|
24
std/tests/strings_test.ucg
Normal file
24
std/tests/strings_test.ucg
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
let strings = import "std/strings.ucg";
|
||||||
|
let t = import "std/testing.ucg".asserts{};
|
||||||
|
|
||||||
|
let str_class = strings.ops{str="foo bar"};
|
||||||
|
|
||||||
|
assert t.equal{
|
||||||
|
left = str_class.split_on{}.result,
|
||||||
|
right = ["foo", "bar"],
|
||||||
|
};
|
||||||
|
|
||||||
|
assert t.equal{
|
||||||
|
left = strings.ops{str="foo"}.split_on{}.result,
|
||||||
|
right = ["foo"],
|
||||||
|
};
|
||||||
|
|
||||||
|
assert t.equal{
|
||||||
|
left = strings.ops{str=""}.split_on{}.result,
|
||||||
|
right = [""],
|
||||||
|
};
|
||||||
|
|
||||||
|
assert t.equal{
|
||||||
|
left = str_class.split_at(3),
|
||||||
|
right = {left="foo", right=" bar"},
|
||||||
|
};
|
Loading…
x
Reference in New Issue
Block a user