@@ -174,18 +174,15 @@ impl Library {
174
174
175
175
#[ cfg( test) ]
176
176
mod tests {
177
- use std:: collections:: HashMap ;
178
-
179
- use num:: One ;
180
177
use triton_vm:: prelude:: triton_asm;
181
178
use triton_vm:: prelude:: Program ;
182
179
183
180
use super :: * ;
184
- use crate :: empty_stack;
185
- use crate :: memory:: memcpy:: MemCpy ;
186
181
use crate :: mmr:: calculate_new_peaks_from_leaf_mutation:: MmrCalculateNewPeaksFromLeafMutationMtIndices ;
187
- use crate :: test_helpers:: test_rust_equivalence_given_input_values_deprecated;
188
- use crate :: traits:: deprecated_snippet:: DeprecatedSnippet ;
182
+ use crate :: test_prelude:: * ;
183
+
184
+ #[ derive( Debug , Copy , Clone , BFieldCodec ) ]
185
+ struct ZeroSizedType ;
189
186
190
187
#[ derive( Debug ) ]
191
188
struct DummyTestSnippetA ;
@@ -196,232 +193,119 @@ mod tests {
196
193
#[ derive( Debug ) ]
197
194
struct DummyTestSnippetC ;
198
195
199
- impl DeprecatedSnippet for DummyTestSnippetA {
200
- fn entrypoint_name ( & self ) -> String {
201
- "tasmlib_a_dummy_test_value" . to_string ( )
202
- }
203
-
204
- fn input_field_names ( & self ) -> Vec < String > {
205
- vec ! [ ]
206
- }
207
-
208
- fn input_types ( & self ) -> Vec < DataType > {
196
+ impl BasicSnippet for DummyTestSnippetA {
197
+ fn inputs ( & self ) -> Vec < ( DataType , String ) > {
209
198
vec ! [ ]
210
199
}
211
200
212
- fn output_field_names ( & self ) -> Vec < String > {
213
- vec ! [ "1" . to_string ( ) , "1 " . to_string( ) , "1" . to_string ( ) ]
201
+ fn outputs ( & self ) -> Vec < ( DataType , String ) > {
202
+ vec ! [ ( DataType :: Xfe , "dummy " . to_string( ) ) ]
214
203
}
215
204
216
- fn output_types ( & self ) -> Vec < DataType > {
217
- vec ! [ DataType :: Bfe , DataType :: Bfe , DataType :: Bfe ]
218
- }
219
-
220
- fn stack_diff ( & self ) -> isize {
221
- 3
205
+ fn entrypoint ( & self ) -> String {
206
+ "tasmlib_a_dummy_test_value" . to_string ( )
222
207
}
223
208
224
- fn function_code ( & self , library : & mut Library ) -> String {
225
- let entrypoint = self . entrypoint_name ( ) ;
209
+ fn code ( & self , library : & mut Library ) -> Vec < LabelledInstruction > {
226
210
let b = library. import ( Box :: new ( DummyTestSnippetB ) ) ;
227
211
let c = library. import ( Box :: new ( DummyTestSnippetC ) ) ;
228
212
229
- format ! (
230
- "
231
- {entrypoint}:
213
+ triton_asm ! (
214
+ { self . entrypoint( ) } :
232
215
call { b}
233
216
call { c}
234
217
return
235
- "
236
218
)
237
219
}
238
-
239
- fn crash_conditions ( & self ) -> Vec < String > {
240
- vec ! [ ]
241
- }
242
-
243
- fn gen_input_states ( & self ) -> Vec < crate :: InitVmState > {
244
- vec ! [ ]
245
- }
246
-
247
- fn common_case_input_state ( & self ) -> crate :: InitVmState {
248
- todo ! ( )
249
- }
250
-
251
- fn worst_case_input_state ( & self ) -> crate :: InitVmState {
252
- todo ! ( )
253
- }
254
-
255
- fn rust_shadowing (
256
- & self ,
257
- stack : & mut Vec < BFieldElement > ,
258
- _std_in : Vec < BFieldElement > ,
259
- _secret_in : Vec < BFieldElement > ,
260
- _memory : & mut HashMap < BFieldElement , BFieldElement > ,
261
- ) {
262
- stack. push ( BFieldElement :: one ( ) ) ;
263
- stack. push ( BFieldElement :: one ( ) ) ;
264
- stack. push ( BFieldElement :: one ( ) ) ;
265
- }
266
220
}
267
221
268
- impl DeprecatedSnippet for DummyTestSnippetB {
269
- fn entrypoint_name ( & self ) -> String {
270
- "tasmlib_b_dummy_test_value" . to_string ( )
271
- }
272
-
273
- fn input_field_names ( & self ) -> Vec < String > {
222
+ impl BasicSnippet for DummyTestSnippetB {
223
+ fn inputs ( & self ) -> Vec < ( DataType , String ) > {
274
224
vec ! [ ]
275
225
}
276
226
277
- fn input_types ( & self ) -> Vec < DataType > {
278
- vec ! [ ]
227
+ fn outputs ( & self ) -> Vec < ( DataType , String ) > {
228
+ [ "1" ; 2 ]
229
+ . map ( |name| ( DataType :: Bfe , name. to_string ( ) ) )
230
+ . to_vec ( )
279
231
}
280
232
281
- fn output_field_names ( & self ) -> Vec < String > {
282
- vec ! [ "1" . to_string( ) , "1" . to_string( ) ]
283
- }
284
-
285
- fn output_types ( & self ) -> Vec < DataType > {
286
- vec ! [ DataType :: Bfe , DataType :: Bfe ]
287
- }
288
-
289
- fn stack_diff ( & self ) -> isize {
290
- 2
233
+ fn entrypoint ( & self ) -> String {
234
+ "tasmlib_b_dummy_test_value" . to_string ( )
291
235
}
292
236
293
- fn function_code ( & self , library : & mut Library ) -> String {
294
- let entrypoint = self . entrypoint_name ( ) ;
237
+ fn code ( & self , library : & mut Library ) -> Vec < LabelledInstruction > {
295
238
let c = library. import ( Box :: new ( DummyTestSnippetC ) ) ;
296
239
297
- format ! (
298
- "
299
- {entrypoint}:
240
+ triton_asm ! (
241
+ { self . entrypoint( ) } :
300
242
call { c}
301
243
call { c}
302
244
return
303
- "
304
245
)
305
246
}
247
+ }
306
248
307
- fn crash_conditions ( & self ) -> Vec < String > {
308
- vec ! [ ]
309
- }
310
-
311
- fn gen_input_states ( & self ) -> Vec < crate :: InitVmState > {
249
+ impl BasicSnippet for DummyTestSnippetC {
250
+ fn inputs ( & self ) -> Vec < ( DataType , String ) > {
312
251
vec ! [ ]
313
252
}
314
253
315
- fn common_case_input_state ( & self ) -> crate :: InitVmState {
316
- todo ! ( )
317
- }
318
-
319
- fn worst_case_input_state ( & self ) -> crate :: InitVmState {
320
- todo ! ( )
254
+ fn outputs ( & self ) -> Vec < ( DataType , String ) > {
255
+ vec ! [ ( DataType :: Bfe , "1" . to_string( ) ) ]
321
256
}
322
257
323
- fn rust_shadowing (
324
- & self ,
325
- stack : & mut Vec < BFieldElement > ,
326
- _std_in : Vec < BFieldElement > ,
327
- _secret_in : Vec < BFieldElement > ,
328
- _memory : & mut HashMap < BFieldElement , BFieldElement > ,
329
- ) {
330
- stack. push ( BFieldElement :: one ( ) ) ;
331
- stack. push ( BFieldElement :: one ( ) ) ;
332
- }
333
- }
334
-
335
- impl DeprecatedSnippet for DummyTestSnippetC {
336
- fn entrypoint_name ( & self ) -> String {
258
+ fn entrypoint ( & self ) -> String {
337
259
"tasmlib_c_dummy_test_value" . to_string ( )
338
260
}
339
261
340
- fn input_field_names ( & self ) -> Vec < String > {
341
- vec ! [ ]
342
- }
343
-
344
- fn input_types ( & self ) -> Vec < DataType > {
345
- vec ! [ ]
262
+ fn code ( & self , _: & mut Library ) -> Vec < LabelledInstruction > {
263
+ triton_asm ! ( { self . entrypoint( ) } : push 1 return )
346
264
}
265
+ }
347
266
348
- fn output_field_names ( & self ) -> Vec < String > {
349
- vec ! [ "1" . to_string( ) ]
350
- }
267
+ impl Closure for DummyTestSnippetA {
268
+ type Args = ZeroSizedType ;
351
269
352
- fn output_types ( & self ) -> Vec < DataType > {
353
- vec ! [ DataType :: Bfe ]
270
+ fn rust_shadow ( & self , stack : & mut Vec < BFieldElement > ) {
271
+ push_encodable ( stack , & xfe ! [ [ 1 , 1 , 1 ] ] ) ;
354
272
}
355
273
356
- fn stack_diff ( & self ) -> isize {
357
- 1
274
+ fn pseudorandom_args ( & self , _ : [ u8 ; 32 ] , _ : Option < BenchmarkCase > ) -> Self :: Args {
275
+ ZeroSizedType
358
276
}
277
+ }
359
278
360
- fn function_code ( & self , _library : & mut Library ) -> String {
361
- let entrypoint = self . entrypoint_name ( ) ;
362
-
363
- format ! (
364
- "
365
- {entrypoint}:
366
- push 1
367
- return
368
- "
369
- )
370
- }
279
+ impl Closure for DummyTestSnippetB {
280
+ type Args = ZeroSizedType ;
371
281
372
- fn crash_conditions ( & self ) -> Vec < String > {
373
- vec ! [ ]
282
+ fn rust_shadow ( & self , stack : & mut Vec < BFieldElement > ) {
283
+ stack. push ( bfe ! ( 1 ) ) ;
284
+ stack. push ( bfe ! ( 1 ) ) ;
374
285
}
375
286
376
- fn gen_input_states ( & self ) -> Vec < crate :: InitVmState > {
377
- vec ! [ ]
287
+ fn pseudorandom_args ( & self , _ : [ u8 ; 32 ] , _ : Option < BenchmarkCase > ) -> Self :: Args {
288
+ ZeroSizedType
378
289
}
290
+ }
379
291
380
- fn common_case_input_state ( & self ) -> crate :: InitVmState {
381
- todo ! ( )
382
- }
292
+ impl Closure for DummyTestSnippetC {
293
+ type Args = ZeroSizedType ;
383
294
384
- fn worst_case_input_state ( & self ) -> crate :: InitVmState {
385
- todo ! ( )
295
+ fn rust_shadow ( & self , stack : & mut Vec < BFieldElement > ) {
296
+ stack . push ( bfe ! ( 1 ) ) ;
386
297
}
387
298
388
- fn rust_shadowing (
389
- & self ,
390
- stack : & mut Vec < BFieldElement > ,
391
- _std_in : Vec < BFieldElement > ,
392
- _secret_in : Vec < BFieldElement > ,
393
- _memory : & mut HashMap < BFieldElement , BFieldElement > ,
394
- ) {
395
- stack. push ( BFieldElement :: one ( ) )
299
+ fn pseudorandom_args ( & self , _: [ u8 ; 32 ] , _: Option < BenchmarkCase > ) -> Self :: Args {
300
+ ZeroSizedType
396
301
}
397
302
}
398
303
399
304
#[ test]
400
305
fn library_includes ( ) {
401
- let empty_stack = empty_stack ( ) ;
402
-
403
- let expected = None ;
404
- test_rust_equivalence_given_input_values_deprecated (
405
- & DummyTestSnippetA ,
406
- & empty_stack,
407
- & [ ] ,
408
- HashMap :: default ( ) ,
409
- expected,
410
- ) ;
411
- test_rust_equivalence_given_input_values_deprecated (
412
- & DummyTestSnippetB ,
413
- & empty_stack,
414
- & [ ] ,
415
- HashMap :: default ( ) ,
416
- expected,
417
- ) ;
418
- test_rust_equivalence_given_input_values_deprecated (
419
- & DummyTestSnippetC ,
420
- & empty_stack,
421
- & [ ] ,
422
- HashMap :: default ( ) ,
423
- expected,
424
- ) ;
306
+ ShadowedClosure :: new ( DummyTestSnippetA ) . test ( ) ;
307
+ ShadowedClosure :: new ( DummyTestSnippetB ) . test ( ) ;
308
+ ShadowedClosure :: new ( DummyTestSnippetC ) . test ( ) ;
425
309
}
426
310
427
311
#[ test]
0 commit comments