#include import cargoxx.util; using cargoxx::util::satisfies; TEST_CASE("satisfies returns true for wildcard", "[util][semver]") { REQUIRE(satisfies("0.0.0", "*")); REQUIRE(satisfies("99.99.99", "*")); REQUIRE(satisfies("1.0", "*")); } TEST_CASE("satisfies handles >= ranges", "[util][semver]") { REQUIRE(satisfies("10.2.0", ">=10.0.0")); REQUIRE(satisfies("10.0.0", ">=10.0.0")); REQUIRE_FALSE(satisfies("9.9.9", ">=10.0.0")); } TEST_CASE("satisfies handles compound ranges", "[util][semver]") { REQUIRE(satisfies("10.2.0", ">=10.0.0,<11.0.0")); REQUIRE(satisfies("8.5.3", ">=8.0.0,<10.0.0")); REQUIRE_FALSE(satisfies("11.0.0", ">=10.0.0,<11.0.0")); REQUIRE_FALSE(satisfies("7.0.0", ">=8.0.0,<10.0.0")); } TEST_CASE("satisfies handles short version strings", "[util][semver]") { REQUIRE(satisfies("10.2", ">=10.0.0")); REQUIRE(satisfies("10", ">=10.0.0")); REQUIRE_FALSE(satisfies("9", ">=10.0.0")); } TEST_CASE("satisfies treats bare version as exact match", "[util][semver]") { REQUIRE(satisfies("1.2.3", "1.2.3")); REQUIRE_FALSE(satisfies("1.2.4", "1.2.3")); } TEST_CASE("satisfies handles all comparison operators", "[util][semver]") { REQUIRE(satisfies("2.0.0", "==2.0.0")); REQUIRE_FALSE(satisfies("2.0.1", "==2.0.0")); REQUIRE(satisfies("2.0.1", ">2.0.0")); REQUIRE_FALSE(satisfies("2.0.0", ">2.0.0")); REQUIRE(satisfies("1.9.9", "<2.0.0")); REQUIRE_FALSE(satisfies("2.0.0", "<2.0.0")); REQUIRE(satisfies("2.0.0", "<=2.0.0")); REQUIRE_FALSE(satisfies("2.0.1", "<=2.0.0")); } TEST_CASE("satisfies returns false on malformed inputs", "[util][semver]") { REQUIRE_FALSE(satisfies("not-a-version", ">=1.0.0")); REQUIRE_FALSE(satisfies("1.0.0", "garbage")); }