z_mirror/hare-fmm
git clone https://git.raiguard.me/z_mirror/hare-fmm
f8eea35
trunk
1use strconv; 2 3@test fn version_cmp() void = { 4 // Less than 5 assert(version_cmp(version_parse("1.3.1")!, 6 version_parse("2.0")!) == version_cmpres::LT); 7 // Greater than 8 assert(version_cmp(version_parse("1.5.3")!, 9 version_parse("1.5.2")!) == version_cmpres::GT); 10 // Equal 11 assert(version_cmp(version_parse("1.5")!, 12 version_parse("1.5.0.0")!) == version_cmpres::EQ); 13}; 14 15@test fn version_parse() void = { 16 // PASS CASES 17 // Two parts 18 const ver = version_parse("1.0")!; 19 assert(ver[0] == 1); 20 assert(ver[1] == 0); 21 assert(ver[2] == 0); 22 assert(ver[3] == 0); 23 // Three parts 24 const ver = version_parse("1.1.15")!; 25 assert(ver[0] == 1); 26 assert(ver[1] == 1); 27 assert(ver[2] == 15); 28 assert(ver[3] == 0); 29 // Four parts 30 const ver = version_parse("2.3.4.5")!; 31 assert(ver[0] == 2); 32 assert(ver[1] == 3); 33 assert(ver[2] == 4); 34 assert(ver[3] == 5); 35 // Leading zeroes 36 const ver = version_parse("010.001.0100.0000001")!; 37 assert(ver[0] == 10); 38 assert(ver[1] == 1); 39 assert(ver[2] == 100); 40 assert(ver[3] == 1); 41 42 // ERROR CASES 43 // One part 44 const ver = version_parse("1"); 45 assert(ver is version_invalid_len); 46 // Five parts 47 const ver = version_parse("1.2.3.4.5"); 48 assert(ver is version_invalid_len); 49 // Invalid input 50 const ver = version_parse("foo.bar"); 51 assert(ver is strconv::error); 52}; 53 54@test fn version_str() void = { 55 // "Normal" version 56 const ver = version_parse("1.2.3.4")!; 57 // With build 58 const out = version_str(ver, true); 59 assert(out == "1.2.3.4"); 60 free(out); 61 // Without build 62 const out = version_str(ver, false); 63 assert(out == "1.2.3"); 64 free(out); 65 66 // Two parts 67 const ver = version_parse("1.2")!; 68 // With build 69 const out = version_str(ver, true); 70 assert(out == "1.2.0.0"); 71 free(out); 72 // Without build 73 const out = version_str(ver, false); 74 assert(out == "1.2.0"); 75 free(out); 76 77 // Leading zeroes 78 const ver = version_parse("001.0100.0000000001")!; 79 // With build 80 const out = version_str(ver, true); 81 assert(out == "1.100.1.0"); 82 free(out); 83 // Without build 84 const out = version_str(ver, false); 85 assert(out == "1.100.1"); 86 free(out); 87};