Skip to content

Commit 83e2667

Browse files
committed
JSTPRV-166 fix conformance harness: pin Gemm dims, abs_diff delta, scalar empty guard, allow_jstprove_error flag, u64 tolerance
1 parent 0ad1ddf commit 83e2667

9 files changed

Lines changed: 89 additions & 34 deletions

File tree

rust/jstprove_conformance/src/fixtures.rs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ const INT64: i32 = 7;
1616
/// α = 2^18 = 262144
1717
const ALPHA: i64 = 262144;
1818

19-
fn tol(abs: i64) -> Tolerance {
19+
fn tol(abs: u64) -> Tolerance {
2020
Tolerance {
2121
abs,
2222
rel: 0.0,
@@ -107,6 +107,7 @@ fn f01_tile_broadcast() -> RegressionFixture {
107107
inputs: vec![vec![1, 2, 3, 4, 5, 6, 7, 8]],
108108
tolerance: Tolerance::EXACT,
109109
ignore_extra_reference_outputs: false,
110+
allow_jstprove_error: false,
110111
},
111112
allow_jstprove_error: false,
112113
}
@@ -144,6 +145,7 @@ fn f02_transpose_boundary_perm() -> RegressionFixture {
144145
inputs: vec![(1_i64..=24).collect()],
145146
tolerance: Tolerance::EXACT,
146147
ignore_extra_reference_outputs: false,
148+
allow_jstprove_error: false,
147149
},
148150
allow_jstprove_error: false,
149151
}
@@ -183,6 +185,7 @@ fn f03_expand_scalar_to_matrix() -> RegressionFixture {
183185
inputs: vec![vec![7_i64]],
184186
tolerance: Tolerance::EXACT,
185187
ignore_extra_reference_outputs: false,
188+
allow_jstprove_error: false,
186189
},
187190
allow_jstprove_error: false,
188191
}
@@ -227,6 +230,7 @@ fn f04_gather_max_index() -> RegressionFixture {
227230
inputs: vec![data],
228231
tolerance: Tolerance::EXACT,
229232
ignore_extra_reference_outputs: false,
233+
allow_jstprove_error: false,
230234
},
231235
allow_jstprove_error: false,
232236
}
@@ -280,6 +284,7 @@ fn f05_div_near_zero_divisor() -> RegressionFixture {
280284
inputs: vec![dividend],
281285
tolerance: Tolerance::EXACT,
282286
ignore_extra_reference_outputs: false,
287+
allow_jstprove_error: false,
283288
},
284289
allow_jstprove_error: false,
285290
}
@@ -328,6 +333,7 @@ fn f06_cos_large_angle() -> RegressionFixture {
328333
inputs: vec![x_vals],
329334
tolerance: tol(3),
330335
ignore_extra_reference_outputs: false,
336+
allow_jstprove_error: false,
331337
},
332338
allow_jstprove_error: true, // Cos ~4 M vars — too large for debug-build tests
333339
}
@@ -376,6 +382,7 @@ fn f07a_reducemax_overflow_boundary() -> RegressionFixture {
376382
inputs: vec![vec![v, v - 1, v, v + 1, v - 2, v]],
377383
tolerance: Tolerance::EXACT,
378384
ignore_extra_reference_outputs: false,
385+
allow_jstprove_error: false,
379386
},
380387
allow_jstprove_error: false,
381388
}
@@ -421,6 +428,7 @@ fn f07b_reducesum_overflow_boundary() -> RegressionFixture {
421428
inputs: vec![vals],
422429
tolerance: Tolerance::EXACT,
423430
ignore_extra_reference_outputs: false,
431+
allow_jstprove_error: false,
424432
},
425433
allow_jstprove_error: false,
426434
}
@@ -461,6 +469,7 @@ fn f08a_matmul_overflow_boundary() -> RegressionFixture {
461469
inputs: vec![a_vals, b_vals],
462470
tolerance: tol(2),
463471
ignore_extra_reference_outputs: false,
472+
allow_jstprove_error: false,
464473
},
465474
allow_jstprove_error: false,
466475
}
@@ -513,6 +522,7 @@ fn f08b_gemm_overflow_boundary() -> RegressionFixture {
513522
inputs: vec![a_vals],
514523
tolerance: tol(2),
515524
ignore_extra_reference_outputs: false,
525+
allow_jstprove_error: false,
516526
},
517527
allow_jstprove_error: false,
518528
}
@@ -581,6 +591,7 @@ fn f09_layernorm_signed_output() -> RegressionFixture {
581591
inputs: vec![x_vals],
582592
tolerance: tol(5),
583593
ignore_extra_reference_outputs: false,
594+
allow_jstprove_error: false,
584595
},
585596
allow_jstprove_error: false,
586597
}
@@ -625,6 +636,7 @@ fn f10a_topk_duplicates() -> RegressionFixture {
625636
inputs: vec![x_vals],
626637
tolerance: Tolerance::EXACT,
627638
ignore_extra_reference_outputs: true,
639+
allow_jstprove_error: false,
628640
},
629641
allow_jstprove_error: false,
630642
}
@@ -678,6 +690,7 @@ fn f10b_topk_k_equals_n() -> RegressionFixture {
678690
inputs: vec![x_vals],
679691
tolerance: Tolerance::EXACT,
680692
ignore_extra_reference_outputs: true,
693+
allow_jstprove_error: false,
681694
},
682695
allow_jstprove_error: false,
683696
}
@@ -735,6 +748,7 @@ fn f11_gemm_bias_broadcast() -> RegressionFixture {
735748
inputs: vec![a_vals],
736749
tolerance: tol(2),
737750
ignore_extra_reference_outputs: false,
751+
allow_jstprove_error: false,
738752
},
739753
allow_jstprove_error: false,
740754
}
@@ -781,6 +795,7 @@ fn f12a_pow_fractional_exponent_0_5() -> RegressionFixture {
781795
inputs: vec![x_vals],
782796
tolerance: tol(2),
783797
ignore_extra_reference_outputs: false,
798+
allow_jstprove_error: false,
784799
},
785800
allow_jstprove_error: false,
786801
}
@@ -829,6 +844,7 @@ fn f12b_pow_fractional_exponent_1_5() -> RegressionFixture {
829844
inputs: vec![x_vals],
830845
tolerance: tol(2),
831846
ignore_extra_reference_outputs: false,
847+
allow_jstprove_error: false,
832848
},
833849
allow_jstprove_error: false,
834850
}

