Full semver 2.0.0 implementation and validation by a number of tests.

This commit is contained in:
Marko Zivanovic
2015-10-08 16:00:22 +02:00
parent 76506c5ffd
commit 2f5981c7d5
7 changed files with 409 additions and 342 deletions
+57 -79
View File
@@ -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");
}