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:
Daniel Kirchner 2022-09-14 13:10:03 +02:00 committed by GitHub
commit 5f63b3ca21
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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()