rust/jstprove_conformance/src/generator/builder.rs

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ impl TestCaseBuilder {
123123
inputs: flat_inputs,
124124
tolerance: spec.tolerance.clone(),
125125
ignore_extra_reference_outputs: false,
126+
allow_jstprove_error: false,
126127
}
127128
}
128129
}
@@ -187,11 +188,7 @@ pub fn shrink(original: &TestCase, runner: &ConformanceRunner) -> TestCase {
187188

188189
let candidate = TestCase {
189190
inputs: shrunken_inputs.clone(),
190-
onnx_bytes: best.onnx_bytes.clone(),
191-
op_name: best.op_name,
192-
seed: best.seed,
193-
tolerance: best.tolerance.clone(),
194-
ignore_extra_reference_outputs: false,
191+
..best.clone()
195192
};
196193
attempts += 1;
197194
if is_still_failing(&candidate, runner) {
@@ -212,11 +209,7 @@ pub fn shrink(original: &TestCase, runner: &ConformanceRunner) -> TestCase {
212209
new_inputs[input_idx][elem_idx] = 0;
213210
let candidate = TestCase {
214211
inputs: new_inputs,
215-
onnx_bytes: best.onnx_bytes.clone(),
216-
op_name: best.op_name,
217-
seed: best.seed,
218-
tolerance: best.tolerance.clone(),
219-
ignore_extra_reference_outputs: false,
212+
..best.clone()
220213
};
221214
attempts += 1;
222215
if is_still_failing(&candidate, runner) {
@@ -240,11 +233,7 @@ pub fn shrink(original: &TestCase, runner: &ConformanceRunner) -> TestCase {
240233
new_inputs[input_idx][elem_idx] = smaller;
241234
let candidate = TestCase {
242235
inputs: new_inputs,
243-
onnx_bytes: best.onnx_bytes.clone(),
244-
op_name: best.op_name,
245-
seed: best.seed,
246-
tolerance: best.tolerance.clone(),
247-
ignore_extra_reference_outputs: false,
236+
..best.clone()
248237
};
249238
attempts += 1;
250239
if is_still_failing(&candidate, runner) {

rust/jstprove_conformance/src/generator/cases_float.rs

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ const INT64: i32 = 7;
2020
/// α = 2^18 = 262144
2121
const ALPHA: i64 = 262144;
2222

23-
fn tol(abs: i64) -> Tolerance {
23+
fn tol(abs: u64) -> Tolerance {
2424
Tolerance {
2525
abs,
2626
rel: 0.0,
@@ -85,6 +85,7 @@ pub fn rescaling_cases() -> Vec<TestCase> {
8585
inputs: vec![a_vals],
8686
tolerance: tol(3),
8787
ignore_extra_reference_outputs: false,
88+
allow_jstprove_error: false,
8889
});
8990
}
9091

@@ -136,6 +137,7 @@ pub fn rescaling_cases() -> Vec<TestCase> {
136137
inputs: vec![a_vals],
137138
tolerance: tol(3),
138139
ignore_extra_reference_outputs: false,
140+
allow_jstprove_error: false,
139141
});
140142
}
141143

@@ -173,6 +175,7 @@ pub fn rescaling_cases() -> Vec<TestCase> {
173175
inputs: vec![a_vals, b_alpha],
174176
tolerance: tol(3),
175177
ignore_extra_reference_outputs: false,
178+
allow_jstprove_error: false,
176179
});
177180
}
178181

@@ -236,6 +239,7 @@ pub fn rescaling_cases() -> Vec<TestCase> {
236239
inputs: vec![x_vals],
237240
tolerance: tol(3),
238241
ignore_extra_reference_outputs: false,
242+
allow_jstprove_error: false,
239243
});
240244
}
241245

@@ -293,6 +297,7 @@ pub fn rescaling_cases() -> Vec<TestCase> {
293297
inputs: vec![x_vals],
294298
tolerance: tol(3),
295299
ignore_extra_reference_outputs: false,
300+
allow_jstprove_error: false,
296301
});
297302
}
298303

