ucg 0.5.7

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},
    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"]},
    right=[[0, "foo"], [1, "bar"]],
};

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

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

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

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

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

assert asserts.equal{
    left=list.slice{end=2, list=[0,1,2,3]},
    right=[0,1,2],
};

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

assert asserts.equal{
    left=list.slice{end=0, list=[0,1,2,3]},
    right=[0],
};

assert asserts.equal{
    left=list.slice{list=[]},
    right=[],
};

assert asserts.equal{
    left=list.slice{list=[0]},
    right=[0],
};