ucg 0.5.7

A configuration generation grammar.
Documentation
// A module with helper test assertions for ucg tests.
// Each contained module will output a struct with 
// ok and desc fields.
//
// ok will be a boolean.
// desc will be a descriptive message.
let asserts = module{
        // allows you to specify a a prefix for messages.
        // specify the prefix to add when the condition is not true.
        // A default description to use for messages.
        default_description = "TODO description",
    } => {
    
    // Test that a value is true.
    let ok = module{
        // test value expected to be true for success.
        test=false,
        // descriptive message to use in output.
        desc=mod.default_description,
    } => {
        let ok = mod.test;

        let desc = "@" % (mod.desc);
    };

    // Test that a value is not true.
    let not_ok = module{
        // Test value expected to to be false for success.
        test=true,
        // descriptive message to use in output.
        desc=mod.default_description,
    } => {
        let ok = not mod.test;

        let desc = "@" % (mod.desc);

    };

    // Asserts that two values are equal. Does deep equal comparisons.
    let equal = module{
        // Left value for deep equal comparison.
        left=NULL,
        // right value for deep equal comparison.
        right=NULL,
        desc="",
    } => {
        let ok = mod.left == mod.right;

        let desc = select (mod.desc == ""), "@ == @" % (mod.left, mod.right), {
            false = mod.desc,
        };
    };

    // Asserts that two values are not equal. Does deep equal comparisons.
    let not_equal = module{
        // Left value for deep equal comparison.
        left=NULL,
        // right value for deep equal comparison.
        right=NULL,
        desc="",
    } => {
        let ok = mod.left != mod.right;

        let desc = select (mod.desc == ""), "@ != @" % (mod.left, mod.right), {
            false = mod.desc,
        };
    };
};