Full semver 2.0.0 implementation and validation by a number of tests.
This commit is contained in:
@@ -29,99 +29,77 @@ SOFTWARE.
|
||||
|
||||
using namespace version;
|
||||
|
||||
int compare(const std::string& l, const std::string& r) {
|
||||
Semver200_comparator c;
|
||||
Semver200_parser p;
|
||||
Semver200_comparator c;
|
||||
Semver200_parser p;
|
||||
|
||||
inline int compare(const std::string& l, const std::string& r) {
|
||||
auto lv = p.parse(l);
|
||||
auto rv = p.parse(r);
|
||||
return c.compare(lv, rv);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(compare_normal_eq) {
|
||||
BOOST_CHECK(compare("0.0.0", "0.0.0") == 0);
|
||||
#define GT(L, R) BOOST_CHECK(compare(L, R) > 0)
|
||||
#define GE(L, R) BOOST_CHECK(compare(L, R) >= 0)
|
||||
#define LT(L, R) BOOST_CHECK(compare(L, R) < 0)
|
||||
#define LE(L, R) BOOST_CHECK(compare(L, R) <= 0)
|
||||
#define EQ(L, R) BOOST_CHECK(compare(L, R) == 0)
|
||||
|
||||
// check normal precedence
|
||||
BOOST_AUTO_TEST_CASE(compare_normal) {
|
||||
EQ("1.2.3", "1.2.3");
|
||||
|
||||
GT("0.0.2", "0.0.1");
|
||||
GT("0.2.0", "0.0.3");
|
||||
GT("0.2.0", "0.1.3");
|
||||
GT("2.0.0", "0.0.1");
|
||||
GT("2.0.0", "0.3.1");
|
||||
GT("2.0.0", "1.3.1");
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(compare_normal_major_gt_1) {
|
||||
BOOST_CHECK(compare("1.0.0", "0.0.0") == 1);
|
||||
// normal and prerel precedence
|
||||
BOOST_AUTO_TEST_CASE(compare_normal_prerel) {
|
||||
GT("1.0.0", "1.0.0-alpha");
|
||||
GT("1.0.0", "1.0.0-99");
|
||||
GT("1.0.0", "1.0.0-ZZ");
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(compare_normal_major_gt_2) {
|
||||
BOOST_CHECK(compare("1.0.0", "0.0.5") == 1);
|
||||
// same prerels
|
||||
BOOST_AUTO_TEST_CASE(compare_equal_prerels) {
|
||||
EQ("1.0.0-alpha", "1.0.0-alpha");
|
||||
EQ("1.0.0-alpha.1", "1.0.0-alpha.1");
|
||||
EQ("1.0.0-1", "1.0.0-1");
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(compare_normal_major_gt_3) {
|
||||
BOOST_CHECK(compare("1.0.0", "0.17.0") == 1);
|
||||
// prerels precedence with numeric id
|
||||
BOOST_AUTO_TEST_CASE(compare_numeric_prerels) {
|
||||
GT("1.0.0-1", "1.0.0-0");
|
||||
GT("1.0.0-10", "1.0.0-1");
|
||||
GT("1.0.0-alpha.3", "1.0.0-alpha.1");
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(compare_normal_minor_gt_1) {
|
||||
BOOST_CHECK(compare("1.1.0", "1.0.0") == 1);
|
||||
// prerels precedence with alphanum id
|
||||
BOOST_AUTO_TEST_CASE(compare_alphanum_prerels) {
|
||||
GT("1.0.0-1", "1.0.0-0");
|
||||
GT("1.0.0-Z", "1.0.0-A");
|
||||
GT("1.0.0-Z", "1.0.0-1");
|
||||
GT("1.0.0-alpha-3", "1.0.0-alpha-1");
|
||||
GT("1.0.0-alpha-3", "1.0.0-alpha-100");
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(compare_normal_minor_gt_2) {
|
||||
BOOST_CHECK(compare("1.1.0", "1.0.32") == 1);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(compare_normal_patch_gt) {
|
||||
BOOST_CHECK(compare("1.1.3", "1.1.0") == 1);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(compare_normal_major_lt_1) {
|
||||
BOOST_CHECK(compare("1.0.0", "2.0.0") == -1);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(compare_normal_major_lt_2) {
|
||||
BOOST_CHECK(compare("1.0.1", "2.0.0") == -1);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(compare_normal_major_lt_3) {
|
||||
BOOST_CHECK(compare("1.3.0", "2.0.0") == -1);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(compare_normal_minor_lt_1) {
|
||||
BOOST_CHECK(compare("1.1.0", "1.2.0") == -1);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(compare_normal_minor_lt_2) {
|
||||
BOOST_CHECK(compare("1.1.3", "1.2.0") == -1);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(compare_normal_patch_lt) {
|
||||
BOOST_CHECK(compare("1.1.3", "1.1.5") == -1);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(compare_prerel_single_eq) {
|
||||
BOOST_CHECK(compare("1.1.3-prerel", "1.1.3-prerel") == 1);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(compare_prerel_multiple_eq) {
|
||||
BOOST_CHECK(compare("1.1.3-prerel.1.2.3", "1.1.3-prerel.1.2.3") == 1);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(compare_prerel_multiple_num_eq) {
|
||||
BOOST_CHECK(compare("1.1.3-prerel.123", "1.1.3-prerel.123") == 1);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(compare_prerel_multiple_num_gt) {
|
||||
BOOST_CHECK(compare("1.1.3-prerel.123", "1.1.3-prerel.120") == 1);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(compare_prerel_multiple_num_lt) {
|
||||
BOOST_CHECK(compare("1.1.3-prerel.123", "1.1.3-prerel.125") == -1);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(compare_prerel_single_alpha_gt) {
|
||||
BOOST_CHECK(compare("1.1.3-alpha", "1.1.3-beta") == 1);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(compare_prerel_single_alpha_lt) {
|
||||
BOOST_CHECK(compare("1.1.3-beta", "1.1.3-gamma") == -1);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(compare_prerel_single_alpha_gt_2) {
|
||||
BOOST_CHECK(compare("1.1.3-alpha5", "1.1.3-alpha4") == 1);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(compare_prerel_single_alpha_lt_2) {
|
||||
BOOST_CHECK(compare("1.1.3-beta3", "1.1.3-beta5") == -1);
|
||||
// prerels precedence misc
|
||||
BOOST_AUTO_TEST_CASE(compare_misc_prerels) {
|
||||
LT("1.0.0-alpha", "1.0.0-alpha.1");
|
||||
LT("1.0.0-alpha.1", "1.0.0-alpha.beta");
|
||||
LT("1.0.0-alpha.beta", "1.0.0-beta");
|
||||
LT("1.0.0-beta", "1.0.0-beta.2");
|
||||
LT("1.0.0-beta.2", "1.0.0-beta.11");
|
||||
LT("1.0.0-beta.11", "1.0.0-rc.1");
|
||||
LT("1.0.0-rc.1", "1.0.0");
|
||||
}
|
||||
|
||||
// equal precedence based on build
|
||||
BOOST_AUTO_TEST_CASE(compare_build) {
|
||||
EQ("1.0.0", "1.0.0+build.1.2.3");
|
||||
EQ("1.0.0+ZZZ", "1.0.0+build.1.2.3");
|
||||
EQ("1.0.0+100", "1.0.0+200");
|
||||
}
|
||||
Reference in New Issue
Block a user