mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
chore(codecs): add proptest roundtrip to all main_codec (#803)
This commit is contained in:
@ -18,7 +18,16 @@ bytes = "1.2.1"
|
||||
codecs-derive = { version = "0.1.0", path = "./derive", default-features = false }
|
||||
revm-interpreter = { git = "https://github.com/bluealloy/revm", rev = "a05fb262d87c78ee52d400e6c0f4708d4c527f32", features = ["serde"] }
|
||||
|
||||
# arbitrary utils
|
||||
arbitrary = { version = "1.1.7", features = ["derive"], optional = true }
|
||||
proptest = { version = "1.0", optional = true }
|
||||
proptest-derive = { version = "0.3", optional = true }
|
||||
|
||||
[dev-dependencies]
|
||||
serde = "1.0"
|
||||
modular-bitfield = "0.11.2"
|
||||
test-fuzz = "3.0.4"
|
||||
test-fuzz = "3.0.4"
|
||||
|
||||
arbitrary = { version = "1.1.7", features = ["derive"] }
|
||||
proptest = { version = "1.0" }
|
||||
proptest-derive = "0.3"
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
use proc_macro::{self, TokenStream};
|
||||
use quote::quote;
|
||||
use quote::{format_ident, quote};
|
||||
use syn::{parse_macro_input, DeriveInput};
|
||||
|
||||
mod compact;
|
||||
@ -73,9 +73,53 @@ pub fn use_postcard(_args: TokenStream, input: TokenStream) -> TokenStream {
|
||||
pub fn use_compact(_args: TokenStream, input: TokenStream) -> TokenStream {
|
||||
let ast = parse_macro_input!(input as DeriveInput);
|
||||
|
||||
derive_compact_arbitrary(
|
||||
_args,
|
||||
quote! {
|
||||
#[derive(Compact, serde::Serialize, serde::Deserialize)]
|
||||
#ast
|
||||
}
|
||||
.into(),
|
||||
)
|
||||
}
|
||||
|
||||
#[proc_macro_attribute]
|
||||
pub fn derive_compact_arbitrary(_args: TokenStream, input: TokenStream) -> TokenStream {
|
||||
let ast = parse_macro_input!(input as DeriveInput);
|
||||
|
||||
// Avoid duplicate names
|
||||
let prop_import = format_ident!("{}PropTestArbitratry", ast.ident);
|
||||
let arb_import = format_ident!("{}Arbitratry", ast.ident);
|
||||
let mod_tests = format_ident!("{}Tests", ast.ident);
|
||||
let type_ident = ast.ident.clone();
|
||||
|
||||
quote! {
|
||||
#[derive(Compact, serde::Serialize, serde::Deserialize)]
|
||||
#[cfg(any(test, feature = "arbitrary"))]
|
||||
use proptest_derive::Arbitrary as #prop_import;
|
||||
|
||||
#[cfg(any(test, feature = "arbitrary"))]
|
||||
use arbitrary::Arbitrary as #arb_import;
|
||||
|
||||
#[cfg_attr(any(test, feature = "arbitrary"), derive(#prop_import, #arb_import))]
|
||||
#ast
|
||||
|
||||
#[allow(non_snake_case)]
|
||||
#[cfg(test)]
|
||||
mod #mod_tests {
|
||||
use super::Compact;
|
||||
|
||||
#[test]
|
||||
fn proptest() {
|
||||
proptest::proptest!(|(field: super::#type_ident)| {
|
||||
let mut buf = vec![];
|
||||
|
||||
let len = field.clone().to_compact(&mut buf);
|
||||
let (decoded, _) = super::#type_ident::from_compact(&buf, len);
|
||||
|
||||
assert!(field == decoded);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
.into()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user