use strconv; @test fn version_cmp() void = { // Less than assert(version_cmp(version_parse("1.3.1")!, version_parse("2.0")!) == version_cmpres::LT); // Greater than assert(version_cmp(version_parse("1.5.3")!, version_parse("1.5.2")!) == version_cmpres::GT); // Equal assert(version_cmp(version_parse("1.5")!, version_parse("1.5.0.0")!) == version_cmpres::EQ); }; @test fn version_parse() void = { // PASS CASES // Two parts const ver = version_parse("1.0")!; assert(ver[0] == 1); assert(ver[1] == 0); assert(ver[2] == 0); assert(ver[3] == 0); // Three parts const ver = version_parse("1.1.15")!; assert(ver[0] == 1); assert(ver[1] == 1); assert(ver[2] == 15); assert(ver[3] == 0); // Four parts const ver = version_parse("2.3.4.5")!; assert(ver[0] == 2); assert(ver[1] == 3); assert(ver[2] == 4); assert(ver[3] == 5); // Leading zeroes const ver = version_parse("010.001.0100.0000001")!; assert(ver[0] == 10); assert(ver[1] == 1); assert(ver[2] == 100); assert(ver[3] == 1); // ERROR CASES // One part const ver = version_parse("1"); assert(ver is version_invalid_len); // Five parts const ver = version_parse("1.2.3.4.5"); assert(ver is version_invalid_len); // Invalid input const ver = version_parse("foo.bar"); assert(ver is strconv::error); }; @test fn version_str() void = { // "Normal" version const ver = version_parse("1.2.3.4")!; // With build const out = version_str(ver, true); assert(out == "1.2.3.4"); free(out); // Without build const out = version_str(ver, false); assert(out == "1.2.3"); free(out); // Two parts const ver = version_parse("1.2")!; // With build const out = version_str(ver, true); assert(out == "1.2.0.0"); free(out); // Without build const out = version_str(ver, false); assert(out == "1.2.0"); free(out); // Leading zeroes const ver = version_parse("001.0100.0000000001")!; // With build const out = version_str(ver, true); assert(out == "1.100.1.0"); free(out); // Without build const out = version_str(ver, false); assert(out == "1.100.1"); free(out); };