mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #13519 from ethereum/boost-tests-for-non-delimited-optimizer-sequence
Boost tests for non-delimited optimizer sequence
This commit is contained in:
commit
5f63b3ca21
@ -440,15 +440,21 @@ BOOST_AUTO_TEST_CASE(valid_optimiser_sequences)
|
|||||||
":fDn", // Empty optimization sequence and specified cleanup sequence
|
":fDn", // Empty optimization sequence and specified cleanup sequence
|
||||||
"dhfoDgvulfnTUtnIf:", // Specified optimization sequence and empty cleanup sequence
|
"dhfoDgvulfnTUtnIf:", // Specified optimization sequence and empty cleanup sequence
|
||||||
"dhfoDgvulfnTUtnIf:fDn", // Specified optimization sequence and cleanup sequence
|
"dhfoDgvulfnTUtnIf:fDn", // Specified optimization sequence and cleanup sequence
|
||||||
"dhfo[Dgvulfn]TUtnIf:f[D]n" // Specified and nested optimization and cleanup sequence
|
"dhfo[Dgvulfn]TUtnIf:f[D]n", // Specified and nested optimization and cleanup sequence
|
||||||
|
"dhfoDgvulfnTUtnIf", // Specified optimizer sequence only
|
||||||
|
"iDu", // Short optimizer sequence
|
||||||
|
"a[[a][[aa]aa[aa]][]]aaa[aa[aa[aa]]]a[a][a][a]a[a]" // Nested brackets
|
||||||
};
|
};
|
||||||
|
|
||||||
vector<tuple<string, string>> expectedParsedSequences {
|
vector<tuple<string, string>> const expectedParsedSequences {
|
||||||
{"", ""},
|
{"", ""},
|
||||||
{"", "fDn"},
|
{"", "fDn"},
|
||||||
{"dhfoDgvulfnTUtnIf", ""},
|
{"dhfoDgvulfnTUtnIf", ""},
|
||||||
{"dhfoDgvulfnTUtnIf", "fDn"},
|
{"dhfoDgvulfnTUtnIf", "fDn"},
|
||||||
{"dhfo[Dgvulfn]TUtnIf", "f[D]n"}
|
{"dhfo[Dgvulfn]TUtnIf", "f[D]n"},
|
||||||
|
{"dhfoDgvulfnTUtnIf", OptimiserSettings::DefaultYulOptimiserCleanupSteps},
|
||||||
|
{"iDu", OptimiserSettings::DefaultYulOptimiserCleanupSteps},
|
||||||
|
{"a[[a][[aa]aa[aa]][]]aaa[aa[aa[aa]]]a[a][a][a]a[a]", OptimiserSettings::DefaultYulOptimiserCleanupSteps}
|
||||||
};
|
};
|
||||||
|
|
||||||
BOOST_CHECK_EQUAL(validSequenceInputs.size(), expectedParsedSequences.size());
|
BOOST_CHECK_EQUAL(validSequenceInputs.size(), expectedParsedSequences.size());
|
||||||
@ -462,20 +468,46 @@ BOOST_AUTO_TEST_CASE(valid_optimiser_sequences)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(invalid_nested_cleanup_sequence_delimiter)
|
BOOST_AUTO_TEST_CASE(invalid_optimiser_sequences)
|
||||||
{
|
{
|
||||||
vector<string> commandLine {"solc", "contract.sol", "--optimize", "--yul-optimizations=dhfoDgvulfnTUt[nIf:fd]N"};
|
vector<string> const invalidSequenceInputs {
|
||||||
string expectedMessage = "Invalid optimizer step sequence in --yul-optimizations: Cleanup sequence delimiter cannot be placed inside the brackets";
|
"abcdefg{hijklmno}pqr[st]uvwxyz", // Invalid abbreviation
|
||||||
auto hasCorrectMessage = [&](CommandLineValidationError const& _exception) { return _exception.what() == expectedMessage; };
|
"[[[[[[[[[[[[[[[[[[[[[[[[[[[[[["
|
||||||
BOOST_CHECK_EXCEPTION(parseCommandLine(commandLine), CommandLineValidationError, hasCorrectMessage);
|
"[[[[[[[[[[[[[[[[[[[[[[[[[[[[[["
|
||||||
}
|
"[[[[[[[[[[[[[[[[[[[[[[[[[[[[[["
|
||||||
|
"[[[[[[[[[[[[[[[[[[[[[[[[[[[[[["
|
||||||
|
"[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[a]"
|
||||||
|
"]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]"
|
||||||
|
"]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]"
|
||||||
|
"]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]"
|
||||||
|
"]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]"
|
||||||
|
"]]]]]]]]]]]]]]]]]]]]]]]]]]]]]", // Brackets nested too deep
|
||||||
|
"a]a][", // Unbalanced closing bracket
|
||||||
|
"a[a][", // Unbalanced opening bracket
|
||||||
|
"dhfoDgvulfnTUt[nIf:fd]N", // Nested cleanup sequence delimiter
|
||||||
|
"dhfoDgvulfnTU:tnIf:fdN" // Too many cleanup sequence delimiters
|
||||||
|
};
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(too_many_cleanup_sequence_delimiters)
|
vector<string> const expectedErrorMessages {
|
||||||
|
"'b' is not a valid step abbreviation",
|
||||||
|
"Brackets nested too deep",
|
||||||
|
"Unbalanced brackets",
|
||||||
|
"Unbalanced brackets",
|
||||||
|
"Cleanup sequence delimiter cannot be placed inside the brackets",
|
||||||
|
"Too many cleanup sequence delimiters"
|
||||||
|
};
|
||||||
|
|
||||||
|
BOOST_CHECK_EQUAL(invalidSequenceInputs.size(), expectedErrorMessages.size());
|
||||||
|
|
||||||
|
string const baseExpectedErrorMessage = "Invalid optimizer step sequence in --yul-optimizations: ";
|
||||||
|
|
||||||
|
for (size_t i = 0; i < invalidSequenceInputs.size(); ++i)
|
||||||
{
|
{
|
||||||
vector<string> commandLine {"solc", "contract.sol", "--optimize", "--yul-optimizations=dhfoDgvulfnTU:tnIf:fdN"};
|
vector<string> const commandLineOptions = {"solc", "contract.sol", "--optimize", "--yul-optimizations=" + invalidSequenceInputs[i]};
|
||||||
string expectedMessage = "Invalid optimizer step sequence in --yul-optimizations: Too many cleanup sequence delimiters";
|
string const expectedErrorMessage = baseExpectedErrorMessage + expectedErrorMessages[i];
|
||||||
auto hasCorrectMessage = [&](CommandLineValidationError const& _exception) { return _exception.what() == expectedMessage; };
|
auto hasCorrectMessage = [&](CommandLineValidationError const& _exception) { return _exception.what() == expectedErrorMessage; };
|
||||||
BOOST_CHECK_EXCEPTION(parseCommandLine(commandLine), CommandLineValidationError, hasCorrectMessage);
|
BOOST_CHECK_EXCEPTION(parseCommandLine(commandLineOptions), CommandLineValidationError, hasCorrectMessage);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE_END()
|
BOOST_AUTO_TEST_SUITE_END()
|
||||||
|
Loading…
Reference in New Issue
Block a user