Skip to content

Commit d00e313

Browse files
committed
Tests: Update rsecprime tests to the reversed-coefficients convention
The helper now derives the ECC count from the length of the reversed coefficients array rather than taking a separate nc operand.
1 parent c346176 commit d00e313

1 file changed

Lines changed: 24 additions & 19 deletions

File tree

tests/ps_tests/rsecprime.ps.test

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,56 +10,62 @@
1010
% Standalone tests for the rsecprime helper (streaming RSEC over GF(p)).
1111
% Uses small primes so expected values can be hand-computed.
1212
%
13+
% Calling convention:
14+
%
15+
% {getdata} nd coeffsrev lfsr p //rsecprime exec
16+
%
17+
% where coeffsrev holds the generator coefficients reversed.
18+
%
1319

1420
/rsecprime dup /uk.co.terryburton.bwipp findresource cvx def
1521

1622
%
17-
% Test 1: Minimal case. p=11, nc=1, nd=1, data=[3], coeffs=[7].
23+
% Test 1: Minimal case. p=11, nc=1, nd=1, data=[3], coeffsrev=[7].
1824
% Hand-computed:
1925
% lfsr = [0]
2026
% m=0: fb = (3 - 0) mod 11 = 3
2127
% inner j loop has nc-2 = -1 range -> no iterations
22-
% lfsr[0] = (coeffs[0] * fb) mod 11 = (7*3) mod 11 = 10
28+
% lfsr[0] = (coeffsrev[0] * fb) mod 11 = (7*3) mod 11 = 10
2329
% Expected ECC = [10]
2430
%
2531
/rsdata [3] def
2632
/lfsr 1 array def
27-
{ rsdata exch get } 1 [7] 1 lfsr 11 //rsecprime exec
33+
{ rsdata exch get } 1 [7] lfsr 11 //rsecprime exec
2834
lfsr 0 1 getinterval
2935
[10] debugIsEqual
3036

3137
%
32-
% Test 2: nc=2, nd=1, p=11, data=[3], coeffs=[2, 3].
38+
% Test 2: nc=2, nd=1, p=11, data=[3], coeffsrev=[3, 2].
3339
% Hand-computed:
3440
% lfsr = [0, 0]
3541
% m=0: fb = (3 - 0) mod 11 = 3
36-
% j=0: lfsr[0] = (lfsr[1] + coeffs[1]*fb) mod 11 = (0 + 3*3) mod 11 = 9
37-
% lfsr[1] = (coeffs[0] * fb) mod 11 = (2*3) mod 11 = 6
42+
% j=0: lfsr[0] = (lfsr[1] + coeffsrev[0]*fb) mod 11 = (0 + 3*3) mod 11 = 9
43+
% lfsr[1] = (coeffsrev[1] * fb) mod 11 = (2*3) mod 11 = 6
3844
% Expected ECC = [9, 6]
3945
%
4046
/lfsr 2 array def
41-
{ rsdata exch get } 1 [2 3] 2 lfsr 11 //rsecprime exec
47+
{ rsdata exch get } 1 [3 2] lfsr 11 //rsecprime exec
4248
lfsr 0 2 getinterval
4349
[9 6] debugIsEqual
4450

4551
%
46-
% Test 3: nc=2, nd=2, p=11, data=[3, 5], coeffs=[2, 3].
52+
% Test 3: nc=2, nd=2, p=11, data=[3, 5], coeffsrev=[3, 2].
4753
% After m=0 as Test 2: lfsr = [9, 6]
4854
% m=1: fb = (5 - 9 + 11) mod 11 = 7
4955
% j=0: lfsr[0] = (lfsr[1] + 3*7) mod 11 = (6 + 21) mod 11 = 5
5056
% lfsr[1] = (2 * 7) mod 11 = 14 mod 11 = 3
5157
% Expected ECC = [5, 3]
5258
%
5359
/rsdata [3 5] def
54-
{ rsdata exch get } 2 [2 3] 2 lfsr 11 //rsecprime exec
60+
{ rsdata exch get } 2 [3 2] lfsr 11 //rsecprime exec
5561
lfsr 0 2 getinterval
5662
[5 3] debugIsEqual
5763

5864
%
5965
% Test 4: nd=0 boundary. Empty data -> ECC stays all zero.
6066
%
6167
/lfsr 3 array def
62-
{ rsdata exch get } 0 [1 2 3] 3 lfsr 11 //rsecprime exec
68+
{ rsdata exch get } 0 [3 2 1] lfsr 11 //rsecprime exec
6369
lfsr 0 3 getinterval
6470
[0 0 0] debugIsEqual
6571

@@ -70,25 +76,20 @@ lfsr 0 3 getinterval
7076
/lfsr 2 array def
7177
/rsdata [3] def
7278
% p=11
73-
{ rsdata exch get } 1 [2 3] 2 lfsr 11 //rsecprime exec
79+
{ rsdata exch get } 1 [3 2] lfsr 11 //rsecprime exec
7480
lfsr 0 2 getinterval
7581
[9 6] debugIsEqual
7682
% p=13 with same buffer. Hand-computed:
7783
% fb = 3 mod 13 = 3
7884
% j=0: lfsr[0] = (0 + 3*3) mod 13 = 9
7985
% lfsr[1] = (2*3) mod 13 = 6
80-
{ rsdata exch get } 1 [2 3] 2 lfsr 13 //rsecprime exec
86+
{ rsdata exch get } 1 [3 2] lfsr 13 //rsecprime exec
8187
lfsr 0 2 getinterval
8288
[9 6] debugIsEqual
8389

8490
%
85-
% Test 6: Smoke test with p=929 (PDF417's field). Not hand-computed; captures
86-
% the helper's output as a regression guard for PDF417-sized arithmetic.
87-
%
88-
/rsdata [100 200 300] def
89-
/lfsr 2 array def
90-
{ rsdata exch get } 3 [500 600] 2 lfsr 929 //rsecprime exec
91-
% Expected: verified against direct computation with the helper in current state.
91+
% Test 6: Smoke test with p=929 (PDF417's field), coeffsrev=[600, 500].
92+
% Hand-computed:
9293
% m=0: fb = (100-0) mod 929 = 100
9394
% j=0: S[0] = (0 + 600*100) mod 929 = 60000 mod 929 = 60000 - 64*929 = 544
9495
% S[1] = (500*100) mod 929 = 50000 mod 929 = 50000 - 53*929 = 763
@@ -100,5 +101,9 @@ lfsr 0 2 getinterval
100101
% j=0: S[0] = (794 + 600*628) mod 929 = (794+376800) mod 929 = 377594 mod 929; 929*406 = 377174; 377594-377174 = 420
101102
% S[1] = (500*628) mod 929 = 314000 mod 929; 929*337 = 313073; 314000-313073 = 927
102103
% Expected ECC = [420 927]
104+
%
105+
/rsdata [100 200 300] def
106+
/lfsr 2 array def
107+
{ rsdata exch get } 3 [600 500] lfsr 929 //rsecprime exec
103108
lfsr 0 2 getinterval
104109
[420 927] debugIsEqual

0 commit comments

Comments
 (0)