Skip to content

Commit 8242857

Browse files
TestsPrinter: use parametrizedArrayParameters in printFunctionParameters
Use TestsPrinter::parametrizedArrayParameters method in TestsPrinter::printFunctionParameters and call it for every parameter. I decided to do it because TestsPrinter::parametrizedArrayParameters also outputs the function parameters. This change fix the appearance of two structs in generated tests. The point of thing is that if we pass some pointer to a struct to a function: bool OKrow(int x, const sudoku *a, int y, int v); where: struct sudoku { unsigned int *a; unsigned int N; unsigned int N2; }; We have the pointer to the struct and this struct contains a lazy value. Refs: #475
1 parent 0ad0e06 commit 8242857

File tree

2 files changed

+39
-39
lines changed

2 files changed

+39
-39
lines changed

server/src/printers/TestsPrinter.cpp

Lines changed: 37 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,6 @@ void TestsPrinter::genParametrizedTestCase(const Tests::MethodDescription &metho
348348
openFiles(methodDescription, testCase);
349349
parametrizedInitializeGlobalVariables(methodDescription, testCase);
350350
parametrizedInitializeSymbolicStubs(methodDescription, testCase);
351-
parametrizedArrayParameters(methodDescription, testCase);
352351
printClassObject(methodDescription, testCase);
353352
printStubVariables(methodDescription, testCase);
354353
printFunctionParameters(methodDescription, testCase, false);
@@ -453,20 +452,16 @@ void TestsPrinter::printFunctionParameters(const Tests::MethodDescription &metho
453452
const Tests::MethodTestCase &testCase,
454453
bool all) {
455454
for (auto i = 0; i < testCase.paramValues.size(); i++) {
456-
bool containsLazy = !testCase.paramValues[i].lazyValues.empty() &&
457-
!methodDescription.params[i].isChangeable();
458-
if (!methodDescription.params[i].type.isFilePointer() &&
459-
(all || methodDescription.params[i].type.isLValueReference() || containsLazy)) {
460-
Tests::MethodParam param = methodDescription.params[i];
461-
auto value = testCase.paramValues[i];
455+
parametrizedArrayParameters(methodDescription, testCase, i);
456+
const Tests::MethodParam &param = methodDescription.params[i];
457+
bool containsLazy = !testCase.paramValues[i].lazyValues.empty() && !param.isChangeable();
458+
if (!param.type.isFilePointer() &&
459+
(all || param.type.isLValueReference() || param.type.isSimple() && containsLazy)) {
460+
Tests::TestCaseParamValue value = testCase.paramValues[i];
462461
Tests::MethodParam valueParam = getValueParam(param);
463-
if (methodDescription.params[i].type.maybeJustPointer()) {
464-
valueParam.type = valueParam.type.baseTypeObj();
465-
}
466462
value.name = valueParam.name;
467-
verboseParameter(methodDescription, valueParam, value, true);
468-
if (param.type.isTwoDimensionalPointer()) {
469-
gen2DPointer(param, true);
463+
if (param.type.isLValueReference() || param.type.isSimple()) {
464+
verboseParameter(methodDescription, valueParam, value, true);
470465
}
471466
}
472467
}
@@ -629,33 +624,37 @@ void TestsPrinter::globalParamsAsserts(const Tests::MethodDescription &methodDes
629624
}
630625

631626
void TestsPrinter::parametrizedArrayParameters(const Tests::MethodDescription &methodDescription,
632-
const Tests::MethodTestCase &testCase) {
633-
for (auto i = 0; i < testCase.paramValues.size(); i++) {
634-
const auto &param = methodDescription.params[i];
635-
const auto &value = testCase.paramValues[i];
636-
if (types::TypesHandler::isArrayOfPointersToFunction(param.type)) {
637-
auto type = getTypedefFunctionPointer(methodDescription.name, param.name, false);
638-
std::string stubName = PrinterUtils::getFunctionPointerStubName(
639-
methodDescription.getClassTypeName(), methodDescription.name, param.name);
640-
strDeclareArrayOfFunctionPointerVar(type, param.name, stubName);
641-
} else if (types::TypesHandler::isCStringType(param.type)) {
642-
strDeclareArrayVar(param.type, param.name, types::PointerUsage::PARAMETER, value.view->getEntryValue(this), param.alignment);
643-
} else if (!param.type.isFilePointer() && (param.type.isObjectPointer() || param.type.isArray())) {
644-
auto arrayType = types::TypesHandler::isVoid(param.type.baseTypeObj())
645-
? types::Type::minimalScalarPointerType(param.type.arraysSizes(types::PointerUsage::PARAMETER).size())
646-
: param.type;
647-
if (param.type.maybeJustPointer()) {
648-
strDeclareVar(arrayType.baseType(), param.name, value.view->getEntryValue(this), param.alignment);
649-
} else {
650-
auto paramName = param.type.isTwoDimensionalPointer() ? param.underscoredName() : param.name;
651-
strDeclareArrayVar(arrayType, paramName, types::PointerUsage::PARAMETER,
652-
value.view->getEntryValue(this), param.alignment, true);
653-
}
654-
}
655-
if (param.type.isTwoDimensionalPointer()) {
656-
gen2DPointer(param, true);
627+
const Tests::MethodTestCase &testCase,
628+
int param_num) {
629+
const auto &param = methodDescription.params[param_num];
630+
const auto &value = testCase.paramValues[param_num];
631+
if (types::TypesHandler::isArrayOfPointersToFunction(param.type)) {
632+
auto type = getTypedefFunctionPointer(methodDescription.name, param.name, false);
633+
std::string stubName = PrinterUtils::getFunctionPointerStubName(
634+
methodDescription.getClassTypeName(), methodDescription.name, param.name);
635+
strDeclareArrayOfFunctionPointerVar(type, param.name, stubName);
636+
} else if (types::TypesHandler::isCStringType(param.type)) {
637+
strDeclareArrayVar(param.type, param.name, types::PointerUsage::PARAMETER,
638+
value.view->getEntryValue(this), param.alignment);
639+
} else if (!param.type.isFilePointer() &&
640+
(param.type.isObjectPointer() || param.type.isArray())) {
641+
auto arrayType = types::TypesHandler::isVoid(param.type.baseTypeObj())
642+
? types::Type::minimalScalarPointerType(
643+
param.type.arraysSizes(types::PointerUsage::PARAMETER).size())
644+
: param.type;
645+
if (param.type.maybeJustPointer()) {
646+
strDeclareVar(arrayType.baseType(), param.name, value.view->getEntryValue(this),
647+
param.alignment);
648+
} else {
649+
auto paramName =
650+
param.type.isTwoDimensionalPointer() ? param.underscoredName() : param.name;
651+
strDeclareArrayVar(arrayType, paramName, types::PointerUsage::PARAMETER,
652+
value.view->getEntryValue(this), param.alignment, true);
657653
}
658654
}
655+
if (param.type.isTwoDimensionalPointer()) {
656+
gen2DPointer(param, true);
657+
}
659658
}
660659

661660
void TestsPrinter::parametrizedAsserts(const Tests::MethodDescription &methodDescription,

server/src/printers/TestsPrinter.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,8 @@ namespace printer {
8585
const Tests::MethodTestCase &testCase);
8686

8787
void parametrizedArrayParameters(const tests::Tests::MethodDescription &methodDescription,
88-
const Tests::MethodTestCase &testCase);
88+
const Tests::MethodTestCase &testCase,
89+
int param_num);
8990

9091
void parametrizedAsserts(const tests::Tests::MethodDescription &methodDescription,
9192
const Tests::MethodTestCase &testCase,

0 commit comments

Comments
 (0)