@@ -403,74 +403,83 @@ std::vector<std::array<FF, 3>> positive_op_div_test_values = { {
403
403
// Test on basic addition over finite field type.
404
404
TEST_F (AvmArithmeticTestsFF, addition)
405
405
{
406
- std::vector<FF> const calldata = { 37 , 4 , 11 };
406
+ const FF a = FF::modulus - 19 ;
407
+ const FF b = FF::modulus - 5 ;
408
+ const FF c = FF::modulus - 24 ; // c = a + b
409
+ std::vector<FF> const calldata = { a, b, 4 };
407
410
gen_trace_builder (calldata);
408
411
trace_builder.op_set (0 , 0 , 0 , AvmMemoryTag::U32);
409
412
trace_builder.op_set (0 , 3 , 1 , AvmMemoryTag::U32);
410
413
trace_builder.op_calldata_copy (0 , 0 , 1 , 0 );
411
414
412
- // Memory layout: [37,4,11,0 ,0,0,....]
413
- trace_builder.op_add (0 , 0 , 1 , 4 ); // [37,4,11,0,41 ,0,....]
415
+ // Memory layout: [a,b,4 ,0,0,....]
416
+ trace_builder.op_add (0 , 0 , 1 , 4 ); // [a,b,4,0,c ,0,....]
414
417
trace_builder.op_set (0 , 5 , 100 , AvmMemoryTag::U32);
415
418
trace_builder.op_return (0 , 0 , 100 );
416
419
auto trace = trace_builder.finalize ();
417
420
418
- auto alu_row = common_validate_add (trace, FF ( 37 ), FF ( 4 ), FF ( 41 ) , FF (0 ), FF (1 ), FF (4 ), AvmMemoryTag::FF);
421
+ auto alu_row = common_validate_add (trace, a, b, c , FF (0 ), FF (1 ), FF (4 ), AvmMemoryTag::FF);
419
422
420
423
EXPECT_EQ (alu_row.alu_ff_tag , FF (1 ));
421
424
EXPECT_EQ (alu_row.alu_cf , FF (0 ));
422
425
423
- std::vector<FF> const returndata = { 37 , 4 , 11 , 0 , 41 };
426
+ std::vector<FF> const returndata = { a, b, 4 , 0 , c };
424
427
425
428
validate_trace (std::move (trace), public_inputs, calldata, returndata);
426
429
}
427
430
428
431
// Test on basic subtraction over finite field type.
429
432
TEST_F (AvmArithmeticTestsFF, subtraction)
430
433
{
431
- std::vector<FF> const calldata = { 8 , 4 , 17 };
434
+ const FF a = 8 ;
435
+ const FF b = FF::modulus - 5 ;
436
+ const FF c = 13 ; // c = a - b
437
+ std::vector<FF> const calldata = { b, 4 , a };
432
438
gen_trace_builder (calldata);
433
439
trace_builder.op_set (0 , 0 , 0 , AvmMemoryTag::U32);
434
440
trace_builder.op_set (0 , 3 , 1 , AvmMemoryTag::U32);
435
441
trace_builder.op_calldata_copy (0 , 0 , 1 , 0 );
436
442
437
- // Memory layout: [8 ,4,17 ,0,0,0,....]
438
- trace_builder.op_sub (0 , 2 , 0 , 1 ); // [8,9,17 ,0,0,0....]
443
+ // Memory layout: [b ,4,a ,0,0,0,....]
444
+ trace_builder.op_sub (0 , 2 , 0 , 1 ); // [b,c,a ,0,0,0....]
439
445
trace_builder.op_set (0 , 3 , 100 , AvmMemoryTag::U32);
440
446
trace_builder.op_return (0 , 0 , 100 );
441
447
auto trace = trace_builder.finalize ();
442
448
443
- auto alu_row = common_validate_sub (trace, FF ( 17 ), FF ( 8 ), FF ( 9 ) , FF (2 ), FF (0 ), FF (1 ), AvmMemoryTag::FF);
449
+ auto alu_row = common_validate_sub (trace, a, b, c , FF (2 ), FF (0 ), FF (1 ), AvmMemoryTag::FF);
444
450
445
451
EXPECT_EQ (alu_row.alu_ff_tag , FF (1 ));
446
452
EXPECT_EQ (alu_row.alu_cf , FF (0 ));
447
453
448
- std::vector<FF> const returndata = { 8 , 9 , 17 };
454
+ std::vector<FF> const returndata = { b, c, a };
449
455
validate_trace (std::move (trace), public_inputs, calldata, returndata);
450
456
}
451
457
452
458
// Test on basic multiplication over finite field type.
453
459
TEST_F (AvmArithmeticTestsFF, multiplication)
454
460
{
455
- std::vector<FF> const calldata = { 5 , 0 , 20 };
461
+ const FF a = FF::modulus - 1 ;
462
+ const FF b = 278 ;
463
+ const FF c = FF::modulus - 278 ;
464
+ std::vector<FF> const calldata = { b, 0 , a };
456
465
gen_trace_builder (calldata);
457
466
trace_builder.op_set (0 , 0 , 0 , AvmMemoryTag::U32);
458
467
trace_builder.op_set (0 , 3 , 1 , AvmMemoryTag::U32);
459
468
trace_builder.op_calldata_copy (0 , 0 , 1 , 0 );
460
469
461
- // Memory layout: [5 ,0,20 ,0,0,0,....]
462
- trace_builder.op_mul (0 , 2 , 0 , 1 ); // [5,100,20 ,0,0,0....]
470
+ // Memory layout: [b ,0,a ,0,0,0,....]
471
+ trace_builder.op_mul (0 , 2 , 0 , 1 ); // [b,c,a ,0,0,0....]
463
472
trace_builder.op_set (0 , 3 , 100 , AvmMemoryTag::U32);
464
473
trace_builder.op_return (0 , 0 , 100 );
465
474
auto trace = trace_builder.finalize ();
466
475
467
- auto alu_row_index = common_validate_mul (trace, FF ( 20 ), FF ( 5 ), FF ( 100 ) , FF (2 ), FF (0 ), FF (1 ), AvmMemoryTag::FF);
476
+ auto alu_row_index = common_validate_mul (trace, a, b, c , FF (2 ), FF (0 ), FF (1 ), AvmMemoryTag::FF);
468
477
auto alu_row = trace.at (alu_row_index);
469
478
470
479
EXPECT_EQ (alu_row.alu_ff_tag , FF (1 ));
471
480
EXPECT_EQ (alu_row.alu_cf , FF (0 ));
472
481
473
- std::vector<FF> const returndata = { 5 , 100 , 20 };
482
+ std::vector<FF> const returndata = { b, c, a };
474
483
validate_trace (std::move (trace), public_inputs, calldata, returndata);
475
484
}
476
485
0 commit comments