[MN-dev] [mndiff]: r132 - trunk/noe/test.c

michael subversion at mplayerhq.hu
Sun Feb 1 14:26:10 CET 2009


Author: michael
Date: Sun Feb  1 14:26:10 2009
New Revision: 132

Log:
Replace rand() by marsaglias KISS99 PRNG, should fix portability of
the gfft checksums between OSs.

Modified:
   trunk/noe/test.c

Modified: trunk/noe/test.c
==============================================================================
--- trunk/noe/test.c	Sun Feb  1 12:44:49 2009	(r131)
+++ trunk/noe/test.c	Sun Feb  1 14:26:10 2009	(r132)
@@ -25,35 +25,37 @@
 
 #include "noe_internal.h"
 #include "galois_internal.h"
+#include "random_internal.h"
 #include "gfft.h"
 #include "rs.h"
 #include "bytestream.h"
 
 static const unsigned int gfftChecksums[20]={
-0xFCB3E495,
-0x5704AC39,
-0x07F19DC4,
-0xE8E3A16F,
-0xD3FDE16D,
-0xB2F03FC5,
-0xB42E9BB6,
-0x1281C15E,
-0x4F1C1BA2,
-0x0EA4927A,
-0x2E0EBEC7,
-0x2D80F238,
-0x6D40B8AB,
-0x3EF87629,
-0xD1649F79,
-0x24A3D9E4,
-0x4EDC2FE4,
-0xF24C2F4F,
-0x1BFE26C9,
+0xF379D8D9,
+0xCB7A8F92,
+0xE7401691,
+0x12340E66,
+0x8CE989B1,
+0x058D8DF6,
+0xB81094BA,
+0xE7CF85E8,
+0x80A5F7C1,
+0x11FFDAF8,
+0x6972A0A4,
+0x78CE49AC,
+0x95F6132F,
+0xE74A6870,
+0x860EB18B,
+0x7A5A1B63,
+0xFE3A9EAC,
+0xD6DC97A1,
+0x27822BAE,
 };
 
 int main(){
     int i, j, decimate, codeBits;
     GFF4Element bp=1;
+    KISSState rnd;
 
     EXT(init)();
 
@@ -85,7 +87,7 @@ int main(){
         if(a!=b) printf("%X %X %X %X\n", i, reduce(i), i*0xFF01, reduce(i)*0xFF01);
     }
 #endif
-    srand (31415);
+    init_random(&rnd, 31415);
   if(!M){
     printf("Testing GFFT");
     for(i=1; i<20; i++){
@@ -95,7 +97,7 @@ int main(){
         int acc=0;
         
         for(j=0; j<n; j++)
-            code[j]= rand() % SIZE;
+            code[j]= get_random(&rnd) % SIZE;
 
         EXT(gfft)(syn, code, SHIFT);
         
@@ -139,7 +141,7 @@ int main(){
 
         data[0]= k-1;
         for(j=0; j<k; j++)
-            data[j+1]= rand() & MASK;
+            data[j+1]= get_random(&rnd) & MASK;
         
         EXT(getRsGenerator)(gen, 1, i);
         EXT(prodPoly)(code, gen, data);
@@ -166,7 +168,7 @@ int main(){
         GFF4Element data[k];
         GFF4Element code[n];
         int pass=5;
-        int tLoc= rand() % k;
+        int tLoc= get_random(&rnd) % k;
         GFF4Element parityLocator[i+2];
         GFF4Element tPoly[i];
 
@@ -175,7 +177,7 @@ int main(){
 
         for(pass=5; pass; pass--){
             for(j=0; j<k; j++)
-                data[j]= rand() & MASK;
+                data[j]= get_random(&rnd) & MASK;
             data[tLoc] %= k;
 
             memcpy(code, data, k*sizeof(GFF4Element));
@@ -234,7 +236,7 @@ STOP_TIMER}
         for(pass=5; pass; pass--){
             int erasedCount, errorCount;
             for(j=0; j<k; j++)
-                data[j]= rand() & MASK;
+                data[j]= get_random(&rnd) & MASK;
 
             memcpy(code, data, n*sizeof(GFF4Element));
             erasureLocator[0]= 0;
@@ -242,12 +244,12 @@ STOP_TIMER}
             EXT(rsEncode)(code, parityLocator, i, codeBits);
             
             erasedCount=0;
-            if(rand()&0x40){
-                erasedCount= (rand()%i)+1;
+            if(get_random(&rnd)&0x40){
+                erasedCount= (get_random(&rnd)%i)+1;
                 for(j=0; j<erasedCount; j++){
                     int e=-1;
                     
-                    while(e==-1 || code[e]==MINUS1) e=rand()%n;
+                    while(e==-1 || code[e]==MINUS1) e=get_random(&rnd)%n;
 
                     erased[j]= e<<decimate;
                     code[ e ]= MINUS1;
@@ -255,17 +257,17 @@ STOP_TIMER}
                 for(j=0; j<erasedCount; j++){
                     int e= erased[j]>>decimate;
 
-                    code[ e ]= rand()&MASK;
+                    code[ e ]= get_random(&rnd)&MASK;
                 }
             }
             errorCount=0;
-            if(erasedCount==0 || (rand()&0x40)){
+            if(erasedCount==0 || (get_random(&rnd)&0x40)){
                 int max= (i - erasedCount)/2;
                 if(max){
-                    errorCount= (rand() % max)+1;
+                    errorCount= (get_random(&rnd) % max)+1;
                     for(j=0; j<errorCount; j++){
-                        int pos= rand()%n;
-                        code[pos] = rand()&MASK;
+                        int pos= get_random(&rnd)%n;
+                        code[pos] = get_random(&rnd)&MASK;
 //                      printf("P%6d\n", pos);
                     }
                 }
@@ -320,8 +322,8 @@ STOP_TIMER}
         
         initByteStream(&bs, buffer, 20000);
         for(i=0; i<2000; i++){
-            int len= rand()%32;
-            val[i] = rand() % (1<<len);
+            int len= get_random(&rnd)%32;
+            val[i] = get_random(&rnd) % (1<<len);
             put_v(&bs, val[i]);
             if(i%100 == 0) printf(".");
         }



More information about the Mndiff-dev mailing list