@@ -372,6 +372,11 @@ pub(crate) mod tests {
372372 include_fee_output : self . include_fee_output ,
373373 }
374374 }
375+
376+ pub fn get_encoding ( self ) -> String {
377+ let program_bytes = self . program . commit ( ) . to_vec_without_witness ( ) ;
378+ Base64Display :: new ( & program_bytes, & STANDARD ) . to_string ( )
379+ }
375380 }
376381
377382 impl < T > TestCase < T > {
@@ -428,6 +433,14 @@ pub(crate) mod tests {
428433 Err ( error) => panic ! ( "Unexpected error: {error}" ) ,
429434 }
430435 }
436+
437+ pub fn get_encoding_with_witness ( self ) -> ( String , String ) {
438+ let ( program_bytes, witness_bytes) = self . program . redeem ( ) . to_vec_with_witness ( ) ;
439+ (
440+ Base64Display :: new ( & program_bytes, & STANDARD ) . to_string ( ) ,
441+ Base64Display :: new ( & witness_bytes, & STANDARD ) . to_string ( ) ,
442+ )
443+ }
431444 }
432445
433446 #[ test]
@@ -670,4 +683,154 @@ fn main() {
670683 . with_witness_values ( WitnessValues :: default ( ) )
671684 . assert_run_success ( ) ;
672685 }
686+
687+ #[ cfg( feature = "serde" ) ]
688+ mod regression {
689+ use super :: TestCase ;
690+
691+ #[ derive( serde:: Deserialize ) ]
692+ struct Program {
693+ program : String ,
694+ witness : Option < String > ,
695+ }
696+
697+ fn regression_test ( name : & str ) {
698+ let program = serde_json:: from_str :: < Program > (
699+ std:: fs:: read_to_string ( format ! ( "./test-data/{}.json" , name) )
700+ . unwrap ( )
701+ . as_str ( ) ,
702+ )
703+ . unwrap ( ) ;
704+
705+ let test_case = TestCase :: program_file ( format ! ( "./examples/{}.simf" , name) ) ;
706+ match program. witness {
707+ Some ( wit) => {
708+ let ( new_program, new_witness) = test_case
709+ . with_witness_file ( format ! ( "./examples/{}.wit" , name) )
710+ . get_encoding_with_witness ( ) ;
711+ assert_eq ! (
712+ program. program, new_program,
713+ "Byte code of programs should be the same"
714+ ) ;
715+ assert_eq ! (
716+ wit, new_witness,
717+ "Byte code of witnesses should be the same"
718+ ) ;
719+ }
720+ None => {
721+ let new_program = test_case. get_encoding ( ) ;
722+
723+ assert_eq ! (
724+ program. program, new_program,
725+ "Byte code of programs should be the same"
726+ )
727+ }
728+ }
729+ }
730+
731+ #[ test]
732+ fn array_fold_2n_regression ( ) {
733+ regression_test ( "array_fold_2n" ) ;
734+ }
735+
736+ #[ test]
737+ fn array_fold_regression ( ) {
738+ regression_test ( "array_fold" ) ;
739+ }
740+
741+ #[ test]
742+ fn cat_regression ( ) {
743+ regression_test ( "cat" ) ;
744+ }
745+
746+ #[ test]
747+ fn ctv_regression ( ) {
748+ regression_test ( "ctv" ) ;
749+ }
750+
751+ #[ test]
752+ fn escrow_with_delay_regression ( ) {
753+ regression_test ( "escrow_with_delay" ) ;
754+ }
755+
756+ #[ test]
757+ fn hash_loop_regression ( ) {
758+ regression_test ( "hash_loop" ) ;
759+ }
760+
761+ #[ test]
762+ fn hodl_vault_regression ( ) {
763+ regression_test ( "hodl_vault" ) ;
764+ }
765+
766+ #[ test]
767+ fn htlc_regression ( ) {
768+ regression_test ( "htlc" ) ;
769+ }
770+
771+ #[ test]
772+ fn last_will_regression ( ) {
773+ regression_test ( "last_will" ) ;
774+ }
775+
776+ #[ test]
777+ fn non_interactive_fee_bump_regression ( ) {
778+ regression_test ( "non_interactive_fee_bump" ) ;
779+ }
780+
781+ #[ test]
782+ fn p2ms_regression ( ) {
783+ regression_test ( "p2ms" ) ;
784+ }
785+
786+ #[ test]
787+ fn p2pkh_regression ( ) {
788+ regression_test ( "p2pkh" ) ;
789+ }
790+
791+ #[ test]
792+ fn presigned_vault_regression ( ) {
793+ regression_test ( "presigned_vault" ) ;
794+ }
795+
796+ #[ test]
797+ fn reveal_collision_regression ( ) {
798+ regression_test ( "reveal_collision" ) ;
799+ }
800+
801+ #[ test]
802+ fn reveal_fix_point_regression ( ) {
803+ regression_test ( "reveal_fix_point" ) ;
804+ }
805+
806+ #[ test]
807+ fn sighash_all_anyonecanpay_regression ( ) {
808+ regression_test ( "sighash_all_anyonecanpay" ) ;
809+ }
810+
811+ #[ test]
812+ fn sighash_all_anyprevoutanyscript_regression ( ) {
813+ regression_test ( "sighash_all_anyprevoutanyscript" ) ;
814+ }
815+
816+ #[ test]
817+ fn sighash_all_anyprevout_regression ( ) {
818+ regression_test ( "sighash_all_anyprevout" ) ;
819+ }
820+
821+ #[ test]
822+ fn sighash_none_regression ( ) {
823+ regression_test ( "sighash_none" ) ;
824+ }
825+
826+ #[ test]
827+ fn sighash_single_regression ( ) {
828+ regression_test ( "sighash_single" ) ;
829+ }
830+
831+ #[ test]
832+ fn transfer_with_timeout_regression ( ) {
833+ regression_test ( "transfer_with_timeout" ) ;
834+ }
835+ }
673836}
0 commit comments