@@ -394,3 +394,33 @@ TEST(instructions, shanghai_hard_fork)
394394 EXPECT_EQ (sn[OP_PUSH0 ], std::string{" PUSH0" });
395395 EXPECT_TRUE (pn[OP_PUSH0 ] == nullptr );
396396}
397+
398+ TEST (instructions, cancun_hard_fork)
399+ {
400+ const auto c = evmc_get_instruction_metrics_table (EVMC_CANCUN );
401+ const auto s = evmc_get_instruction_metrics_table (EVMC_SHANGHAI );
402+ const auto cn = evmc_get_instruction_names_table (EVMC_CANCUN );
403+ const auto sn = evmc_get_instruction_names_table (EVMC_SHANGHAI );
404+
405+ for (int op = 0x00 ; op <= 0xff ; ++op)
406+ {
407+ if (op == OP_RJUMP || op == OP_RJUMPI )
408+ continue ;
409+ EXPECT_EQ (c[op], s[op]) << op;
410+ EXPECT_STREQ (cn[op], sn[op]) << op;
411+ }
412+
413+ // EIP-4200: Static relative jumps
414+ EXPECT_EQ (c[OP_RJUMP ].gas_cost , 5 );
415+ EXPECT_EQ (c[OP_RJUMP ].stack_height_required , 0 );
416+ EXPECT_EQ (c[OP_RJUMP ].stack_height_change , 0 );
417+ EXPECT_EQ (s[OP_RJUMP ].gas_cost , 0 );
418+ EXPECT_EQ (cn[OP_RJUMP ], std::string{" RJUMP" });
419+ EXPECT_TRUE (sn[OP_RJUMP ] == nullptr );
420+ EXPECT_EQ (c[OP_RJUMPI ].gas_cost , 7 );
421+ EXPECT_EQ (c[OP_RJUMPI ].stack_height_required , 1 );
422+ EXPECT_EQ (c[OP_RJUMPI ].stack_height_change , -1 );
423+ EXPECT_EQ (s[OP_RJUMPI ].gas_cost , 0 );
424+ EXPECT_EQ (cn[OP_RJUMPI ], std::string{" RJUMPI" });
425+ EXPECT_TRUE (sn[OP_RJUMPI ] == nullptr );
426+ }
0 commit comments