/*============================================================================ CMake - Cross Platform Makefile Generator Copyright 2000-2011 Kitware, Inc., Insight Software Consortium Distributed under the OSI-approved BSD License (the "License"); see accompanying file Copyright.txt for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the License for more information. ============================================================================*/ #include "cmSystemTools.h" #include #include #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 deciaml 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 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; }