@@ -342,6 +347,7 @@ pub fn rescaling_cases() -> Vec<TestCase> {
342347
inputs: vec![x_vals],
343348
tolerance: tol(5),
344349
ignore_extra_reference_outputs: false,
350+
allow_jstprove_error: false,
345351
});
346352
}
347353

@@ -399,6 +405,7 @@ pub fn rescaling_cases() -> Vec<TestCase> {
399405
inputs: vec![x_vals],
400406
tolerance: tol(3),
401407
ignore_extra_reference_outputs: false,
408+
allow_jstprove_error: false,
402409
});
403410
}
404411

@@ -428,6 +435,7 @@ pub fn rescaling_cases() -> Vec<TestCase> {
428435
inputs: vec![a_vals],
429436
tolerance: Tolerance::EXACT,
430437
ignore_extra_reference_outputs: false,
438+
allow_jstprove_error: false,
431439
});
432440
}
433441

@@ -460,6 +468,7 @@ pub fn rescaling_cases() -> Vec<TestCase> {
460468
inputs: vec![x_vals],
461469
tolerance: tol(3),
462470
ignore_extra_reference_outputs: false,
471+
allow_jstprove_error: false,
463472
});
464473
}
465474

@@ -494,6 +503,7 @@ pub fn rescaling_cases() -> Vec<TestCase> {
494503
inputs: vec![x_vals],
495504
tolerance: tol(3),
496505
ignore_extra_reference_outputs: false,
506+
allow_jstprove_error: false,
497507
});
498508
}
499509

@@ -530,6 +540,7 @@ pub fn transcendental_cases() -> Vec<TestCase> {
530540
inputs: vec![x_vals],
531541
tolerance: tol(5),
532542
ignore_extra_reference_outputs: false,
543+
allow_jstprove_error: false,
533544
});
534545
}
535546

@@ -551,6 +562,7 @@ pub fn transcendental_cases() -> Vec<TestCase> {
551562
inputs: vec![x_vals],
552563
tolerance: tol(5),
553564
ignore_extra_reference_outputs: false,
565+
allow_jstprove_error: false,
554566
});
555567
}
556568

