xref: /aosp_15_r20/system/extras/libfec/test/test_rs.c (revision 288bf5226967eb3dac5cce6c939ccc2a7f2b4fe5)
1*288bf522SAndroid Build Coastguard Worker /*
2*288bf522SAndroid Build Coastguard Worker  * Copyright (C) 2015 The Android Open Source Project
3*288bf522SAndroid Build Coastguard Worker  *
4*288bf522SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*288bf522SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*288bf522SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*288bf522SAndroid Build Coastguard Worker  *
8*288bf522SAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*288bf522SAndroid Build Coastguard Worker  *
10*288bf522SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*288bf522SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*288bf522SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*288bf522SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*288bf522SAndroid Build Coastguard Worker  * limitations under the License.
15*288bf522SAndroid Build Coastguard Worker  */
16*288bf522SAndroid Build Coastguard Worker 
17*288bf522SAndroid Build Coastguard Worker #include <inttypes.h>
18*288bf522SAndroid Build Coastguard Worker #include <errno.h>
19*288bf522SAndroid Build Coastguard Worker #include <sys/types.h>
20*288bf522SAndroid Build Coastguard Worker #include <sys/stat.h>
21*288bf522SAndroid Build Coastguard Worker #include <fcntl.h>
22*288bf522SAndroid Build Coastguard Worker #include <stdio.h>
23*288bf522SAndroid Build Coastguard Worker #include <stdlib.h>
24*288bf522SAndroid Build Coastguard Worker #include <unistd.h>
25*288bf522SAndroid Build Coastguard Worker #include <string.h>
26*288bf522SAndroid Build Coastguard Worker #include <fec.h>
27*288bf522SAndroid Build Coastguard Worker 
28*288bf522SAndroid Build Coastguard Worker #define FEC_RSM 255
29*288bf522SAndroid Build Coastguard Worker #define FEC_ROOTS 16
30*288bf522SAndroid Build Coastguard Worker #define FEC_RSN (FEC_RSM - FEC_ROOTS)
31*288bf522SAndroid Build Coastguard Worker #define FEC_PARAMS(roots) \
32*288bf522SAndroid Build Coastguard Worker     8, 0x11d, 0, 1, (roots), 0
33*288bf522SAndroid Build Coastguard Worker 
main()34*288bf522SAndroid Build Coastguard Worker int main()
35*288bf522SAndroid Build Coastguard Worker {
36*288bf522SAndroid Build Coastguard Worker     uint8_t data[FEC_RSM];
37*288bf522SAndroid Build Coastguard Worker     uint8_t dupl[FEC_RSM];
38*288bf522SAndroid Build Coastguard Worker     uint8_t corr[FEC_RSM];
39*288bf522SAndroid Build Coastguard Worker     int i, rc, neras, errors;
40*288bf522SAndroid Build Coastguard Worker     int erasures[FEC_RSM];
41*288bf522SAndroid Build Coastguard Worker     void *rs;
42*288bf522SAndroid Build Coastguard Worker 
43*288bf522SAndroid Build Coastguard Worker     memset(data, 0x00, sizeof(data));
44*288bf522SAndroid Build Coastguard Worker     memset(corr, 0x00, sizeof(corr));
45*288bf522SAndroid Build Coastguard Worker 
46*288bf522SAndroid Build Coastguard Worker     rs = init_rs_char(FEC_PARAMS(FEC_ROOTS));
47*288bf522SAndroid Build Coastguard Worker 
48*288bf522SAndroid Build Coastguard Worker     if (!rs) {
49*288bf522SAndroid Build Coastguard Worker         perror("init_rs_char");
50*288bf522SAndroid Build Coastguard Worker         exit(1);
51*288bf522SAndroid Build Coastguard Worker     }
52*288bf522SAndroid Build Coastguard Worker 
53*288bf522SAndroid Build Coastguard Worker     encode_rs_char(rs, data, &corr[FEC_RSN]);
54*288bf522SAndroid Build Coastguard Worker 
55*288bf522SAndroid Build Coastguard Worker     for (neras = 1; neras <= FEC_ROOTS; ++neras) {
56*288bf522SAndroid Build Coastguard Worker         printf("%d errors\n", neras);
57*288bf522SAndroid Build Coastguard Worker 
58*288bf522SAndroid Build Coastguard Worker         for (i = 0; i < neras; ++i) {
59*288bf522SAndroid Build Coastguard Worker             corr[i] = 0xFD;
60*288bf522SAndroid Build Coastguard Worker             erasures[i] = i;
61*288bf522SAndroid Build Coastguard Worker         }
62*288bf522SAndroid Build Coastguard Worker 
63*288bf522SAndroid Build Coastguard Worker         memcpy(dupl, corr, sizeof(corr));
64*288bf522SAndroid Build Coastguard Worker 
65*288bf522SAndroid Build Coastguard Worker         rc = decode_rs_char(rs, corr, NULL, 0);
66*288bf522SAndroid Build Coastguard Worker 
67*288bf522SAndroid Build Coastguard Worker         printf("\tno erasures: %d\n", rc);
68*288bf522SAndroid Build Coastguard Worker 
69*288bf522SAndroid Build Coastguard Worker         errors = 0;
70*288bf522SAndroid Build Coastguard Worker         for (i = 0; i < FEC_RSN; ++i) {
71*288bf522SAndroid Build Coastguard Worker             if (corr[i] != 0x00) {
72*288bf522SAndroid Build Coastguard Worker                 printf("\t\terror at %d (%02x)\n", i, corr[i]);
73*288bf522SAndroid Build Coastguard Worker                 ++errors;
74*288bf522SAndroid Build Coastguard Worker             }
75*288bf522SAndroid Build Coastguard Worker         }
76*288bf522SAndroid Build Coastguard Worker         printf("\t\t%d errors in output\n", errors);
77*288bf522SAndroid Build Coastguard Worker 
78*288bf522SAndroid Build Coastguard Worker         rc = decode_rs_char(rs, dupl, erasures, neras);
79*288bf522SAndroid Build Coastguard Worker 
80*288bf522SAndroid Build Coastguard Worker         printf("\terasures: %d\n", rc);
81*288bf522SAndroid Build Coastguard Worker 
82*288bf522SAndroid Build Coastguard Worker         errors = 0;
83*288bf522SAndroid Build Coastguard Worker         for (i = 0; i < FEC_RSN; ++i) {
84*288bf522SAndroid Build Coastguard Worker             if (dupl[i] != 0x00) {
85*288bf522SAndroid Build Coastguard Worker                 printf("\t\terror at %d (%02x)\n", i, dupl[i]);
86*288bf522SAndroid Build Coastguard Worker                 ++errors;
87*288bf522SAndroid Build Coastguard Worker             }
88*288bf522SAndroid Build Coastguard Worker         }
89*288bf522SAndroid Build Coastguard Worker         printf("\t\t%d errors in output\n", errors);
90*288bf522SAndroid Build Coastguard Worker     }
91*288bf522SAndroid Build Coastguard Worker 
92*288bf522SAndroid Build Coastguard Worker     exit(0);
93*288bf522SAndroid Build Coastguard Worker }
94