Skip to content
This repository was archived by the owner on Nov 25, 2024. It is now read-only.

Commit 6037c5a

Browse files
committed
add g1_add test and first failing case
1 parent 65990bd commit 6037c5a

File tree

1 file changed

+27
-1
lines changed

1 file changed

+27
-1
lines changed

crates/precompile/src/bls12_381.rs

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,4 +175,30 @@ fn map_fp2_to_g2_impl(_input: &[u8]) -> Option<()> {
175175
}
176176

177177
#[cfg(test)]
178-
mod test {}
178+
mod test {
179+
use super::*;
180+
use revm_primitives::hex::FromHex;
181+
use rstest::rstest;
182+
183+
#[rstest]
184+
// test vectors from https://github.com/ethereum/go-ethereum/blob/master/core/vm/testdata/precompiles/blsG1Add.json and https://github.com/ethereum/go-ethereum/blob/master/core/vm/testdata/precompiles/fail-blsG1Add.json
185+
#[case::g1_add_g1_plus_g1_equals_2_times_g1("0000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e10000000000000000000000000000000017f1d3a73197d7942695638c4fa9ac0fc3688c4f9774b905a14e3a3f171bac586c55e83ff97a1aeffb3af00adb22c6bb0000000000000000000000000000000008b3f481e3aaa0f1a09e30ed741d8ae4fcf5e095d5d00af600db18cb2c04b3edd03cc744a2888ae40caa232946c5e7e1", "000000000000000000000000000000000572cbea904d67468808c8eb50a9450c9721db309128012543902d0ac358a62ae28f75bb8f1c7c42c39a8c5529bf0f4e00000000000000000000000000000000166a9d8cabc673a322fda673779d8e3822ba3ecb8670e461f73bb9021d5fd76a4c56d9d4cd16bd1bba86881979749d28", false, 500)]
186+
fn test_g1_add(
187+
#[case] input: &str,
188+
#[case] expected_output: &str,
189+
#[case] expected_error: bool,
190+
#[case] expected_gas: u64,
191+
) {
192+
let input = Bytes::from_hex(input).unwrap();
193+
let target_gas: u64 = 30_000_000;
194+
let res = g1_add(&input, target_gas);
195+
if expected_error {
196+
assert!(res.is_err());
197+
} else {
198+
let (actual_gas, actual_output) = res.unwrap();
199+
assert_eq!(expected_gas, actual_gas);
200+
let expected_output = Bytes::from_hex(expected_output).unwrap();
201+
assert_eq!(expected_output, actual_output);
202+
}
203+
}
204+
}

0 commit comments

Comments
 (0)