You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
cmake/Tests/CMakeLib/testCTestResourceGroups.cxx

142 lines
3.5 KiB

/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
file Copyright.txt or https://cmake.org/licensing for details. */
#include <iostream>
#include <string>
#include <vector>
#include "cmCTestTestHandler.h"
struct ExpectedParseResult
{
std::string String;
bool ExpectedReturnValue;
std::vector<std::vector<cmCTestTestHandler::cmCTestTestResourceRequirement>>
ExpectedValue;
};
static const std::vector<ExpectedParseResult> expectedResults{
/* clang-format off */
{ "threads:2", true, {
{ { "threads", 2, 1 } },
} },
{ "3,threads:2", true, {
{ { "threads", 2, 1 } },
{ { "threads", 2, 1 } },
{ { "threads", 2, 1 } },
} },
{ "3,threads:2,gpus:4", true, {
{ { "threads", 2, 1 }, { "gpus", 4, 1 } },
{ { "threads", 2, 1 }, { "gpus", 4, 1 } },
{ { "threads", 2, 1 }, { "gpus", 4, 1 } },
} },
{ "2,threads:2;gpus:4", true, {
{ { "threads", 2, 1 } },
{ { "threads", 2, 1 } },
{ { "gpus", 4, 1 } },
} },
{ "threads:2;2,gpus:4", true, {
{ { "threads", 2, 1 } },
{ { "gpus", 4, 1 } },
{ { "gpus", 4, 1 } },
} },
{ "threads:2;gpus:4", true, {
{ { "threads", 2, 1 } },
{ { "gpus", 4, 1 } },
} },
{ "1,threads:2;0,gpus:4", true, {
{ { "threads", 2, 1 } },
} },
{ "1,_:1", true, {
{ { "_", 1, 1 } },
} },
{ "1,a:1", true, {
{ { "a", 1, 1 } },
} },
{ "2", true, {
{},
{},
} },
{ "1;2,threads:1", true, {
{},
{ { "threads", 1, 1 } },
{ { "threads", 1, 1 } },
} },
{ "1,,threads:1", true, {
{ { "threads", 1, 1 } },
} },
{ ";1,threads:1", true, {
{ { "threads", 1, 1 } },
} },
{ "1,threads:1;", true, {
{ { "threads", 1, 1 } },
} },
{ "1,threads:1,", true, {
{ { "threads", 1, 1 } },
} },
{ "threads:1,threads:1", true, {
{ { "threads", 1, 1 }, { "threads", 1, 1 } },
} },
{ "threads:1;;threads:2", true, {
{ { "threads", 1, 1 } },
{ { "threads", 2, 1 } },
} },
{ "1,", true, {
{},
} },
{ ";", true, {} },
{ "", true, {} },
{ ",", false, {} },
{ "1,0:1", false, {} },
{ "1,A:1", false, {} },
{ "1,a-b:1", false, {} },
{ "invalid", false, {} },
{ ",1,invalid:1", false, {} },
{ "1,1", false, {} },
{ "-1,invalid:1", false, {} },
{ "1,invalid:*", false, {} },
{ "1,invalid:-1", false, {} },
{ "1,invalid:-", false, {} },
{ "1,invalid:ab2", false, {} },
{ "1,invalid :2", false, {} },
{ "1, invalid:2", false, {} },
{ "1,invalid:ab", false, {} },
/* clang-format on */
};
static bool TestExpectedParseResult(const ExpectedParseResult& expected)
{
std::vector<std::vector<cmCTestTestHandler::cmCTestTestResourceRequirement>>
result;
bool retval;
if ((retval = cmCTestTestHandler::ParseResourceGroupsProperty(
expected.String, result)) != expected.ExpectedReturnValue) {
std::cout << "ParseResourceGroupsProperty(\"" << expected.String
<< "\") returned " << retval << ", should be "
<< expected.ExpectedReturnValue << std::endl;
return false;
}
if (result != expected.ExpectedValue) {
std::cout << "ParseResourceGroupsProperty(\"" << expected.String
<< "\") did not yield expected set of resource groups"
<< std::endl;
return false;
}
return true;
}
int testCTestResourceGroups(int /*unused*/, char* /*unused*/[])
{
int retval = 0;
for (auto const& expected : expectedResults) {
if (!TestExpectedParseResult(expected)) {
retval = 1;
}
}
return retval;
}