Skip to content

Commit cd75d6e

Browse files
authored
Initial testing infrastructure update (#340)
* Integrate all tests All non-passing tests are set as ignore and we then gradually fix them. * Add spectests submodule * Update github workflow * Fix cargo fmt * Remove nightly fmt We need to run cargo fmt on stable * Update rust version * Fix clippy * Fix no-std clippy
1 parent d26b7bf commit cd75d6e

File tree

8 files changed

+115
-95
lines changed

8 files changed

+115
-95
lines changed

.github/workflows/rust.yml

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -34,24 +34,11 @@ jobs:
3434
run: cargo build --all-features
3535
- name: Run tests
3636
run: cargo test --verbose
37-
jsontests:
37+
tests:
3838
runs-on: ubuntu-latest
3939
steps:
4040
- uses: actions/checkout@v4
4141
with:
4242
submodules: recursive
4343
- name: Run tests
44-
run: |
45-
cargo run --release --verbose -p jsontests -- \
46-
jsontests/res/ethtests/GeneralStateTests/stArgsZeroOneBalance/ \
47-
jsontests/res/ethtests/GeneralStateTests/stCodeCopyTest/ \
48-
jsontests/res/ethtests/GeneralStateTests/stExample/ \
49-
jsontests/res/ethtests/GeneralStateTests/stSelfBalance \
50-
jsontests/res/ethtests/GeneralStateTests/stSLoadTest/ \
51-
jsontests/res/ethtests/GeneralStateTests/VMTests/vmArithmeticTest/ \
52-
jsontests/res/ethtests/GeneralStateTests/VMTests/vmBitwiseLogicOperation/ \
53-
jsontests/res/ethtests/GeneralStateTests/VMTests/vmIOandFlowOperations/ \
54-
jsontests/res/ethtests/GeneralStateTests/VMTests/vmLogTest/ \
55-
jsontests/res/ethtests/GeneralStateTests/VMTests/vmTests/ \
56-
jsontests/res/ethtests/GeneralStateTests/stEIP150singleCodeGasPrices/eip2929.json
57-
44+
run: cargo test --all --release --verbose

.gitmodules

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
11
[submodule "jsontests/res/ethtests"]
22
path = jsontests/res/ethtests
33
url = https://github.com/ethereum/tests
4+
shallow = true
5+
[submodule "jsontests/res/spectests"]
6+
path = jsontests/res/spectests
7+
url = https://github.com/ethereum/execution-spec-tests
8+
shallow = true

interpreter/tests/usability.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ fn etable_wrap() {
2525
move |machine, handle, position| {
2626
let opcode = Opcode(machine.code()[position]);
2727
assert_eq!(opcode_t, opcode);
28-
println!("opcode: {:?}", opcode);
28+
println!("opcode: {opcode:?}");
2929
f(machine, handle, position)
3030
}
3131
});
@@ -49,7 +49,7 @@ fn etable_wrap2() {
4949
Box::new(move |machine, handle, position| {
5050
let opcode = Opcode(machine.code()[position]);
5151
assert_eq!(opcode_t, opcode);
52-
println!("opcode: {:?}", opcode);
52+
println!("opcode: {opcode:?}");
5353
f(machine, handle, position)
5454
})
5555
} else {

jsontests/res/spectests

Submodule spectests added at 666cd64

jsontests/src/lib.rs

Lines changed: 103 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -4,80 +4,109 @@ pub mod in_memory;
44
pub mod run;
55
pub mod types;
66

7-
#[test]
8-
fn st_args_zero_one_balance() {
9-
const JSON_FILENAME: &str = "res/ethtests/GeneralStateTests/stArgsZeroOneBalance/";
10-
let tests_status = run::run_single(JSON_FILENAME, false).unwrap();
11-
tests_status.print_total();
7+
macro_rules! general_state_tests {
8+
( $name:ident, $folder:expr $(,$extra_meta:meta)? ) => {
9+
$(#[$extra_meta])?
10+
#[test]
11+
fn $name() {
12+
const JSON_FILENAME: &str = concat!("res/ethtests/GeneralStateTests/", $folder, "/");
13+
println!("name: {}", JSON_FILENAME);
14+
let tests_status = run::run_single(JSON_FILENAME, false).unwrap();
15+
tests_status.print_total();
16+
}
17+
}
1218
}
1319

14-
#[test]
15-
fn st_code_copy_test() {
16-
const JSON_FILENAME: &str = "res/ethtests/GeneralStateTests/stCodeCopyTest/";
17-
let tests_status = run::run_single(JSON_FILENAME, false).unwrap();
18-
tests_status.print_total();
19-
}
20-
21-
#[test]
22-
fn st_example() {
23-
const JSON_FILENAME: &str = "res/ethtests/GeneralStateTests/stExample/";
24-
let tests_status = run::run_single(JSON_FILENAME, false).unwrap();
25-
tests_status.print_total();
26-
}
27-
28-
#[test]
29-
fn st_self_balance() {
30-
const JSON_FILENAME: &str = "res/ethtests/GeneralStateTests/stSelfBalance/";
31-
let tests_status = run::run_single(JSON_FILENAME, false).unwrap();
32-
tests_status.print_total();
33-
}
34-
35-
#[test]
36-
fn st_s_load_test() {
37-
const JSON_FILENAME: &str = "res/ethtests/GeneralStateTests/stSLoadTest/";
38-
let tests_status = run::run_single(JSON_FILENAME, false).unwrap();
39-
tests_status.print_total();
40-
}
41-
42-
#[test]
43-
fn vm_arithmetic_test() {
44-
const JSON_FILENAME: &str = "res/ethtests/GeneralStateTests/VMTests/vmArithmeticTest/";
45-
let tests_status = run::run_single(JSON_FILENAME, false).unwrap();
46-
tests_status.print_total();
47-
}
20+
general_state_tests!(st_args_zero_one_balance, "stArgsZeroOneBalance");
21+
general_state_tests!(st_attack_test, "stAttackTest", ignore);
22+
general_state_tests!(st_bad_opcode, "stBadOpcode", ignore);
23+
general_state_tests!(st_bugs, "stBugs", ignore);
24+
general_state_tests!(st_call_codes, "stCallCodes", ignore);
25+
general_state_tests!(
26+
st_call_create_call_code_test,
27+
"stCallCreateCallCodeTest",
28+
ignore
29+
);
30+
general_state_tests!(
31+
st_call_delegate_codes_call_code_homestead,
32+
"stCallDelegateCodesCallCodeHomestead",
33+
ignore
34+
);
35+
general_state_tests!(
36+
st_call_delegate_codes_homestead,
37+
"stCallDelegateCodesHomestead",
38+
ignore
39+
);
40+
general_state_tests!(st_chain_id, "stChainId", ignore);
41+
general_state_tests!(st_code_copy_test, "stCodeCopyTest");
42+
general_state_tests!(st_code_size_limit, "stCodeSizeLimit", ignore);
43+
general_state_tests!(st_create2, "stCreate2", ignore);
44+
general_state_tests!(st_create_test, "stCreateTest", ignore);
45+
general_state_tests!(
46+
st_delegatecall_test_homestead,
47+
"stDelegatecallTestHomestead",
48+
ignore
49+
);
50+
general_state_tests!(
51+
st_eip150_single_code_gas_prices,
52+
"stEIP150singleCodeGasPrices",
53+
ignore
54+
);
55+
general_state_tests!(st_eip150_specific, "stEIP150Specific", ignore);
56+
general_state_tests!(st_eip1559, "stEIP1559", ignore);
57+
general_state_tests!(st_eip158_specific, "stEIP158Specific", ignore);
58+
general_state_tests!(st_eip2930, "stEIP2930", ignore);
59+
general_state_tests!(st_eip3607, "stEIP3607", ignore);
60+
general_state_tests!(st_example, "stExample");
61+
general_state_tests!(st_ext_code_hash, "stExtCodeHash", ignore);
62+
general_state_tests!(st_homestead_specific, "stHomesteadSpecific", ignore);
63+
general_state_tests!(st_init_code_test, "stInitCodeTest", ignore);
64+
general_state_tests!(st_log_tests, "stLogTests");
65+
general_state_tests!(
66+
st_mem_expanding_eip150_calls,
67+
"stMemExpandingEIP150Calls",
68+
ignore
69+
);
70+
general_state_tests!(st_memory_stress_test, "stMemoryStressTest");
71+
general_state_tests!(st_memory_test, "stMemoryTest");
72+
general_state_tests!(st_non_zero_calls_test, "stNonZeroCallsTest", ignore);
73+
general_state_tests!(st_precompiled_contracts, "stPreCompiledContracts", ignore);
74+
general_state_tests!(st_precompiled_contracts2, "stPreCompiledContracts2", ignore);
75+
general_state_tests!(st_quadratic_complexity_test, "stQuadraticComplexityTest");
76+
general_state_tests!(st_random, "stRandom", ignore);
77+
general_state_tests!(st_random2, "stRandom2", ignore);
78+
general_state_tests!(st_recursive_create, "stRecursiveCreate", ignore);
79+
general_state_tests!(st_refund_test, "stRefundTest");
80+
general_state_tests!(st_return_data_test, "stReturnDataTest", ignore);
81+
general_state_tests!(st_revert_test, "stRevertTest", ignore);
82+
general_state_tests!(st_self_balance, "stSelfBalance");
83+
general_state_tests!(st_shift, "stShift", ignore);
84+
general_state_tests!(st_sload_test, "stSLoadTest");
85+
general_state_tests!(st_solidity_test, "stSolidityTest", ignore);
86+
general_state_tests!(st_special_test, "stSpecialTest", ignore);
87+
general_state_tests!(st_sstore_test, "stSStoreTest", ignore);
88+
general_state_tests!(st_stack_tests, "stStackTests", ignore);
89+
general_state_tests!(st_static_call, "stStaticCall", ignore);
90+
general_state_tests!(st_static_flag_enabled, "stStaticFlagEnabled", ignore);
91+
general_state_tests!(st_system_operations_test, "stSystemOperationsTest", ignore);
92+
general_state_tests!(st_time_consuming, "stTimeConsuming", ignore);
93+
general_state_tests!(st_transaction_test, "stTransactionTest", ignore);
94+
general_state_tests!(st_transition_test, "stTransitionTest", ignore);
95+
general_state_tests!(st_wallet_test, "stWalletTest", ignore);
96+
general_state_tests!(st_zero_calls_revert, "stZeroCallsRevert");
97+
general_state_tests!(st_zero_calls_test, "stZeroCallsTest", ignore);
98+
general_state_tests!(st_zero_knowledge, "stZeroKnowledge");
99+
general_state_tests!(st_zero_knowledge2, "stZeroKnowledge2");
48100

49-
#[test]
50-
fn vm_bitwise_logic_operation() {
51-
const JSON_FILENAME: &str = "res/ethtests/GeneralStateTests/VMTests/vmBitwiseLogicOperation/";
52-
let tests_status = run::run_single(JSON_FILENAME, false).unwrap();
53-
tests_status.print_total();
54-
}
55-
56-
#[test]
57-
fn vm_io_and_flow_operations() {
58-
const JSON_FILENAME: &str = "res/ethtests/GeneralStateTests/VMTests/vmIOandFlowOperations/";
59-
let tests_status = run::run_single(JSON_FILENAME, false).unwrap();
60-
tests_status.print_total();
61-
}
62-
63-
#[test]
64-
fn vm_log_test() {
65-
const JSON_FILENAME: &str = "res/ethtests/GeneralStateTests/VMTests/vmLogTest/";
66-
let tests_status = run::run_single(JSON_FILENAME, false).unwrap();
67-
tests_status.print_total();
68-
}
69-
70-
#[test]
71-
fn vm_tests() {
72-
const JSON_FILENAME: &str = "res/ethtests/GeneralStateTests/VMTests/vmTests/";
73-
let tests_status = run::run_single(JSON_FILENAME, false).unwrap();
74-
tests_status.print_total();
75-
}
76-
77-
#[test]
78-
fn sqt_eip_2930() {
79-
const JSON_FILENAME: &str =
80-
"res/ethtests/GeneralStateTests/stEIP150singleCodeGasPrices/eip2929.json";
81-
let tests_status = run::run_single(JSON_FILENAME, false).unwrap();
82-
tests_status.print_total();
83-
}
101+
general_state_tests!(vm_tests_arithmetic_test, "VMTests/vmArithmeticTest");
102+
general_state_tests!(
103+
vm_tests_bitwise_logic_operation,
104+
"VMTests/vmBitwiseLogicOperation"
105+
);
106+
general_state_tests!(
107+
vm_tests_io_and_flow_operations,
108+
"VMTests/vmIOandFlowOperations"
109+
);
110+
general_state_tests!(vm_tests_log_test, "VMTests/vmLogTest");
111+
general_state_tests!(vm_tests_performance, "VMTests/vmPerformance");
112+
general_state_tests!(vm_tests_tests, "VMTests/vmTests");

jsontests/src/run.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ fn run_file(filename: &str, debug: bool) -> Result<TestCompletionStatus, Error>
6868
println!("skipped")
6969
}
7070
Err(err) => {
71-
println!("ERROR: {:?}", err);
71+
println!("ERROR: {err:?}");
7272
return Err(err);
7373
}
7474
}

rust-toolchain.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
[toolchain]
2-
channel = "1.87.0"
2+
channel = "1.88.0"
33
profile = "minimal"
44
components = [ "rustfmt", "clippy" ]

rustfmt.toml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1 @@
11
hard_tabs = true
2-
imports_granularity="Crate"
3-
group_imports = "StdExternalCrate"

0 commit comments

Comments
 (0)