Skip to content

Commit 3aa022d

Browse files
committed
simplex: update ui tests with random value generation
1 parent 045e126 commit 3aa022d

11 files changed

Lines changed: 848 additions & 195 deletions

File tree

crates/simplex/tests/ui/array_tr_storage.rs

Lines changed: 87 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
use 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};
43
use simplex::program::Program;
4+
use simplex::program::{ArgumentsTrait, RandomArguments, RandomWitness, WitnessTrait};
55
use simplex::provider::SimplicityNetwork;
6-
use simplex::simplicityhl::elements::Script;
76
use 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)]
912
pub struct ArrayTrStorageProgram {
1013
program: Program,
@@ -66,9 +69,10 @@ impl AsMut<Program> for ArrayTrStorageProgram {
6669
include_simf!("../../../../crates/simplex/tests/ui_simfs/array_tr_storage.simf");
6770

6871
fn 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+
}

crates/simplex/tests/ui/bytes32_tr_storage.rs

Lines changed: 82 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
use simplex::include_simf;
2-
use simplex::program::{ArgumentsTrait, RandomArguments, RandomWitness, WitnessTrait};
3-
2+
use simplex::mutantesting::{generate_value_by_ty, generate_value_by_ty_iterative};
43
use simplex::program::Program;
4+
use simplex::program::{ArgumentsTrait, RandomArguments, RandomWitness, WitnessTrait};
55
use simplex::provider::SimplicityNetwork;
6-
use simplex::simplicityhl::elements::Script;
76
use 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)]
912
pub struct Bytes32TrStorageProgram {
1013
program: Program,
@@ -67,8 +70,9 @@ include_simf!("../../../../crates/simplex/tests/ui_simfs/bytes32_tr_storage.simf
6770

6871
fn main() -> Result<(), String> {
6972
let _ = test_e2e_behaviour()?;
70-
let _ = test_default();
71-
let _ = test_e2e_random_behaviour();
73+
let _ = test_default()?;
74+
let _ = test_e2e_random_behaviour()?;
75+
let _ = test_e2e_random_value_generation_behaviour()?;
7276

7377
Ok(())
7478
}
@@ -77,15 +81,13 @@ fn test_e2e_behaviour() -> Result<(), String> {
7781
let original_witness = derived_bytes32_tr_storage::Bytes32TrStorageWitness::default();
7882

7983
let witness_values = original_witness.build_witness();
80-
let recovered_witness =
81-
derived_bytes32_tr_storage::Bytes32TrStorageWitness::from_witness(&witness_values)?;
84+
let recovered_witness = derived_bytes32_tr_storage::Bytes32TrStorageWitness::from_witness(&witness_values)?;
8285
assert_eq!(original_witness, recovered_witness);
8386

8487
let original_arguments = derived_bytes32_tr_storage::Bytes32TrStorageArguments::default();
8588

8689
let arguments_values = original_arguments.build_arguments();
87-
let recovered_arguments =
88-
derived_bytes32_tr_storage::Bytes32TrStorageArguments::from_arguments(&arguments_values)?;
90+
let recovered_arguments = derived_bytes32_tr_storage::Bytes32TrStorageArguments::from_arguments(&arguments_values)?;
8991
assert_eq!(original_arguments, recovered_arguments);
9092

9193
Ok(())
@@ -109,17 +111,14 @@ fn test_e2e_random_behaviour() -> Result<(), String> {
109111

110112
let mut rng = StdRng::seed_from_u64(seed);
111113

112-
let original_witness =
113-
derived_bytes32_tr_storage::Bytes32TrStorageWitness::generate_witness_raw(&mut rng);
114+
let original_witness = derived_bytes32_tr_storage::Bytes32TrStorageWitness::generate_witness_raw(&mut rng);
114115

115116
let witness_values = original_witness.build_witness();
116-
let recovered_witness =
117-
derived_bytes32_tr_storage::Bytes32TrStorageWitness::from_witness(&witness_values)?;
117+
let recovered_witness = derived_bytes32_tr_storage::Bytes32TrStorageWitness::from_witness(&witness_values)?;
118118
assert_eq!(original_witness, recovered_witness);
119119

120120
rng = StdRng::seed_from_u64(seed);
121-
let rand_raw_witness_values =
122-
derived_bytes32_tr_storage::Bytes32TrStorageWitness::generate_witness(&mut rng);
121+
let rand_raw_witness_values = derived_bytes32_tr_storage::Bytes32TrStorageWitness::generate_witness(&mut rng);
123122
assert_eq!(witness_values, rand_raw_witness_values);
124123

125124
rng = StdRng::seed_from_u64(seed);
@@ -138,3 +137,71 @@ fn test_e2e_random_behaviour() -> Result<(), String> {
138137
}
139138
Ok(())
140139
}
140+
141+
fn test_e2e_random_value_generation_behaviour() -> Result<(), String> {
142+
for seed in 0..32 {
143+
use simplex::rand::{rngs::StdRng, SeedableRng};
144+
145+
let mut rng = StdRng::seed_from_u64(seed);
146+
147+
{
148+
let witness_values = derived_bytes32_tr_storage::Bytes32TrStorageWitness::generate_witness(&mut rng);
149+
150+
let witness_values = regenerate_witness_values(&witness_values, &mut rng);
151+
let _ = derived_bytes32_tr_storage::Bytes32TrStorageWitness::from_witness(&witness_values)?;
152+
153+
let witness_values = regenerate_witness_values_iterative(&witness_values, &mut rng);
154+
let _ = derived_bytes32_tr_storage::Bytes32TrStorageWitness::from_witness(&witness_values)?;
155+
}
156+
157+
{
158+
let arguments_values = derived_bytes32_tr_storage::Bytes32TrStorageArguments::generate_arguments(&mut rng);
159+
160+
let arguments_values = regenerate_arguments_values(&arguments_values, &mut rng);
161+
let _ = derived_bytes32_tr_storage::Bytes32TrStorageArguments::from_arguments(&arguments_values)?;
162+
163+
let arguments_values = regenerate_arguments_values_iterative(&arguments_values, &mut rng);
164+
let _ = derived_bytes32_tr_storage::Bytes32TrStorageArguments::from_arguments(&arguments_values)?;
165+
}
166+
}
167+
Ok(())
168+
}
169+
170+
fn regenerate_witness_values(wit: &WitnessValues, rng: &mut dyn RngCore) -> WitnessValues {
171+
use std::collections::HashMap;
172+
let mut map: HashMap<_,_> = Default::default();
173+
for (name, val) in wit.iter() {
174+
map.insert(name.clone(), generate_value_by_ty(val.ty(), rng));
175+
}
176+
WitnessValues::from(map)
177+
}
178+
179+
fn regenerate_arguments_values(args: &Arguments, rng: &mut dyn RngCore) -> Arguments {
180+
use std::collections::HashMap;
181+
182+
let mut map: HashMap<_,_> = Default::default();
183+
for (name, val) in args.iter() {
184+
map.insert(name.clone(), generate_value_by_ty(val.ty(), rng));
185+
}
186+
Arguments::from(map)
187+
}
188+
189+
fn regenerate_witness_values_iterative(wit: &WitnessValues, rng: &mut dyn RngCore) -> WitnessValues {
190+
use std::collections::HashMap;
191+
192+
let mut map: HashMap<_,_> = Default::default();
193+
for (name, val) in wit.iter() {
194+
map.insert(name.clone(), generate_value_by_ty_iterative(val.ty(), rng));
195+
}
196+
WitnessValues::from(map)
197+
}
198+
199+
fn regenerate_arguments_values_iterative(args: &Arguments, rng: &mut dyn RngCore) -> Arguments {
200+
use std::collections::HashMap;
201+
202+
let mut map: HashMap<_,_> = Default::default();
203+
for (name, val) in args.iter() {
204+
map.insert(name.clone(), generate_value_by_ty_iterative(val.ty(), rng));
205+
}
206+
Arguments::from(map)
207+
}

0 commit comments

Comments
 (0)