@@ -14,27 +14,28 @@ class StateTest : public testing::Test
1414{
1515 fs::path m_json_test_file;
1616 evmc::VM& m_vm;
17+ bool m_trace = false ;
1718
1819public:
19- explicit StateTest (fs::path json_test_file, evmc::VM& vm) noexcept
20- : m_json_test_file{std::move (json_test_file)}, m_vm{vm}
20+ explicit StateTest (fs::path json_test_file, evmc::VM& vm, bool trace ) noexcept
21+ : m_json_test_file{std::move (json_test_file)}, m_vm{vm}, m_trace{trace}
2122 {}
2223
2324 void TestBody () final
2425 {
2526 std::ifstream f{m_json_test_file};
26- evmone::test::run_state_test (evmone::test::load_state_test (f), m_vm);
27+ evmone::test::run_state_test (evmone::test::load_state_test (f), m_vm, m_trace );
2728 }
2829};
2930
30- void register_test (const std::string& suite_name, const fs::path& file, evmc::VM& vm)
31+ void register_test (const std::string& suite_name, const fs::path& file, evmc::VM& vm, bool trace )
3132{
3233 testing::RegisterTest (suite_name.c_str (), file.stem ().string ().c_str (), nullptr , nullptr ,
3334 file.string ().c_str (), 0 ,
34- [file, &vm]() -> testing::Test* { return new StateTest (file, vm); });
35+ [file, &vm, trace ]() -> testing::Test* { return new StateTest (file, vm, trace ); });
3536}
3637
37- void register_test_files (const fs::path& root, evmc::VM& vm)
38+ void register_test_files (const fs::path& root, evmc::VM& vm, bool trace )
3839{
3940 if (is_directory (root))
4041 {
@@ -46,11 +47,11 @@ void register_test_files(const fs::path& root, evmc::VM& vm)
4647 std::sort (test_files.begin (), test_files.end ());
4748
4849 for (const auto & p : test_files)
49- register_test (fs::relative (p, root).parent_path ().string (), p, vm);
50+ register_test (fs::relative (p, root).parent_path ().string (), p, vm, trace );
5051 }
5152 else // Treat as a file.
5253 {
53- register_test (root.parent_path ().string (), root, vm);
54+ register_test (root.parent_path ().string (), root, vm, trace );
5455 }
5556}
5657} // namespace
@@ -80,18 +81,21 @@ int main(int argc, char* argv[])
8081 ->required ()
8182 ->check (CLI::ExistingPath);
8283
83- bool trace_flag = false ;
84- app.add_flag (" --trace" , trace_flag, " Enable EVM tracing" );
84+ bool trace = false ;
85+ bool trace_summary = false ;
86+ const auto trace_opt = app.add_flag (" --trace" , trace, " Enable EVM tracing" );
87+ app.add_flag (" --trace-summary" , trace_summary, " Output trace summary only" )
88+ ->excludes (trace_opt);
8589
8690 CLI11_PARSE (app, argc, argv);
8791
8892 evmc::VM vm{evmc_create_evmone (), {{" O" , " 0" }}};
8993
90- if (trace_flag )
94+ if (trace )
9195 vm.set_option (" trace" , " 1" );
9296
9397 for (const auto & p : paths)
94- register_test_files (p, vm);
98+ register_test_files (p, vm, trace || trace_summary );
9599
96100 return RUN_ALL_TESTS ();
97101 }
0 commit comments