@@ -575,6 +587,7 @@ pub fn transcendental_cases() -> Vec<TestCase> {
575587
inputs: vec![x_vals],
576588
tolerance: tol(8),
577589
ignore_extra_reference_outputs: false,
590+
allow_jstprove_error: false,
578591
});
579592
}
580593

@@ -617,6 +630,7 @@ pub fn transcendental_cases() -> Vec<TestCase> {
617630
inputs: vec![x_vals],
618631
tolerance: tol(8),
619632
ignore_extra_reference_outputs: false,
633+
allow_jstprove_error: false,
620634
});
621635
}
622636

@@ -639,6 +653,7 @@ pub fn transcendental_cases() -> Vec<TestCase> {
639653
inputs: vec![x_vals],
640654
tolerance: tol(5),
641655
ignore_extra_reference_outputs: false,
656+
allow_jstprove_error: false,
642657
});
643658
}
644659

@@ -669,6 +684,7 @@ pub fn transcendental_cases() -> Vec<TestCase> {
669684
inputs: vec![x_vals],
670685
tolerance: tol(5),
671686
ignore_extra_reference_outputs: false,
687+
allow_jstprove_error: false,
672688
});
673689
}
674690

@@ -690,6 +706,7 @@ pub fn transcendental_cases() -> Vec<TestCase> {
690706
inputs: vec![x_vals],
691707
tolerance: tol(5),
692708
ignore_extra_reference_outputs: false,
709+
allow_jstprove_error: false,
693710
});
694711
}
695712

@@ -715,6 +732,7 @@ pub fn transcendental_cases() -> Vec<TestCase> {
715732
inputs: vec![x_vals],
716733
tolerance: tol(5),
717734
ignore_extra_reference_outputs: false,
735+
allow_jstprove_error: false,
718736
});
719737
}
720738

@@ -763,6 +781,7 @@ pub fn pooling_cases() -> Vec<TestCase> {
763781
inputs: vec![x_vals],
764782
tolerance: tol(3),
765783
ignore_extra_reference_outputs: false,
784+
allow_jstprove_error: false,
766785
});
767786
}
768787

@@ -785,6 +804,7 @@ pub fn pooling_cases() -> Vec<TestCase> {
785804
inputs: vec![x_vals],
786805
tolerance: tol(3),
787806
ignore_extra_reference_outputs: false,
807+
allow_jstprove_error: false,
788808
});
789809
}
790810

@@ -817,6 +837,7 @@ pub fn pooling_cases() -> Vec<TestCase> {
817837
inputs: vec![x_vals],
818838
tolerance: tol(1), // slight tolerance due to float comparison
819839
ignore_extra_reference_outputs: false,
840+
allow_jstprove_error: false,
820841
});
821842
}
822843

@@ -886,6 +907,7 @@ pub fn spatial_cases() -> Vec<TestCase> {
886907
inputs: vec![x_vals],
887908
tolerance: Tolerance::EXACT,
888909
ignore_extra_reference_outputs: false,
910+
allow_jstprove_error: false,
889911
});
890912
}
891913

@@ -923,6 +945,7 @@ pub fn spatial_cases() -> Vec<TestCase> {
923945
inputs: vec![x_vals],
924946
tolerance: tol(5),
925947
ignore_extra_reference_outputs: false,
948+
allow_jstprove_error: false,
926949
});
927950
}
928951

@@ -981,6 +1004,7 @@ pub fn topk_cases() -> Vec<TestCase> {
9811004
inputs: vec![x_vals],
9821005
tolerance: Tolerance::EXACT,
9831006
ignore_extra_reference_outputs: true,
1007+
allow_jstprove_error: false,
9841008
});
9851009
}
9861010

@@ -1018,6 +1042,7 @@ pub fn topk_cases() -> Vec<TestCase> {
10181042
inputs: vec![x_vals],
10191043
tolerance: Tolerance::EXACT,
10201044
ignore_extra_reference_outputs: true,
1045+
allow_jstprove_error: false,
10211046
});
10221047
}
10231048

0 commit comments

Comments
 (0)