difftreelog
misc: add test for StructCollect generation
in: master
2 files changed
crates/evm-coder/procedural/src/abi_derive.rsdiffbeforeafterboth--- a/crates/evm-coder/procedural/src/abi_derive.rs
+++ b/crates/evm-coder/procedural/src/abi_derive.rs
@@ -306,7 +306,7 @@
let doc = doc.trim();
let dev = if i == 0 { " @dev" } else { "" };
quote! {
- writeln!(str, "///{} {}", #dev, #doc).unwrap();
+ writeln!(str, "\t///{} {}", #dev, #doc).unwrap();
}
}),
Err(e) => unreachable!("{:?}", e),
crates/evm-coder/tests/abi_derive_generation.rsdiffbeforeafterboth1use evm_coder_procedural::AbiCoder;2use evm_coder::types::bytes;34#[test]5fn empty_struct() {6 let t = trybuild::TestCases::new();7 t.compile_fail("tests/build_failed/abi_derive_generation.rs");8}910#[derive(AbiCoder, PartialEq, Debug)]11struct TypeStruct1SimpleParam {12 _a: u8,13}1415#[derive(AbiCoder, PartialEq, Debug)]16struct TypeStruct1DynamicParam {17 _a: String,18}1920#[derive(AbiCoder, PartialEq, Debug)]21struct TypeStruct2SimpleParam {22 _a: u8,23 _b: u32,24}2526#[derive(AbiCoder, PartialEq, Debug)]27struct TypeStruct2DynamicParam {28 _a: String,29 _b: bytes,30}3132#[derive(AbiCoder, PartialEq, Debug)]33struct TypeStruct2MixedParam {34 _a: u8,35 _b: bytes,36}3738#[derive(AbiCoder, PartialEq, Debug)]39struct TypeStruct1DerivedSimpleParam {40 _a: TypeStruct1SimpleParam,41}4243#[derive(AbiCoder, PartialEq, Debug)]44struct TypeStruct2DerivedSimpleParam {45 _a: TypeStruct1SimpleParam,46 _b: TypeStruct2SimpleParam,47}4849#[derive(AbiCoder, PartialEq, Debug)]50struct TypeStruct1DerivedDynamicParam {51 _a: TypeStruct1DynamicParam,52}5354#[derive(AbiCoder, PartialEq, Debug)]55struct TypeStruct2DerivedDynamicParam {56 _a: TypeStruct1DynamicParam,57 _b: TypeStruct2DynamicParam,58}5960/// Some docs61/// At multi62/// line63#[derive(AbiCoder, PartialEq, Debug)]64struct TypeStruct3DerivedMixedParam {65 /// Docs for A66 _a: TypeStruct1SimpleParam,67 /// Docs for B68 _b: TypeStruct2DynamicParam,69 /// Docs for C70 _c: TypeStruct2MixedParam,71}7273#[test]74fn empty() {}7576#[test]77fn impl_abi_type_signature() {78 assert_eq!(79 <TypeStruct1SimpleParam as evm_coder::abi::AbiType>::SIGNATURE80 .as_str()81 .unwrap(),82 "(uint8)"83 );84 assert_eq!(85 <TypeStruct1DynamicParam as evm_coder::abi::AbiType>::SIGNATURE86 .as_str()87 .unwrap(),88 "(string)"89 );90 assert_eq!(91 <TypeStruct2SimpleParam as evm_coder::abi::AbiType>::SIGNATURE92 .as_str()93 .unwrap(),94 "(uint8,uint32)"95 );96 assert_eq!(97 <TypeStruct2DynamicParam as evm_coder::abi::AbiType>::SIGNATURE98 .as_str()99 .unwrap(),100 "(string,bytes)"101 );102 assert_eq!(103 <TypeStruct2MixedParam as evm_coder::abi::AbiType>::SIGNATURE104 .as_str()105 .unwrap(),106 "(uint8,bytes)"107 );108 assert_eq!(109 <TypeStruct1DerivedSimpleParam as evm_coder::abi::AbiType>::SIGNATURE110 .as_str()111 .unwrap(),112 "((uint8))"113 );114 assert_eq!(115 <TypeStruct2DerivedSimpleParam as evm_coder::abi::AbiType>::SIGNATURE116 .as_str()117 .unwrap(),118 "((uint8),(uint8,uint32))"119 );120 assert_eq!(121 <TypeStruct1DerivedDynamicParam as evm_coder::abi::AbiType>::SIGNATURE122 .as_str()123 .unwrap(),124 "((string))"125 );126 assert_eq!(127 <TypeStruct2DerivedDynamicParam as evm_coder::abi::AbiType>::SIGNATURE128 .as_str()129 .unwrap(),130 "((string),(string,bytes))"131 );132 assert_eq!(133 <TypeStruct3DerivedMixedParam as evm_coder::abi::AbiType>::SIGNATURE134 .as_str()135 .unwrap(),136 "((uint8),(string,bytes),(uint8,bytes))"137 );138}139140#[test]141fn impl_abi_type_is_dynamic() {142 assert_eq!(143 <TypeStruct1SimpleParam as evm_coder::abi::AbiType>::is_dynamic(),144 false145 );146 assert_eq!(147 <TypeStruct1DynamicParam as evm_coder::abi::AbiType>::is_dynamic(),148 true149 );150 assert_eq!(151 <TypeStruct2SimpleParam as evm_coder::abi::AbiType>::is_dynamic(),152 false153 );154 assert_eq!(155 <TypeStruct2DynamicParam as evm_coder::abi::AbiType>::is_dynamic(),156 true157 );158 assert_eq!(159 <TypeStruct2MixedParam as evm_coder::abi::AbiType>::is_dynamic(),160 true161 );162 assert_eq!(163 <TypeStruct1DerivedSimpleParam as evm_coder::abi::AbiType>::is_dynamic(),164 false165 );166 assert_eq!(167 <TypeStruct2DerivedSimpleParam as evm_coder::abi::AbiType>::is_dynamic(),168 false169 );170 assert_eq!(171 <TypeStruct1DerivedDynamicParam as evm_coder::abi::AbiType>::is_dynamic(),172 true173 );174 assert_eq!(175 <TypeStruct2DerivedDynamicParam as evm_coder::abi::AbiType>::is_dynamic(),176 true177 );178 assert_eq!(179 <TypeStruct3DerivedMixedParam as evm_coder::abi::AbiType>::is_dynamic(),180 true181 );182}183184#[test]185fn impl_abi_type_size() {186 const ABI_ALIGNMENT: usize = 32;187 assert_eq!(188 <TypeStruct1SimpleParam as evm_coder::abi::AbiType>::size(),189 ABI_ALIGNMENT190 );191 assert_eq!(192 <TypeStruct1DynamicParam as evm_coder::abi::AbiType>::size(),193 ABI_ALIGNMENT194 );195 assert_eq!(196 <TypeStruct2SimpleParam as evm_coder::abi::AbiType>::size(),197 ABI_ALIGNMENT * 2198 );199 assert_eq!(200 <TypeStruct2DynamicParam as evm_coder::abi::AbiType>::size(),201 ABI_ALIGNMENT * 2202 );203 assert_eq!(204 <TypeStruct2MixedParam as evm_coder::abi::AbiType>::size(),205 ABI_ALIGNMENT * 2206 );207 assert_eq!(208 <TypeStruct1DerivedSimpleParam as evm_coder::abi::AbiType>::size(),209 ABI_ALIGNMENT210 );211 assert_eq!(212 <TypeStruct2DerivedSimpleParam as evm_coder::abi::AbiType>::size(),213 ABI_ALIGNMENT * 3214 );215 assert_eq!(216 <TypeStruct1DerivedDynamicParam as evm_coder::abi::AbiType>::size(),217 ABI_ALIGNMENT218 );219 assert_eq!(220 <TypeStruct2DerivedDynamicParam as evm_coder::abi::AbiType>::size(),221 ABI_ALIGNMENT * 3222 );223 assert_eq!(224 <TypeStruct3DerivedMixedParam as evm_coder::abi::AbiType>::size(),225 ABI_ALIGNMENT * 5226 );227}228229#[derive(AbiCoder, PartialEq, Debug)]230struct TupleStruct1SimpleParam(u8);231232#[derive(AbiCoder, PartialEq, Debug)]233struct TupleStruct1DynamicParam(String);234235#[derive(AbiCoder, PartialEq, Debug)]236struct TupleStruct2SimpleParam(u8, u32);237238#[derive(AbiCoder, PartialEq, Debug)]239struct TupleStruct2DynamicParam(String, bytes);240241#[derive(AbiCoder, PartialEq, Debug)]242struct TupleStruct2MixedParam(u8, bytes);243244#[derive(AbiCoder, PartialEq, Debug)]245struct TupleStruct1DerivedSimpleParam(TupleStruct1SimpleParam);246247#[derive(AbiCoder, PartialEq, Debug)]248struct TupleStruct2DerivedSimpleParam(TupleStruct1SimpleParam, TupleStruct2SimpleParam);249250#[derive(AbiCoder, PartialEq, Debug)]251struct TupleStruct1DerivedDynamicParam(TupleStruct1DynamicParam);252253#[derive(AbiCoder, PartialEq, Debug)]254struct TupleStruct2DerivedDynamicParam(TupleStruct1DynamicParam, TupleStruct2DynamicParam);255256#[derive(AbiCoder, PartialEq, Debug)]257struct TupleStruct3DerivedMixedParam(258 TupleStruct1SimpleParam,259 TupleStruct2DynamicParam,260 TupleStruct2MixedParam,261);262263#[test]264fn impl_abi_type_signature_same_for_structs() {265 assert_eq!(266 <TypeStruct1SimpleParam as evm_coder::abi::AbiType>::SIGNATURE267 .as_str()268 .unwrap(),269 <TupleStruct1SimpleParam as evm_coder::abi::AbiType>::SIGNATURE270 .as_str()271 .unwrap()272 );273 assert_eq!(274 <TypeStruct1DynamicParam as evm_coder::abi::AbiType>::SIGNATURE275 .as_str()276 .unwrap(),277 <TupleStruct1DynamicParam as evm_coder::abi::AbiType>::SIGNATURE278 .as_str()279 .unwrap()280 );281 assert_eq!(282 <TypeStruct2SimpleParam as evm_coder::abi::AbiType>::SIGNATURE283 .as_str()284 .unwrap(),285 <TupleStruct2SimpleParam as evm_coder::abi::AbiType>::SIGNATURE286 .as_str()287 .unwrap()288 );289 assert_eq!(290 <TypeStruct2DynamicParam as evm_coder::abi::AbiType>::SIGNATURE291 .as_str()292 .unwrap(),293 <TupleStruct2DynamicParam as evm_coder::abi::AbiType>::SIGNATURE294 .as_str()295 .unwrap()296 );297 assert_eq!(298 <TypeStruct2MixedParam as evm_coder::abi::AbiType>::SIGNATURE299 .as_str()300 .unwrap(),301 <TupleStruct2MixedParam as evm_coder::abi::AbiType>::SIGNATURE302 .as_str()303 .unwrap(),304 );305 assert_eq!(306 <TypeStruct1DerivedSimpleParam as evm_coder::abi::AbiType>::SIGNATURE307 .as_str()308 .unwrap(),309 <TupleStruct1DerivedSimpleParam as evm_coder::abi::AbiType>::SIGNATURE310 .as_str()311 .unwrap(),312 );313 assert_eq!(314 <TypeStruct2DerivedSimpleParam as evm_coder::abi::AbiType>::SIGNATURE315 .as_str()316 .unwrap(),317 <TupleStruct2DerivedSimpleParam as evm_coder::abi::AbiType>::SIGNATURE318 .as_str()319 .unwrap(),320 );321 assert_eq!(322 <TypeStruct1DerivedDynamicParam as evm_coder::abi::AbiType>::SIGNATURE323 .as_str()324 .unwrap(),325 <TupleStruct1DerivedDynamicParam as evm_coder::abi::AbiType>::SIGNATURE326 .as_str()327 .unwrap(),328 );329 assert_eq!(330 <TypeStruct2DerivedDynamicParam as evm_coder::abi::AbiType>::SIGNATURE331 .as_str()332 .unwrap(),333 <TupleStruct2DerivedDynamicParam as evm_coder::abi::AbiType>::SIGNATURE334 .as_str()335 .unwrap(),336 );337 assert_eq!(338 <TypeStruct3DerivedMixedParam as evm_coder::abi::AbiType>::SIGNATURE339 .as_str()340 .unwrap(),341 <TupleStruct3DerivedMixedParam as evm_coder::abi::AbiType>::SIGNATURE342 .as_str()343 .unwrap(),344 );345}346347#[test]348fn impl_abi_type_is_dynamic_same_for_structs() {349 assert_eq!(350 <TypeStruct1SimpleParam as evm_coder::abi::AbiType>::is_dynamic(),351 <TupleStruct1SimpleParam as evm_coder::abi::AbiType>::is_dynamic()352 );353 assert_eq!(354 <TypeStruct1DynamicParam as evm_coder::abi::AbiType>::is_dynamic(),355 <TupleStruct1DynamicParam as evm_coder::abi::AbiType>::is_dynamic()356 );357 assert_eq!(358 <TypeStruct2SimpleParam as evm_coder::abi::AbiType>::is_dynamic(),359 <TupleStruct2SimpleParam as evm_coder::abi::AbiType>::is_dynamic()360 );361 assert_eq!(362 <TypeStruct2DynamicParam as evm_coder::abi::AbiType>::is_dynamic(),363 <TupleStruct2DynamicParam as evm_coder::abi::AbiType>::is_dynamic()364 );365 assert_eq!(366 <TypeStruct2MixedParam as evm_coder::abi::AbiType>::is_dynamic(),367 <TupleStruct2MixedParam as evm_coder::abi::AbiType>::is_dynamic()368 );369 assert_eq!(370 <TypeStruct1DerivedSimpleParam as evm_coder::abi::AbiType>::is_dynamic(),371 <TupleStruct1DerivedSimpleParam as evm_coder::abi::AbiType>::is_dynamic()372 );373 assert_eq!(374 <TypeStruct2DerivedSimpleParam as evm_coder::abi::AbiType>::is_dynamic(),375 <TupleStruct2DerivedSimpleParam as evm_coder::abi::AbiType>::is_dynamic()376 );377 assert_eq!(378 <TypeStruct1DerivedDynamicParam as evm_coder::abi::AbiType>::is_dynamic(),379 <TupleStruct1DerivedDynamicParam as evm_coder::abi::AbiType>::is_dynamic()380 );381 assert_eq!(382 <TypeStruct2DerivedDynamicParam as evm_coder::abi::AbiType>::is_dynamic(),383 <TupleStruct2DerivedDynamicParam as evm_coder::abi::AbiType>::is_dynamic()384 );385 assert_eq!(386 <TypeStruct3DerivedMixedParam as evm_coder::abi::AbiType>::is_dynamic(),387 <TupleStruct3DerivedMixedParam as evm_coder::abi::AbiType>::is_dynamic()388 );389}390391#[test]392fn impl_abi_type_size_same_for_structs() {393 assert_eq!(394 <TypeStruct1SimpleParam as evm_coder::abi::AbiType>::size(),395 <TupleStruct1SimpleParam as evm_coder::abi::AbiType>::size()396 );397 assert_eq!(398 <TypeStruct1DynamicParam as evm_coder::abi::AbiType>::size(),399 <TupleStruct1DynamicParam as evm_coder::abi::AbiType>::size()400 );401 assert_eq!(402 <TypeStruct2SimpleParam as evm_coder::abi::AbiType>::size(),403 <TupleStruct2SimpleParam as evm_coder::abi::AbiType>::size()404 );405 assert_eq!(406 <TypeStruct2DynamicParam as evm_coder::abi::AbiType>::size(),407 <TupleStruct2DynamicParam as evm_coder::abi::AbiType>::size()408 );409 assert_eq!(410 <TypeStruct2MixedParam as evm_coder::abi::AbiType>::size(),411 <TupleStruct2MixedParam as evm_coder::abi::AbiType>::size()412 );413 assert_eq!(414 <TypeStruct1DerivedSimpleParam as evm_coder::abi::AbiType>::size(),415 <TupleStruct1DerivedSimpleParam as evm_coder::abi::AbiType>::size()416 );417 assert_eq!(418 <TypeStruct2DerivedSimpleParam as evm_coder::abi::AbiType>::size(),419 <TupleStruct2DerivedSimpleParam as evm_coder::abi::AbiType>::size()420 );421 assert_eq!(422 <TypeStruct1DerivedDynamicParam as evm_coder::abi::AbiType>::size(),423 <TupleStruct1DerivedDynamicParam as evm_coder::abi::AbiType>::size()424 );425 assert_eq!(426 <TypeStruct2DerivedDynamicParam as evm_coder::abi::AbiType>::size(),427 <TupleStruct2DerivedDynamicParam as evm_coder::abi::AbiType>::size()428 );429 assert_eq!(430 <TypeStruct3DerivedMixedParam as evm_coder::abi::AbiType>::size(),431 <TupleStruct3DerivedMixedParam as evm_coder::abi::AbiType>::size()432 );433}434435const FUNCTION_IDENTIFIER: u32 = 0xdeadbeef;436437fn test_impl<Tuple, TupleStruct, TypeStruct>(438 tuple_data: Tuple,439 tuple_struct_data: TupleStruct,440 type_struct_data: TypeStruct,441) where442 TypeStruct:443 evm_coder::abi::AbiWrite + evm_coder::abi::AbiRead + std::cmp::PartialEq + std::fmt::Debug,444 TupleStruct:445 evm_coder::abi::AbiWrite + evm_coder::abi::AbiRead + std::cmp::PartialEq + std::fmt::Debug,446 Tuple:447 evm_coder::abi::AbiWrite + evm_coder::abi::AbiRead + std::cmp::PartialEq + std::fmt::Debug,448{449 let encoded_type_struct = test_abi_write_impl(&type_struct_data);450 let encoded_tuple_struct = test_abi_write_impl(&tuple_struct_data);451 let encoded_tuple = test_abi_write_impl(&tuple_data);452453 similar_asserts::assert_eq!(encoded_tuple, encoded_type_struct);454 similar_asserts::assert_eq!(encoded_tuple, encoded_tuple_struct);455456 {457 let (_, mut decoder) = evm_coder::abi::AbiReader::new_call(&encoded_tuple).unwrap();458 let restored_struct_data = <TypeStruct>::abi_read(&mut decoder).unwrap();459 assert_eq!(restored_struct_data, type_struct_data);460 }461 {462 let (_, mut decoder) = evm_coder::abi::AbiReader::new_call(&encoded_tuple).unwrap();463 let restored_struct_data = <TupleStruct>::abi_read(&mut decoder).unwrap();464 assert_eq!(restored_struct_data, tuple_struct_data);465 }466467 {468 let (_, mut decoder) = evm_coder::abi::AbiReader::new_call(&encoded_type_struct).unwrap();469 let restored_tuple_data = <Tuple>::abi_read(&mut decoder).unwrap();470 assert_eq!(restored_tuple_data, tuple_data);471 }472 {473 let (_, mut decoder) = evm_coder::abi::AbiReader::new_call(&encoded_tuple_struct).unwrap();474 let restored_tuple_data = <Tuple>::abi_read(&mut decoder).unwrap();475 assert_eq!(restored_tuple_data, tuple_data);476 }477}478479fn test_abi_write_impl<A>(data: &A) -> Vec<u8>480where481 A: evm_coder::abi::AbiWrite + evm_coder::abi::AbiRead + std::cmp::PartialEq + std::fmt::Debug,482{483 let mut writer = evm_coder::abi::AbiWriter::new_call(FUNCTION_IDENTIFIER);484 data.abi_write(&mut writer);485 let encoded_tuple = writer.finish();486 encoded_tuple487}488489#[test]490fn codec_struct_1_simple() {491 let _a = 0xff;492 test_impl::<(u8,), TupleStruct1SimpleParam, TypeStruct1SimpleParam>(493 (_a,),494 TupleStruct1SimpleParam(_a),495 TypeStruct1SimpleParam { _a },496 );497}498499#[test]500fn codec_struct_1_dynamic() {501 let _a: String = "some string".into();502 test_impl::<(String,), TupleStruct1DynamicParam, TypeStruct1DynamicParam>(503 (_a.clone(),),504 TupleStruct1DynamicParam(_a.clone()),505 TypeStruct1DynamicParam { _a },506 );507}508509#[test]510fn codec_struct_1_derived_simple() {511 let _a: u8 = 0xff;512 test_impl::<((u8,),), TupleStruct1DerivedSimpleParam, TypeStruct1DerivedSimpleParam>(513 ((_a,),),514 TupleStruct1DerivedSimpleParam(TupleStruct1SimpleParam(_a)),515 TypeStruct1DerivedSimpleParam {516 _a: TypeStruct1SimpleParam { _a },517 },518 );519}520521#[test]522fn codec_struct_1_derived_dynamic() {523 let _a: String = "some string".into();524 test_impl::<((String,),), TupleStruct1DerivedDynamicParam, TypeStruct1DerivedDynamicParam>(525 ((_a.clone(),),),526 TupleStruct1DerivedDynamicParam(TupleStruct1DynamicParam(_a.clone())),527 TypeStruct1DerivedDynamicParam {528 _a: TypeStruct1DynamicParam { _a },529 },530 );531}532533#[test]534fn codec_struct_2_simple() {535 let _a = 0xff;536 let _b = 0xbeefbaba;537 test_impl::<(u8, u32), TupleStruct2SimpleParam, TypeStruct2SimpleParam>(538 (_a, _b),539 TupleStruct2SimpleParam(_a, _b),540 TypeStruct2SimpleParam { _a, _b },541 );542}543544#[test]545fn codec_struct_2_dynamic() {546 let _a: String = "some string".into();547 let _b: bytes = bytes(vec![0x11, 0x22, 0x33]);548 test_impl::<(String, bytes), TupleStruct2DynamicParam, TypeStruct2DynamicParam>(549 (_a.clone(), _b.clone()),550 TupleStruct2DynamicParam(_a.clone(), _b.clone()),551 TypeStruct2DynamicParam { _a, _b },552 );553}554555#[test]556fn codec_struct_2_mixed() {557 let _a: u8 = 0xff;558 let _b: bytes = bytes(vec![0x11, 0x22, 0x33]);559 test_impl::<(u8, bytes), TupleStruct2MixedParam, TypeStruct2MixedParam>(560 (_a.clone(), _b.clone()),561 TupleStruct2MixedParam(_a.clone(), _b.clone()),562 TypeStruct2MixedParam { _a, _b },563 );564}565566#[test]567fn codec_struct_2_derived_simple() {568 let _a = 0xff;569 let _b = 0xbeefbaba;570 test_impl::<((u8,), (u8, u32)), TupleStruct2DerivedSimpleParam, TypeStruct2DerivedSimpleParam>(571 ((_a,), (_a, _b)),572 TupleStruct2DerivedSimpleParam(573 TupleStruct1SimpleParam(_a),574 TupleStruct2SimpleParam(_a, _b),575 ),576 TypeStruct2DerivedSimpleParam {577 _a: TypeStruct1SimpleParam { _a },578 _b: TypeStruct2SimpleParam { _a, _b },579 },580 );581}582583#[test]584fn codec_struct_2_derived_dynamic() {585 let _a = "some string".to_string();586 let _b = bytes(vec![0x11, 0x22, 0x33]);587 test_impl::<588 ((String,), (String, bytes)),589 TupleStruct2DerivedDynamicParam,590 TypeStruct2DerivedDynamicParam,591 >(592 ((_a.clone(),), (_a.clone(), _b.clone())),593 TupleStruct2DerivedDynamicParam(594 TupleStruct1DynamicParam(_a.clone()),595 TupleStruct2DynamicParam(_a.clone(), _b.clone()),596 ),597 TypeStruct2DerivedDynamicParam {598 _a: TypeStruct1DynamicParam { _a: _a.clone() },599 _b: TypeStruct2DynamicParam { _a, _b },600 },601 );602}603604#[test]605fn codec_struct_3_derived_mixed() {606 let int = 0xff;607 let by = bytes(vec![0x11, 0x22, 0x33]);608 let string = "some string".to_string();609 test_impl::<610 ((u8,), (String, bytes), (u8, bytes)),611 TupleStruct3DerivedMixedParam,612 TypeStruct3DerivedMixedParam,613 >(614 ((int,), (string.clone(), by.clone()), (int, by.clone())),615 TupleStruct3DerivedMixedParam(616 TupleStruct1SimpleParam(int),617 TupleStruct2DynamicParam(string.clone(), by.clone()),618 TupleStruct2MixedParam(int, by.clone()),619 ),620 TypeStruct3DerivedMixedParam {621 _a: TypeStruct1SimpleParam { _a: int },622 _b: TypeStruct2DynamicParam {623 _a: string.clone(),624 _b: by.clone(),625 },626 _c: TypeStruct2MixedParam { _a: int, _b: by },627 },628 );629}630631#[derive(AbiCoder, PartialEq, Debug)]632struct TypeStruct2SimpleStruct1Simple {633 _a: TypeStruct2SimpleParam,634 _b: TypeStruct2SimpleParam,635 _c: u8,636}637#[derive(AbiCoder, PartialEq, Debug)]638struct TupleStruct2SimpleStruct1Simple(TupleStruct2SimpleParam, TupleStruct2SimpleParam, u8);639640#[test]641fn codec_struct_2_struct_simple_1_simple() {642 let _a = 0xff;643 let _b = 0xbeefbaba;644 test_impl::<645 ((u8, u32), (u8, u32), u8),646 TupleStruct2SimpleStruct1Simple,647 TypeStruct2SimpleStruct1Simple,648 >(649 ((_a, _b), (_a, _b), _a),650 TupleStruct2SimpleStruct1Simple(651 TupleStruct2SimpleParam(_a, _b),652 TupleStruct2SimpleParam(_a, _b),653 _a,654 ),655 TypeStruct2SimpleStruct1Simple {656 _a: TypeStruct2SimpleParam { _a, _b },657 _b: TypeStruct2SimpleParam { _a, _b },658 _c: _a,659 },660 );661}