11use simplex:: include_simf;
2- use simplex:: program:: { ArgumentsTrait , WitnessTrait , RandomArguments , RandomWitness } ;
3-
2+ use simplex:: mutantesting:: { generate_value_by_ty, generate_value_by_ty_iterative} ;
43use simplex:: program:: Program ;
4+ use simplex:: program:: { ArgumentsTrait , RandomArguments , RandomWitness , WitnessTrait } ;
55use simplex:: provider:: SimplicityNetwork ;
6- use simplex:: simplicityhl:: elements:: Script ;
76use simplex:: simplicityhl:: elements:: secp256k1_zkp:: XOnlyPublicKey ;
7+ use simplex:: simplicityhl:: elements:: Script ;
8+ use simplex:: simplicityhl:: { Arguments , WitnessValues } ;
9+ use simplex:: rand:: RngCore ;
10+
811#[ derive( Clone ) ]
912pub struct ArrayTrStorageProgram {
1013 program : Program ,
@@ -66,9 +69,10 @@ impl AsMut<Program> for ArrayTrStorageProgram {
6669include_simf ! ( "../../../../crates/simplex/tests/ui_simfs/array_tr_storage.simf" ) ;
6770
6871fn main ( ) -> Result < ( ) , String > {
69- test_e2e_behaviour ( ) ?;
70- test_default ( ) ?;
71- test_e2e_random_behaviour ( ) ?;
72+ let _ = test_e2e_behaviour ( ) ?;
73+ let _ = test_default ( ) ?;
74+ let _ = test_e2e_random_behaviour ( ) ?;
75+ let _ = test_e2e_random_value_generation_behaviour ( ) ?;
7276
7377 Ok ( ( ) )
7478}
@@ -101,39 +105,101 @@ fn test_default() -> Result<(), String> {
101105 Ok ( ( ) )
102106}
103107
104- fn test_e2e_random_behaviour ( ) -> Result < ( ) , String > {
108+ fn test_e2e_random_behaviour ( ) -> Result < ( ) , String > {
105109 for seed in 0 ..32 {
106110 use simplex:: rand:: { rngs:: StdRng , SeedableRng } ;
107111
108112 let mut rng = StdRng :: seed_from_u64 ( seed) ;
109113
110- let original_witness =
111- derived_array_tr_storage:: ArrayTrStorageWitness :: generate_witness_raw ( & mut rng) ;
114+ let original_witness = derived_array_tr_storage:: ArrayTrStorageWitness :: generate_witness_raw ( & mut rng) ;
112115
113116 let witness_values = original_witness. build_witness ( ) ;
114- let recovered_witness =
115- derived_array_tr_storage:: ArrayTrStorageWitness :: from_witness ( & witness_values) ?;
117+ let recovered_witness = derived_array_tr_storage:: ArrayTrStorageWitness :: from_witness ( & witness_values) ?;
116118 assert_eq ! ( original_witness, recovered_witness) ;
117119
118120 rng = StdRng :: seed_from_u64 ( seed) ;
119- let rand_raw_witness_values =
120- derived_array_tr_storage:: ArrayTrStorageWitness :: generate_witness ( & mut rng) ;
121+ let rand_raw_witness_values = derived_array_tr_storage:: ArrayTrStorageWitness :: generate_witness ( & mut rng) ;
121122 assert_eq ! ( witness_values, rand_raw_witness_values) ;
122123
123124 rng = StdRng :: seed_from_u64 ( seed) ;
124- let original_arguments =
125- derived_array_tr_storage:: ArrayTrStorageArguments :: generate_arguments_raw ( & mut rng) ;
125+ let original_arguments = derived_array_tr_storage:: ArrayTrStorageArguments :: generate_arguments_raw ( & mut rng) ;
126126
127127 let arguments_values = original_arguments. build_arguments ( ) ;
128- let recovered_arguments =
129- derived_array_tr_storage:: ArrayTrStorageArguments :: from_arguments ( & arguments_values) ?;
128+ let recovered_arguments = derived_array_tr_storage:: ArrayTrStorageArguments :: from_arguments ( & arguments_values) ?;
130129 assert_eq ! ( original_arguments, recovered_arguments) ;
131130
132131 rng = StdRng :: seed_from_u64 ( seed) ;
133- let rand_raw_witness_values =
134- derived_array_tr_storage:: ArrayTrStorageArguments :: generate_arguments ( & mut rng) ;
132+ let rand_raw_witness_values = derived_array_tr_storage:: ArrayTrStorageArguments :: generate_arguments ( & mut rng) ;
135133 assert_eq ! ( arguments_values, rand_raw_witness_values) ;
136- } ;
134+ }
137135
138136 Ok ( ( ) )
139- }
137+ }
138+
139+ fn test_e2e_random_value_generation_behaviour ( ) -> Result < ( ) , String > {
140+ for seed in 0 ..32 {
141+ use simplex:: rand:: { rngs:: StdRng , SeedableRng } ;
142+
143+ let mut rng = StdRng :: seed_from_u64 ( seed) ;
144+
145+ {
146+ let witness_values = derived_array_tr_storage:: ArrayTrStorageWitness :: generate_witness ( & mut rng) ;
147+
148+ let witness_values = regenerate_witness_values ( & witness_values, & mut rng) ;
149+ let _ = derived_array_tr_storage:: ArrayTrStorageWitness :: from_witness ( & witness_values) ?;
150+
151+ let witness_values = regenerate_witness_values_iterative ( & witness_values, & mut rng) ;
152+ let _ = derived_array_tr_storage:: ArrayTrStorageWitness :: from_witness ( & witness_values) ?;
153+ }
154+
155+ {
156+ let arguments_values = derived_array_tr_storage:: ArrayTrStorageArguments :: generate_arguments ( & mut rng) ;
157+
158+ let arguments_values = regenerate_arguments_values ( & arguments_values, & mut rng) ;
159+ let _ = derived_array_tr_storage:: ArrayTrStorageArguments :: from_arguments ( & arguments_values) ?;
160+
161+ let arguments_values = regenerate_arguments_values_iterative ( & arguments_values, & mut rng) ;
162+ let _ = derived_array_tr_storage:: ArrayTrStorageArguments :: from_arguments ( & arguments_values) ?;
163+ }
164+ }
165+ Ok ( ( ) )
166+ }
167+
168+ fn regenerate_witness_values ( wit : & WitnessValues , rng : & mut dyn RngCore ) -> WitnessValues {
169+ use std:: collections:: HashMap ;
170+ let mut map: HashMap < _ , _ > = Default :: default ( ) ;
171+ for ( name, val) in wit. iter ( ) {
172+ map. insert ( name. clone ( ) , generate_value_by_ty ( val. ty ( ) , rng) ) ;
173+ }
174+ WitnessValues :: from ( map)
175+ }
176+
177+ fn regenerate_arguments_values ( args : & Arguments , rng : & mut dyn RngCore ) -> Arguments {
178+ use std:: collections:: HashMap ;
179+
180+ let mut map: HashMap < _ , _ > = Default :: default ( ) ;
181+ for ( name, val) in args. iter ( ) {
182+ map. insert ( name. clone ( ) , generate_value_by_ty ( val. ty ( ) , rng) ) ;
183+ }
184+ Arguments :: from ( map)
185+ }
186+
187+ fn regenerate_witness_values_iterative ( wit : & WitnessValues , rng : & mut dyn RngCore ) -> WitnessValues {
188+ use std:: collections:: HashMap ;
189+
190+ let mut map: HashMap < _ , _ > = Default :: default ( ) ;
191+ for ( name, val) in wit. iter ( ) {
192+ map. insert ( name. clone ( ) , generate_value_by_ty_iterative ( val. ty ( ) , rng) ) ;
193+ }
194+ WitnessValues :: from ( map)
195+ }
196+
197+ fn regenerate_arguments_values_iterative ( args : & Arguments , rng : & mut dyn RngCore ) -> Arguments {
198+ use std:: collections:: HashMap ;
199+
200+ let mut map: HashMap < _ , _ > = Default :: default ( ) ;
201+ for ( name, val) in args. iter ( ) {
202+ map. insert ( name. clone ( ) , generate_value_by_ty_iterative ( val. ty ( ) , rng) ) ;
203+ }
204+ Arguments :: from ( map)
205+ }
0 commit comments