@@ -562,3 +562,118 @@ fn test_nested_struct_with_magic() {
562562 assert_eq ! ( InnerWithMagic :: SIZE_BYTES , Some ( 4 ) ) ;
563563 assert_eq ! ( OuterWithMagic :: SIZE_BYTES , Some ( 8 ) ) ;
564564}
565+
566+ #[ test]
567+ fn test_struct_with_pad_bytes_before ( ) {
568+ #[ derive( DekuRead , DekuWrite , DekuSize ) ]
569+ struct PadBeforeStruct {
570+ field_a : u8 ,
571+ #[ deku( pad_bytes_before = "2" ) ]
572+ field_b : u8 ,
573+ }
574+
575+ assert_eq ! ( PadBeforeStruct :: SIZE_BYTES , Some ( 4 ) ) ;
576+ assert_eq ! ( PadBeforeStruct :: SIZE_BITS , 32 ) ;
577+ }
578+
579+ #[ test]
580+ fn test_struct_with_pad_bytes_after ( ) {
581+ #[ derive( DekuRead , DekuWrite , DekuSize ) ]
582+ struct PadAfterStruct {
583+ #[ deku( pad_bytes_after = "3" ) ]
584+ field_a : u8 ,
585+ field_b : u8 ,
586+ }
587+
588+ assert_eq ! ( PadAfterStruct :: SIZE_BYTES , Some ( 5 ) ) ;
589+ assert_eq ! ( PadAfterStruct :: SIZE_BITS , 40 ) ;
590+ }
591+
592+ #[ test]
593+ fn test_struct_with_pad_bytes_before_and_after ( ) {
594+ #[ derive( DekuRead , DekuWrite , DekuSize ) ]
595+ struct PadBothStruct {
596+ #[ deku( pad_bytes_before = "1" , pad_bytes_after = "2" ) ]
597+ field_a : u8 ,
598+ field_b : u16 ,
599+ }
600+
601+ assert_eq ! ( PadBothStruct :: SIZE_BYTES , Some ( 6 ) ) ;
602+ assert_eq ! ( PadBothStruct :: SIZE_BITS , 48 ) ;
603+ }
604+
605+ #[ test]
606+ #[ cfg( feature = "bits" ) ]
607+ fn test_struct_with_pad_bits_before ( ) {
608+ #[ derive( DekuRead , DekuWrite , DekuSize ) ]
609+ #[ deku( endian = "big" ) ]
610+ struct PadBitsBefore {
611+ #[ deku( bits = 4 ) ]
612+ field_a : u8 ,
613+ #[ deku( pad_bits_before = "4" ) ]
614+ #[ deku( bits = 4 ) ]
615+ field_b : u8 ,
616+ }
617+
618+ assert_eq ! ( PadBitsBefore :: SIZE_BITS , 12 ) ;
619+ assert_eq ! ( PadBitsBefore :: SIZE_BYTES , None ) ;
620+ }
621+
622+ #[ test]
623+ #[ cfg( feature = "bits" ) ]
624+ fn test_struct_with_pad_bits_after ( ) {
625+ #[ derive( DekuRead , DekuWrite , DekuSize ) ]
626+ #[ deku( endian = "big" ) ]
627+ struct PadBitsAfter {
628+ #[ deku( bits = 3 , pad_bits_after = "5" ) ]
629+ field_a : u8 ,
630+ field_b : u8 ,
631+ }
632+
633+ assert_eq ! ( PadBitsAfter :: SIZE_BITS , 16 ) ;
634+ assert_eq ! ( PadBitsAfter :: SIZE_BYTES , Some ( 2 ) ) ;
635+ }
636+
637+ #[ test]
638+ #[ cfg( feature = "bits" ) ]
639+ fn test_struct_with_mixed_padding ( ) {
640+ #[ derive( DekuRead , DekuWrite , DekuSize ) ]
641+ #[ deku( endian = "big" ) ]
642+ struct MixedPadding {
643+ #[ deku( pad_bits_before = "2" , pad_bytes_before = "1" ) ]
644+ #[ deku( bits = 6 ) ]
645+ field_a : u8 ,
646+ field_b : u8 ,
647+ }
648+
649+ assert_eq ! ( MixedPadding :: SIZE_BITS , 24 ) ;
650+ assert_eq ! ( MixedPadding :: SIZE_BYTES , Some ( 3 ) ) ;
651+ }
652+
653+ #[ test]
654+ fn test_struct_without_padding ( ) {
655+ #[ derive( DekuRead , DekuWrite , DekuSize ) ]
656+ struct NoPaddingStruct {
657+ field_a : u8 ,
658+ field_b : u16 ,
659+ }
660+
661+ assert_eq ! ( NoPaddingStruct :: SIZE_BYTES , Some ( 3 ) ) ;
662+ assert_eq ! ( NoPaddingStruct :: SIZE_BITS , 24 ) ;
663+ }
664+
665+ #[ test]
666+ fn test_multiple_fields_with_padding ( ) {
667+ #[ derive( DekuRead , DekuWrite , DekuSize ) ]
668+ struct MultiplePadding {
669+ #[ deku( pad_bytes_before = "1" ) ]
670+ field_a : u8 ,
671+ #[ deku( pad_bytes_after = "2" ) ]
672+ field_b : u8 ,
673+ #[ deku( pad_bytes_before = "1" , pad_bytes_after = "1" ) ]
674+ field_c : u8 ,
675+ }
676+
677+ assert_eq ! ( MultiplePadding :: SIZE_BYTES , Some ( 8 ) ) ;
678+ assert_eq ! ( MultiplePadding :: SIZE_BITS , 64 ) ;
679+ }
0 commit comments