z_mirror/hare-fmm

git clone https://git.raiguard.me/z_mirror/hare-fmm

Caleb HeuerConvert to for-each loops and fix some potential memory issues74b341b

trunk
3.1 KiB78 linesraw
1@test fn dependency_parse() void = {
2	const tests: [_](str, str, (version | void), dependency_kind, version_cmpres) = [
3		// Versionless
4		("flib", "flib", void, dependency_kind::REQUIRED, version_cmpres::ANY),
5		("! flib", "flib", void, dependency_kind::INCOMPATIBLE, version_cmpres::ANY),
6		("? flib", "flib", void, dependency_kind::OPTIONAL, version_cmpres::ANY),
7		("(?) flib", "flib", void, dependency_kind::HIDDEN_OPTIONAL, version_cmpres::ANY),
8		("~ flib", "flib", void, dependency_kind::NO_LOAD_ORDER, version_cmpres::ANY),
9		// Versioned
10		("flib < 0.11.0", "flib", version_parse("0.11.0")!, dependency_kind::REQUIRED, version_cmpres::LT),
11		("flib <= 0.11.0", "flib", version_parse("0.11.0")!, dependency_kind::REQUIRED, version_cmpres::LTEQ),
12		("? flib = 0.11.0", "flib", version_parse("0.11.0")!, dependency_kind::OPTIONAL, version_cmpres::EQ),
13		("(?) flib >= 0.11.0", "flib", version_parse("0.11.0")!, dependency_kind::HIDDEN_OPTIONAL, version_cmpres::GTEQ),
14		("~ flib > 0.11.0", "flib", version_parse("0.11.0")!, dependency_kind::NO_LOAD_ORDER, version_cmpres::GT),
15		// Whitespace
16		("~  flib       > 0.11.0", "flib", version_parse("0.11.0")!, dependency_kind::NO_LOAD_ORDER, version_cmpres::GT),
17		("~flib<=0.11.0", "flib", version_parse("0.11.0")!, dependency_kind::NO_LOAD_ORDER, version_cmpres::LTEQ),
18		("  ~flib <= 0.11.0  ", "flib", version_parse("0.11.0")!, dependency_kind::NO_LOAD_ORDER, version_cmpres::LTEQ),
19		// Legacy mods can have spaces in their name
20		("Squeak Through <= 0.11.0  ", "Squeak Through", version_parse("0.11.0")!, dependency_kind::REQUIRED, version_cmpres::LTEQ),
21		("Squeak Through", "Squeak Through", void, dependency_kind::REQUIRED, version_cmpres::ANY),
22	];
23
24	for (let testset &.. tests) {
25		const dep = dependency_parse(testset.0);
26		assert(dep is dependency);
27		const dep = dep as dependency;
28		defer dependency_free(&dep);
29
30		assert(dep.ident.0 == testset.1);
31		if (testset.2 is void) {
32			assert(dep.ident.1 is void);
33		} else {
34			const ver = dep.ident.1;
35			assert(ver is version);
36			const ver = ver as version;
37			assert(version_cmp(ver, testset.2 as version)
38				== version_cmpres::EQ);
39		};
40
41		assert(dep.kind == testset.3);
42		assert(dep.req == testset.4);
43	};
44};
45
46@test fn dependency_str() void = {
47	const tests: [_](str, str) = [
48		("flib", "flib"),
49		("flib>0.11.0", "flib > 0.11.0"),
50		("    ! Squeak Through < 1.0", "! Squeak Through < 1.0.0"),
51	];
52
53	for (let testset &.. tests) {
54		const dep = dependency_parse(testset.0)!;
55		const depstr = dependency_str(&dep);
56		defer free(depstr);
57		assert(depstr == testset.1);
58	};
59};
60
61@test fn dependency_test() void = {
62	const tests: [_](str, str, bool) = [
63		("flib", "flib_0.1.1", true),
64		("! flib", "flib_0.1.1", false),
65		("flib >= 0.10", "flib_0.1.1", false),
66		("flib >= 0.10", "flib_0.10.0", true),
67		("flib >= 0.10.0", "flib_0.10.0", true),
68		("flib > 0.10", "flib_0.10.0", false),
69	];
70
71	for (let testset &.. tests) {
72		const dep = dependency_parse(testset.0)!;
73		defer dependency_free(&dep);
74		const ident = modident_parse(testset.1);
75		defer modident_free(&ident);
76		assert(dependency_test(&dep, &ident) == testset.2);
77	};
78};