Skip to content
Snippets Groups Projects
Commit 5dd35d34 authored by l.dressen's avatar l.dressen
Browse files

Resolve "Allow two digit versions"

parent 40a4bcf9
No related branches found
No related tags found
1 merge request!206Resolve "Allow two digit versions"
......@@ -200,42 +200,50 @@ bool lessThanVersion(const QString &q1, const QString &q2)
{
QStringList version1 = q1.split(QLatin1Char('.'));
QStringList version2 = q2.split(QLatin1Char('.'));
std::vector<int> version1_digits;
std::vector<int> version2_digits;
std::vector<int> version1_parts;
std::vector<int> version2_parts;
constexpr int amountOfVersionParts = 3;
for(int i = 0; i < version1.length(); ++i)
for(const auto &versionPart : version1)
{
if(version1[i].length() == 1 && version1[i][0].isDigit())
bool ok;
int part = versionPart.toInt(&ok, 10);
if(ok)
{
version1_digits.push_back(version1[i].toInt());
version1_parts.push_back(part);
}
else
{
throw std::invalid_argument("Invalid Input String!");
throw std::invalid_argument("Invalid PeTrack version string: Version is non-numeric!");
}
}
for(int i = 0; i < version2.length(); ++i)
for(const auto &versionPart : version2)
{
if(version2[i].length() == 1 && version2[i][0].isDigit())
bool ok;
int part = versionPart.toInt(&ok, 10);
if(ok)
{
version2_digits.push_back(version2[i].toInt());
version2_parts.push_back(part);
}
else
{
throw std::invalid_argument("Invalid Input String!");
throw std::invalid_argument("Invalid PeTrack version string: Version is non-numeric!");
}
}
int length = std::min(version1_digits.size(), version2_digits.size());
for(int i = 0; i < length; ++i)
if(!(version1_parts.size() == amountOfVersionParts && version2_parts.size() == amountOfVersionParts))
{
if(version1_digits[i] > version2_digits[i])
throw std::invalid_argument("Invalid PeTrack version string: Amount of version parts is wrong!");
}
for(int i = 0; i < amountOfVersionParts; ++i)
{
if(version1_parts[i] > version2_parts[i])
{
return true;
}
else if(version1_digits[i] < version2_digits[i])
else if(version1_parts[i] < version2_parts[i])
{
return false;
}
}
return version1_digits.size() > version2_digits.size();
return false;
}
......@@ -28,16 +28,17 @@ TEST_CASE("Petrack version strings are compared", "[lessThanVersion]")
CHECK(lessThanVersion(QString("0.9.1"), QString("0.9.0")));
CHECK(lessThanVersion(QString("0.9.0"), QString("0.8.0")));
CHECK(lessThanVersion(QString("1.8.0"), QString("0.9.0")));
CHECK(lessThanVersion(QString("0.9.1.1"), QString("0.9.0")));
CHECK(lessThanVersion(QString("0.9.0.0"), QString("0.9.0")));
CHECK(lessThanVersion(QString("0.9.15"), QString("0.9.3")));
CHECK(lessThanVersion(QString("0.130.1"), QString("0.9.3")));
CHECK(lessThanVersion(QString("15.9.16"), QString("0.9.3")));
CHECK_FALSE(lessThanVersion(QString("0.9.0"), QString("0.9.1")));
CHECK_FALSE(lessThanVersion(QString("0.8.0"), QString("0.9.0")));
CHECK_FALSE(lessThanVersion(QString("0.9.0"), QString("1.9.0")));
CHECK_FALSE(lessThanVersion(QString("0.9.0"), QString("0.9.1.1")));
CHECK_FALSE(lessThanVersion(QString("0.9.0.1"), QString("0.9.1")));
CHECK_FALSE(lessThanVersion(QString("0.9.0"), QString("0.9.0.0")));
CHECK_FALSE(lessThanVersion(QString("0.9.0"), QString("0.9.0")));
CHECK_FALSE(lessThanVersion(QString("0.9.1"), QString("0.9.13")));
CHECK_FALSE(lessThanVersion(QString("0.9.1"), QString("0.967.13")));
CHECK_FALSE(lessThanVersion(QString("0.9.1"), QString("19.9.13")));
CHECK_THROWS(lessThanVersion(QString("0.8.k"), QString("0.9.0")));
CHECK_THROWS(lessThanVersion(QString("0.8.9"), QString("0.9.k")));
......@@ -46,4 +47,7 @@ TEST_CASE("Petrack version strings are compared", "[lessThanVersion]")
CHECK_THROWS(lessThanVersion(QString("k.8.9"), QString("0.9.0")));
CHECK_THROWS(lessThanVersion(QString("0.8.9"), QString("k.9.0")));
CHECK_THROWS(lessThanVersion(QString("0.8.9"), QString("k.9.0")));
CHECK_THROWS(lessThanVersion(QString("0.8.9"), QString("k.15.0")));
CHECK_THROWS(lessThanVersion(QString("0.8k.9"), QString("0.15.0")));
CHECK_THROWS(lessThanVersion(QString("0.9.0.1"), QString("0.9.1")));
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment