@@ -15,10 +15,9 @@ use openvm_native_compiler::{
1515 asm:: { AsmBuilder , AsmCompiler } ,
1616 conversion:: { convert_program, CompilerOptions } ,
1717 ir:: { Array , Builder , Config , Felt } ,
18- prelude:: Usize ,
1918} ;
2019use openvm_native_recursion:: {
21- challenger:: { duplex:: DuplexChallengerVariable , CanObserveVariable } ,
20+ challenger:: { duplex:: DuplexChallengerVariable , CanObserveVariable , CanSampleVariable } ,
2221 testing_utils:: inner:: run_recursive_test,
2322} ;
2423use openvm_stark_backend:: {
@@ -192,7 +191,6 @@ fn test_multi_observe() {
192191 compiler. build ( builder. operations ) ;
193192 let asm_code = compiler. code ( ) ;
194193
195- // let program = Program::from_instructions(&instructions);
196194 let program: Program < _ > = convert_program ( asm_code, compilation_options) ;
197195
198196 let poseidon2_max_constraint_degree = 3 ;
@@ -232,17 +230,12 @@ fn test_multi_observe() {
232230}
233231
234232fn build_test_program < C : Config > ( builder : & mut Builder < C > ) {
235- let sample_lens: Vec < usize > = vec ! [ 10 , 2 , 1 , 3 , 20 ] ;
233+ let sample_lens: Vec < usize > = vec ! [ 10 , 2 , 1 , 0 , 3 , 20 , 200 , 400 ] ;
236234
237235 let mut rng = create_seeded_rng ( ) ;
238- let mut challenger = DuplexChallengerVariable :: new ( builder) ;
239236
240- // Observe a setup label
241- let label_f: Vec < u64 > = vec ! [ 128 , 3098 , 192 , 394 , 1662 , 928 , 374 , 281 , 598 , 182 , 475 , 729 ] ;
242- for n in label_f {
243- let f: Felt < C :: F > = builder. constant ( C :: F :: from_canonical_u64 ( n) ) ;
244- challenger. observe ( builder, f) ;
245- }
237+ let mut c1 = DuplexChallengerVariable :: new ( builder) ;
238+ let mut c2 = DuplexChallengerVariable :: new ( builder) ;
246239
247240 for l in sample_lens {
248241 let sample_input: Array < C , Felt < C :: F > > = builder. dyn_array ( l) ;
@@ -251,24 +244,13 @@ fn build_test_program<C: Config>(builder: &mut Builder<C>) {
251244 builder. set ( & sample_input, idx_vec[ 0 ] , C :: F :: from_canonical_u32 ( f_u32) ) ;
252245 } ) ;
253246
254- let next_input_ptr = builder . poseidon2_multi_observe (
255- & challenger . sponge_state ,
256- challenger . input_ptr ,
257- & sample_input ,
258- ) ;
247+ c1 . observe_slice_opt ( builder , & sample_input ) ;
248+ c2 . observe_slice ( builder , sample_input ) ;
249+
250+ let e1 = c1 . sample ( builder ) ;
251+ let e2 = c2 . sample ( builder ) ;
259252
260- builder. assign (
261- & challenger. input_ptr ,
262- challenger. io_empty_ptr + next_input_ptr. clone ( ) ,
263- ) ;
264- builder. if_ne ( next_input_ptr, Usize :: from ( 0 ) ) . then_or_else (
265- |builder| {
266- builder. assign ( & challenger. output_ptr , challenger. io_empty_ptr ) ;
267- } ,
268- |builder| {
269- builder. assign ( & challenger. output_ptr , challenger. io_full_ptr ) ;
270- } ,
271- ) ;
253+ builder. assert_felt_eq ( e1, e2) ;
272254 }
273255 builder. halt ( ) ;
274256}
0 commit comments