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.
142 lines
3.5 KiB
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;
|
|
}
|