ucg 0.5.3

A configuration generation grammar.
Documentation
let list = import "std/lists.ucg";
let t = import "std/testing.ucg";

let list_to_join = [1, 2, 3];

let asserts = t.asserts{};

assert asserts.equal{
    left=list.str_join{sep=",", list=list_to_join}.result,
    right="1,2,3"
};

assert asserts.equal{
    left=list.len([0, 1, 2, 3]),
    right=4,
};

assert asserts.equal{
    left = list.reverse([0, 1, 2, 3]),
    right = [3, 2, 1, 0],
};

assert asserts.equal{
    left=list.enumerate{list=["foo", "bar"]}.result,
    right=[[0, "foo"], [1, "bar"]],
};

assert asserts.equal{
    left=list.enumerate{start=1, list=["foo", "bar"]}.result,
    right=[[1, "foo"], [2, "bar"]],
};

assert asserts.equal{
    left=list.enumerate{
        start=1,
        step=2,
        list=["foo", "bar"]
    }.result,
    right=[[1, "foo"], [3, "bar"]],
};

assert asserts.equal{
    left=list.zip{list1=[0, 1], list2=[3, 4]}.result,
    right=[[0, 3], [1, 4]],
};