mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Command line tests and minor touch ups
This commit is contained in:
+2
-2
@@ -3,8 +3,8 @@
|
||||
[
|
||||
{
|
||||
"component": "general",
|
||||
"formattedMessage": "Invalid optimizer step sequence in \"settings.optimizer.details.optimizerSteps\": Cleanup delimiter may only be placed at nesting level zero",
|
||||
"message": "Invalid optimizer step sequence in \"settings.optimizer.details.optimizerSteps\": Cleanup delimiter may only be placed at nesting level zero",
|
||||
"formattedMessage": "Invalid optimizer step sequence in \"settings.optimizer.details.optimizerSteps\": Cleanup sequence delimiter cannot be placed inside the brackets",
|
||||
"message": "Invalid optimizer step sequence in \"settings.optimizer.details.optimizerSteps\": Cleanup sequence delimiter cannot be placed inside the brackets",
|
||||
"severity": "error",
|
||||
"type": "JSONError"
|
||||
}
|
||||
|
||||
+2
-2
@@ -3,8 +3,8 @@
|
||||
[
|
||||
{
|
||||
"component": "general",
|
||||
"formattedMessage": "Invalid optimizer step sequence in \"settings.optimizer.details.optimizerSteps\": Too many colon delimiters",
|
||||
"message": "Invalid optimizer step sequence in \"settings.optimizer.details.optimizerSteps\": Too many colon delimiters",
|
||||
"formattedMessage": "Invalid optimizer step sequence in \"settings.optimizer.details.optimizerSteps\": Too many cleanup sequence delimiters",
|
||||
"message": "Invalid optimizer step sequence in \"settings.optimizer.details.optimizerSteps\": Too many cleanup sequence delimiters",
|
||||
"severity": "error",
|
||||
"type": "JSONError"
|
||||
}
|
||||
|
||||
@@ -1 +1 @@
|
||||
Invalid optimizer step sequence in --yul-optimizations: Cleanup delimiter may only be placed at nesting level zero
|
||||
Invalid optimizer step sequence in --yul-optimizations: Cleanup sequence delimiter cannot be placed inside the brackets
|
||||
|
||||
@@ -1 +1 @@
|
||||
Invalid optimizer step sequence in --yul-optimizations: Too many colon delimiters
|
||||
Invalid optimizer step sequence in --yul-optimizations: Too many cleanup sequence delimiters
|
||||
|
||||
@@ -6,8 +6,8 @@ contract C {
|
||||
constructor() payable {
|
||||
assembly ("memory-safe") {
|
||||
let a := 0
|
||||
revert(0, a)
|
||||
// Without the cleanup sequence this will not be simplified to ``revert(a, a)``.
|
||||
revert(0, a)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,8 +6,8 @@ contract C {
|
||||
constructor() payable {
|
||||
assembly ("memory-safe") {
|
||||
let a := 0
|
||||
revert(0, a)
|
||||
// Without the cleanup sequence this will not be simplified to ``revert(a, a)``.
|
||||
revert(0, a)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1244,10 +1244,11 @@ BOOST_AUTO_TEST_CASE(optimizer_settings_details_different)
|
||||
BOOST_CHECK(optimizer["details"]["yulDetails"].isObject());
|
||||
BOOST_CHECK(
|
||||
util::convertContainer<set<string>>(optimizer["details"]["yulDetails"].getMemberNames()) ==
|
||||
(set<string>{"stackAllocation", "optimizerSteps"})
|
||||
(set<string>{"stackAllocation", "optimizerSteps", "optimizerCleanupSteps"})
|
||||
);
|
||||
BOOST_CHECK(optimizer["details"]["yulDetails"]["stackAllocation"].asBool() == true);
|
||||
BOOST_CHECK(optimizer["details"]["yulDetails"]["optimizerSteps"].asString() == OptimiserSettings::DefaultYulOptimiserSteps);
|
||||
BOOST_CHECK(optimizer["details"]["yulDetails"]["optimizerCleanupSteps"].asString() == OptimiserSettings::DefaultYulOptimiserCleanupSteps);
|
||||
BOOST_CHECK_EQUAL(optimizer["details"].getMemberNames().size(), 9);
|
||||
BOOST_CHECK(optimizer["runs"].asUInt() == 600);
|
||||
}
|
||||
|
||||
@@ -426,6 +426,58 @@ BOOST_AUTO_TEST_CASE(invalid_options_input_modes_combinations)
|
||||
}
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(default_optimiser_sequence)
|
||||
{
|
||||
auto const& commandLineOptions = parseCommandLine({"solc", "contract.sol", "--optimize"});
|
||||
BOOST_CHECK_EQUAL(commandLineOptions.optimiserSettings().yulOptimiserSteps, OptimiserSettings::DefaultYulOptimiserSteps);
|
||||
BOOST_CHECK_EQUAL(commandLineOptions.optimiserSettings().yulOptimiserCleanupSteps, OptimiserSettings::DefaultYulOptimiserCleanupSteps);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(valid_optimiser_sequences)
|
||||
{
|
||||
vector<string> validSequenceInputs {
|
||||
":", // Empty optimizaiton sequence and empty cleanup sequence
|
||||
":fDn", // Empty optimization sequence and specified cleanup sequence
|
||||
"dhfoDgvulfnTUtnIf:", // Specified optimizaiton sequence and empty cleanup sequence
|
||||
"dhfoDgvulfnTUtnIf:fDn", // Specified optimization sequence and cleanup sequence
|
||||
"dhfo[Dgvulfn]TUtnIf:f[D]n" // Specified and nested optimization and cleanup sequence
|
||||
};
|
||||
|
||||
vector<tuple<string, string>> expectedParsedSequences {
|
||||
{ "", "" },
|
||||
{ "", "fDn"},
|
||||
{ "dhfoDgvulfnTUtnIf", ""},
|
||||
{ "dhfoDgvulfnTUtnIf", "fDn"},
|
||||
{ "dhfo[Dgvulfn]TUtnIf", "f[D]n"}
|
||||
};
|
||||
|
||||
BOOST_CHECK_EQUAL(validSequenceInputs.size(), expectedParsedSequences.size());
|
||||
|
||||
for (size_t i = 0; i < validSequenceInputs.size(); ++i)
|
||||
{
|
||||
auto const& commandLineOptions = parseCommandLine({"solc", "contract.sol", "--optimize", "--yul-optimizations=" + validSequenceInputs[i]});
|
||||
auto const& [expectedYulOptimiserSteps, expectedYulCleanupSteps] = expectedParsedSequences[i];
|
||||
BOOST_CHECK_EQUAL(commandLineOptions.optimiserSettings().yulOptimiserSteps, expectedYulOptimiserSteps);
|
||||
BOOST_CHECK_EQUAL(commandLineOptions.optimiserSettings().yulOptimiserCleanupSteps, expectedYulCleanupSteps);
|
||||
}
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(invalid_nested_cleanup_sequence_delimiter)
|
||||
{
|
||||
vector<string> commandLine {"solc", "contract.sol", "--optimize", "--yul-optimizations=dhfoDgvulfnTUt[nIf:fd]N"};
|
||||
string expectedMessage = "Invalid optimizer step sequence in --yul-optimizations: Cleanup sequence delimiter cannot be placed inside the brackets";
|
||||
auto hasCorrectMessage = [&](CommandLineValidationError const& _exception) { return _exception.what() == expectedMessage; };
|
||||
BOOST_CHECK_EXCEPTION(parseCommandLine(commandLine), CommandLineValidationError, hasCorrectMessage);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(too_many_cleanup_sequence_delimiters)
|
||||
{
|
||||
vector<string> commandLine {"solc", "contract.sol", "--optimize", "--yul-optimizations=dhfoDgvulfnTU:tnIf:fdN"};
|
||||
string expectedMessage = "Invalid optimizer step sequence in --yul-optimizations: Too many cleanup sequence delimiters";
|
||||
auto hasCorrectMessage = [&](CommandLineValidationError const& _exception) { return _exception.what() == expectedMessage; };
|
||||
BOOST_CHECK_EXCEPTION(parseCommandLine(commandLine), CommandLineValidationError, hasCorrectMessage);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
|
||||
} // namespace solidity::frontend::test
|
||||
|
||||
Reference in New Issue
Block a user