aboutsummaryrefslogtreecommitdiffstats
path: root/test/libevmasm
diff options
context:
space:
mode:
Diffstat (limited to 'test/libevmasm')
-rw-r--r--test/libevmasm/Optimiser.cpp99
1 files changed, 62 insertions, 37 deletions
diff --git a/test/libevmasm/Optimiser.cpp b/test/libevmasm/Optimiser.cpp
index 6b588e75..b622b4fb 100644
--- a/test/libevmasm/Optimiser.cpp
+++ b/test/libevmasm/Optimiser.cpp
@@ -860,53 +860,78 @@ BOOST_AUTO_TEST_CASE(peephole_pop_calldatasize)
BOOST_AUTO_TEST_CASE(peephole_commutative_swap1)
{
- AssemblyItems items{
- u256(1),
- u256(2),
- Instruction::SWAP1,
- Instruction::ADD,
- u256(4),
- u256(5)
- };
- AssemblyItems expectation{
- u256(1),
- u256(2),
+ vector<Instruction> ops{
Instruction::ADD,
- u256(4),
- u256(5)
+ Instruction::MUL,
+ Instruction::EQ,
+ Instruction::AND,
+ Instruction::OR,
+ Instruction::XOR
};
- PeepholeOptimiser peepOpt(items);
- BOOST_REQUIRE(peepOpt.optimise());
- BOOST_CHECK_EQUAL_COLLECTIONS(
+ for (Instruction const op: ops)
+ {
+ AssemblyItems items{
+ u256(1),
+ u256(2),
+ Instruction::SWAP1,
+ op,
+ u256(4),
+ u256(5)
+ };
+ AssemblyItems expectation{
+ u256(1),
+ u256(2),
+ op,
+ u256(4),
+ u256(5)
+ };
+ PeepholeOptimiser peepOpt(items);
+ BOOST_REQUIRE(peepOpt.optimise());
+ BOOST_CHECK_EQUAL_COLLECTIONS(
items.begin(), items.end(),
- expectation.begin(), expectation.end()
- );
+ expectation.begin(), expectation.end()
+ );
+ }
}
BOOST_AUTO_TEST_CASE(peephole_noncommutative_swap1)
{
- AssemblyItems items{
- u256(1),
- u256(2),
- Instruction::SWAP1,
+ // NOTE: not comprehensive
+ vector<Instruction> ops{
Instruction::SUB,
- u256(4),
- u256(5)
- };
- AssemblyItems expectation{
- u256(1),
- u256(2),
- Instruction::SWAP1,
- Instruction::SUB,
- u256(4),
- u256(5)
+ Instruction::DIV,
+ Instruction::SDIV,
+ Instruction::MOD,
+ Instruction::SMOD,
+ Instruction::EXP,
+ Instruction::LT,
+ Instruction::GT
};
- PeepholeOptimiser peepOpt(items);
- BOOST_REQUIRE(!peepOpt.optimise());
- BOOST_CHECK_EQUAL_COLLECTIONS(
+ for (Instruction const op: ops)
+ {
+ AssemblyItems items{
+ u256(1),
+ u256(2),
+ Instruction::SWAP1,
+ op,
+ u256(4),
+ u256(5)
+ };
+ AssemblyItems expectation{
+ u256(1),
+ u256(2),
+ Instruction::SWAP1,
+ op,
+ u256(4),
+ u256(5)
+ };
+ PeepholeOptimiser peepOpt(items);
+ BOOST_REQUIRE(!peepOpt.optimise());
+ BOOST_CHECK_EQUAL_COLLECTIONS(
items.begin(), items.end(),
- expectation.begin(), expectation.end()
- );
+ expectation.begin(), expectation.end()
+ );
+ }
}
BOOST_AUTO_TEST_CASE(jumpdest_removal)