/* Test the Reed-Solomon codecs
* for various block sizes and with random data and random error patterns
*
* Copyright 2002 Phil Karn, KA9Q
* May be used under the terms of the GNU General Public License (GPL)
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "rs.h"
int exercise_char(void *,int);
int exercise_int(void *,int);
int exercise_8(int);
int exercise_ccsds(int);
struct {
int symsize;
int genpoly;
int fcs;
int prim;
int nroots;
int ntrials;
} Tab[] = {
{2, 0x7, 1, 1, 1, 10 },
{3, 0xb, 1, 1, 2, 10 },
{4, 0x13, 1, 1, 4, 10 },
{5, 0x25, 1, 1, 6, 10 },
{6, 0x43, 1, 1, 8, 10 },
{7, 0x89, 1, 1, 10, 10 },
{8, 0x11d, 1, 1, 32, 10 },
{8, 0x187, 112,11, 32, 10 }, /* Duplicates CCSDS codec */
{9, 0x211, 1, 1, 32, 10 },
{10,0x409, 1, 1, 32, 10 },
{11,0x805, 1, 1, 32, 10 },
{12,0x1053, 1, 1, 32, 5 },
{13,0x201b, 1, 1, 32, 2 },
{14,0x4443, 1, 1, 32, 1 },
{15,0x8003, 1, 1, 32, 1 },
{16,0x1100b, 1, 1, 32, 1 },
{0, 0, 0, 0, 0},
};
int main(){
void *handle;
int errs,terrs;
int i;
terrs = 0;
srandom(time(NULL));
printf("Testing fixed (255,223) RS codec...");
fflush(stdout);
errs = exercise_8(10);
terrs += errs;
if(errs == 0){
printf("OK\n");
}
printf("Testing CCSDS standard (255,223) RS codec...");
fflush(stdout);
errs = exercise_ccsds(10);
terrs += errs;
if(errs == 0){
printf("OK\n");
}
for(i=0;Tab[i].symsize != 0;i++){
int nn,kk;
nn = (1<<Tab[i].symsize) - 1;
kk = nn - Tab[i].nroots;
printf("Testing (%d,%d) RS codec...",nn,kk);
fflush(stdout);
if(Tab[i].symsize <= 8){
if((handle = init_rs_char(Tab[i].symsize,Tab[i].genpoly,Tab[i].fcs,Tab[i].prim,Tab[i].nroots,0)) == NULL){
printf("init_rs_char failed!\n");
continue;
}
errs = exercise_char(handle,Tab[i].ntrials);
} else {
if((handle = init_rs_int(Tab[i].symsize,Tab[i].genpoly,Tab[i].fcs,Tab[i].prim,Tab[i].nroots,0)) == NULL){
printf("init_rs_int failed!\n");
continue;
}
errs = exercise_int(handle,Tab[i].ntrials);
}
terrs += errs;
if(errs == 0){
printf("OK\n");
}
free_rs_char(handle);
}
if(terrs == 0)
printf("All codec tests passed!\n");
exit(0);
}
syntax highlighted by Code2HTML, v. 0.9.1