void testmap(void) { pages = calloc(1, PAGES * sizeof(struct page)); if (!pages) exit(100); printf("simple tests\n"); #define MB ((1024*1024)/pagesize) setpol(0, PAGES, MPOL_INTERLEAVE, 3); setpol(0, MB, MPOL_BIND, 1); setpol(MB, MB, MPOL_BIND, 1); setpol(MB, MB, MPOL_DEFAULT, 0); setpol(MB, MB, MPOL_PREFERRED, 2); setpol(MB/2, MB, MPOL_DEFAULT, 0); setpol(MB+MB/2, MB, MPOL_BIND, 2); setpol(MB/2+100, 100, MPOL_PREFERRED, 1); setpol(100, 200, MPOL_PREFERRED, 1); printf("done\n"); for (;;) { unsigned long offset = random() % PAGES; int policy = random() % (MPOL_MAX); unsigned long nodes = random() % 4; long length = random() % (PAGES - offset); /* validate */ switch (policy) { case MPOL_DEFAULT: nodes = 0; break; case MPOL_INTERLEAVE: case MPOL_BIND: if (nodes == 0) continue; break; case MPOL_PREFERRED: if (popcnt(nodes) != 1) continue; break; } setpol(offset, length, policy, nodes); } }
int main(int argc,char **argv){ int i,j,k,l,c; unsigned long a,x,count=1; // unsigned char cc[K]={0}; unsigned char m[K],mm[T]={0}; time_t timer; FILE *fp,*fq; unsigned char g2[7]={1,0,9,0,0,6,4}; // unsigned char s[K]={0}; //{4,12,7,8,11,13}; unsigned char ee[10]={1,2,3,4,5,6,7,8,9,10}; unsigned char zz[T]={86,97,114,105,97,98,108,101,32,80,111,108,121,110,111,109}; // unsigned char zz[T]={10,97,114,105,97,98,108,101,32,80,111,108,121,110,111,109}; int y; OP f,h,r,w; vec v; unsigned char d=0; // unsigned char syn[K]={4,12,7,8,11,13}; // unsigned char g[K+1]={1,0,0,0,1,0,1}; // makegf(M); // makefg(M); // zz[0]=1; //zz[1]=2; //zz[2]=4; w=setpol(g,K+1); printpol(o2v(w)); // exit(1); /* fp=fopen(argv[1],"rb"); fq=fopen(argv[2],"wb"); while((c=fread(zz,1,T,fp))>0){ for(i=0;i<M;i++){ d=trace(w,(unsigned char)i); printf("%d,",d); if(d==0){ printf("%i bad trace 0\n",i); exit(1); } } printf("\n"); //exit(1); */ //エラーの生成 for(i=0;i<T;i++) zz[i]=i+1; det(g); for(i=0;i<K;i++){ for(j=0;j<M;j++) printf("%d,",mat[i][j]); printf("\n"); } //exit(1); // シンドローム多項式の生成 printf("zz="); for(i=0;i<K;i++){ syn[i]=0; for(j=0;j<T;j++){ printf("%u,",zz[j]); syn[i]^=gf[mlt(fg[zz[j]],fg[mat[i][j]])]; } // printf("%d,",syn[i]); } printf("\n"); // exit(1); f=setpol(syn,K); printpol(o2v(f)); // exit(1); r=decode(w,f); for(i=0;i<T;i++){ mm[i]=r.t[i].a; printf("e=%d %d\n",r.t[i].a,r.t[i].n); } /* fwrite(mm,1,T,fq); } */ // fclose(fp); // fclose(fq); // h2g(mat); // exit(1); return 0; }
//多項式からパリティチェック行列を生成する void det(unsigned char g[K+1]){ OP f,h,w; unsigned char cc[K+1]={0},d[2]={0},HH[K][M]={0}; int i,j,a,b; oterm t={0}; vec e; for(i=0;i<K+1;i++) printf("%d ",cc[i]); printf("\n"); for(i=0;i<M;i++){ memcpy(cc,g,K+1); w=setpol(g,K+1); a=trace(w,i); printf("a="); printf("%d ",gf[oinv(a)]); printf("\n"); for(j=0;j<K+1;j++) printf("%d ",cc[j]); printf("\n"); cc[K]^=a; f=setpol(cc,K+1); printpol(o2v(f)); // exit(1); for(j=0;j<K+1;j++) printf("%d ",cc[j]); printf("\n"); // exit(1); //d[0]=i; //d[1]=1; h.t[0].a=i; h.t[0].n=0; h.t[1].a=1; h.t[1].n=1; memset(ss.t,0,DEG); omod(f,h); // printpol(o2v(ss)); // exit(1); b=oinv(a); t.a=gf[b]; t.n=0; // printf("t=%d\n",t.a); // exit(1); w=oterml(ss,t); // printpol(o2v(w)); e=o2v(w); for(j=0;j<K;j++){ printf("%d,",e.x[K-1-j]); HH[j][i]=e.x[K-1-j]; } printf("\n"); // if(i==1) // exit(1); } for(i=0;i<K;i++){ for(j=0;j<M;j++){ mat[i][j]=HH[i][j]; // printf("%d,",mat[i][j]); } printf("\n"); } // exit(1); }