mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-07 06:09:52 -06:00
Found via `codespell -q 3 -I ../cmake-whitelist.txt --skip="./Utilities"` where the whitelist consists of ``` aci ans behaviour buil convertor dum earch ect emmited emmitted helpfull iff isnt ith lowercased mose nd nknown nto objext ot pathes pevents splitted substract superceded supercedes te tim todays uint upto whitespaces ```
96 lines
3.8 KiB
C++
96 lines
3.8 KiB
C++
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
|
file Copyright.txt or https://cmake.org/licensing for details. */
|
|
|
|
#include <cmConfigure.h> // IWYU pragma: keep
|
|
|
|
#include <iostream>
|
|
#include <stddef.h>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include "cmSystemTools.h"
|
|
|
|
#define cmPassed(m) std::cout << "Passed: " << (m) << "\n"
|
|
#define cmFailed(m) \
|
|
std::cout << "FAILED: " << (m) << "\n"; \
|
|
failed = 1
|
|
|
|
#define cmAssert(exp, m) \
|
|
if ((exp)) { \
|
|
cmPassed(m); \
|
|
} else { \
|
|
cmFailed(m); \
|
|
}
|
|
|
|
int testSystemTools(int /*unused*/, char* /*unused*/ [])
|
|
{
|
|
int failed = 0;
|
|
// ----------------------------------------------------------------------
|
|
// Test cmSystemTools::UpperCase
|
|
std::string str = "abc";
|
|
std::string strupper = "ABC";
|
|
cmAssert(cmSystemTools::UpperCase(str) == strupper,
|
|
"cmSystemTools::UpperCase");
|
|
|
|
// ----------------------------------------------------------------------
|
|
// Test cmSystemTools::strverscmp
|
|
cmAssert(cmSystemTools::strverscmp("", "") == 0, "strverscmp empty string");
|
|
cmAssert(cmSystemTools::strverscmp("abc", "") > 0,
|
|
"strverscmp string vs empty string");
|
|
cmAssert(cmSystemTools::strverscmp("abc", "abc") == 0,
|
|
"strverscmp same string");
|
|
cmAssert(cmSystemTools::strverscmp("abd", "abc") > 0,
|
|
"strverscmp character string");
|
|
cmAssert(cmSystemTools::strverscmp("abc", "abd") < 0,
|
|
"strverscmp symmetric");
|
|
cmAssert(cmSystemTools::strverscmp("12345", "12344") > 0,
|
|
"strverscmp natural numbers");
|
|
cmAssert(cmSystemTools::strverscmp("100", "99") > 0,
|
|
"strverscmp natural numbers different digits");
|
|
cmAssert(cmSystemTools::strverscmp("12345", "00345") > 0,
|
|
"strverscmp natural against decimal (same length)");
|
|
cmAssert(cmSystemTools::strverscmp("99999999999999", "99999999999991") > 0,
|
|
"strverscmp natural overflow");
|
|
cmAssert(cmSystemTools::strverscmp("00000000000009", "00000000000001") > 0,
|
|
"strverscmp decimal precision");
|
|
cmAssert(cmSystemTools::strverscmp("a.b.c.0", "a.b.c.000") > 0,
|
|
"strverscmp multiple zeros");
|
|
cmAssert(cmSystemTools::strverscmp("lib_1.2_10", "lib_1.2_2") > 0,
|
|
"strverscmp last number ");
|
|
cmAssert(cmSystemTools::strverscmp("12lib", "2lib") > 0,
|
|
"strverscmp first number ");
|
|
cmAssert(cmSystemTools::strverscmp("02lib", "002lib") > 0,
|
|
"strverscmp first number decimal ");
|
|
cmAssert(cmSystemTools::strverscmp("10", "9a") > 0,
|
|
"strverscmp letter filler ");
|
|
cmAssert(cmSystemTools::strverscmp("000", "0001") > 0,
|
|
"strverscmp zero and leading zeros ");
|
|
|
|
// test sorting using standard strvercmp input
|
|
std::vector<std::string> testString;
|
|
testString.push_back("000");
|
|
testString.push_back("00");
|
|
testString.push_back("01");
|
|
testString.push_back("010");
|
|
testString.push_back("09");
|
|
testString.push_back("0");
|
|
testString.push_back("1");
|
|
testString.push_back("9");
|
|
testString.push_back("10");
|
|
|
|
// test global ordering of input strings
|
|
for (size_t i = 0; i < testString.size() - 1; i++) {
|
|
for (size_t j = i + 1; j < testString.size(); j++) {
|
|
if (cmSystemTools::strverscmp(testString[i], testString[j]) >= 0) {
|
|
cmFailed("cmSystemTools::strverscmp error in comparing strings " +
|
|
testString[i] + " " + testString[j]);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!failed) {
|
|
cmPassed("cmSystemTools::strverscmp working");
|
|
}
|
|
return failed;
|
|
}
|