Я хотел бы использовать более одного генератора в Catch2
тестовом примере. Моя проблема в том, что, когда существует более двух генераторов, они «объединяются». Поэтому, если я напишу что-то вроде этого:
TEST_CASE("Test legal moves on empty 2x1 board") {
Board board(2, 1);
auto startPos = GENERATE(Position(0, 0), Position(1, 0));
auto expectedMoves = GENERATE(Position(1, 0), Position(0, 0));
auto legalMoves = board.getLegalMoves(startPos);
REQUIRE(legalMoves[0] == expectedMoves);
}
Это приведет к четырем контрольным случаям: (startPos[0] vs expectedMoves[0]
, startPos[0] vs expectedMoves[1]
, startPos[1] vs expectedMoves[0]
, startPos[1] vs startPos[1]
).
I однако хочется только два: (startPos[0] vs expectedMoves[0]
, startPos[1] vs startPos[1]
).
Есть ли способ сделать это элегантным и читабельным способом? Я бы хотел избежать таких вещей:
TEST_CASE("Test legal moves on empty 2x1 board") {
Board board(2, 1);
auto dump = GENERATE(vector<Position>{ Position(0, 0), Position(1, 0) },
vector<Position>{ Position(1, 0), Position(0, 0) });
auto expectedMoves = dump[1];
auto legalMoves = board.getLegalMoves(dump[0]);
REQUIRE(legalMoves[0] == expectedMoves);
}
Поскольку поддержание такого уродства громоздко.
РЕДАКТИРОВАТЬ: Мне не очень нравится это решение: https://github.com/catchorg/Catch2/blob/ce42deb72fab2be85a862f559984580c24cb76c4/projects/SelfTest/UsageTests/Generators.tests.cpp#L199