Added tests and support for suffix function with 2 arguments

This commit is contained in:
Matheus Aguiar
2023-05-17 16:55:33 +02:00
committed by Kamil Śliwak
parent 2bf76afec1
commit e4eec4d910
8 changed files with 175 additions and 4 deletions
+18 -4
View File
@@ -3174,10 +3174,24 @@ vector<smtutil::Expression> SMTEncoder::symbolicArguments(FunctionCall const& _f
firstParam = 1;
}
solAssert((arguments.size() + firstParam) == functionParams.size(), "");
for (unsigned i = 0; i < arguments.size(); ++i)
args.push_back(expr(*arguments.at(i), functionParams.at(i + firstParam)->type()));
if (_funCall.isSuffixCall() && functionParams.size() == 2)
{
solAssert(!funType->hasBoundFirstArgument());
solAssert(arguments.size() == 1);
auto&& literalType = dynamic_cast<RationalNumberType const*>(arguments[0]->annotation().type);
solAssert(literalType);
auto&& [mantissa, exponent] = literalType->fractionalDecomposition();
solAssert(mantissa && exponent);
solAssert(!mantissa->isNegative() && !exponent->isNegative());
args.emplace_back(mantissa->literalValue(nullptr));
args.emplace_back(exponent->literalValue(nullptr));
}
else
{
solAssert((arguments.size() + firstParam) == functionParams.size(), "");
for (unsigned i = 0; i < arguments.size(); ++i)
args.push_back(expr(*arguments.at(i), functionParams.at(i + firstParam)->type()));
}
return args;
}