Exemplo n.º 1
0
void work()
{

/*
 if(output == YES){
   output_rnds();
 }
 */

 if(all == YES){
   run_rgb_timing();
   run_rgb_persist();
   run_rgb_bitdist();
   run_diehard_birthdays();
   run_diehard_operm5();
   run_diehard_rank_32x32();
   run_diehard_rank_6x8();
   run_diehard_bitstream();
   run_diehard_opso();
   run_diehard_oqso();
   run_diehard_dna();
   run_diehard_count_1s_stream();
   run_diehard_count_1s_byte();
   run_diehard_parking_lot();
   run_diehard_2dsphere();
   run_diehard_3dsphere();
   run_diehard_squeeze();
   run_diehard_sums();
   run_diehard_runs();
   run_diehard_craps();
   run_marsaglia_tsang_gcd();
   /* marsaglia_tsang_gorilla(); */
   run_sts_monobit();
   run_sts_runs();
   run_user_template();
   exit(0);
 }

 switch(diehard){
   case DIEHARD_BDAY:
     run_diehard_birthdays();
     exit(0);
     break;
   case DIEHARD_OPERM5:
     run_diehard_operm5();
     exit(0);
     break;
   case DIEHARD_RANK_32x32:
     run_diehard_rank_32x32();
     exit(0);
     break;
   case DIEHARD_RANK_6x8:
     run_diehard_rank_6x8();
     exit(0);
     break;
   case DIEHARD_BITSTREAM:
     run_diehard_bitstream();
     exit(0);
     break;
   case DIEHARD_OPSO:
     run_diehard_opso();
     exit(0);
     break;
   case DIEHARD_OQSO:
     run_diehard_oqso();
     exit(0);
     break;
   case DIEHARD_DNA:
     run_diehard_dna();
     exit(0);
     break;
   case DIEHARD_COUNT_1S_STREAM:
     run_diehard_count_1s_stream();
     exit(0);
     break;
   case DIEHARD_COUNT_1S_BYTE:
     run_diehard_count_1s_byte();
     exit(0);
     break;
   case DIEHARD_PARKING_LOT:
     run_diehard_parking_lot();
     exit(0);
     break;
   case DIEHARD_2DSPHERE:
     run_diehard_2dsphere();
     exit(0);
     break;
   case DIEHARD_3DSPHERE:
     run_diehard_3dsphere();
     exit(0);
     break;
   case DIEHARD_SQUEEZE:
     run_diehard_squeeze();
     exit(0);
     break;
   case DIEHARD_SUMS:
     run_diehard_sums();
     exit(0);
     break;
   case DIEHARD_RUNS:
     run_diehard_runs();
     exit(0);
     break;
   case DIEHARD_CRAPS:
     run_diehard_craps();
     exit(0);
     break;
   case MARSAGLIA_TSANG_GCD:
     run_marsaglia_tsang_gcd();
     exit(0);
     break;
   case MARSAGLIA_TSANG_GORILLA:
     /* marsaglia_tsang_gorilla(); */
     exit(0);
     break;
   default:
     break;
 }

 switch(rgb){
   case RGB_TIMING:
     run_rgb_timing();
     exit(0);
     break;
   case RGB_PERSIST:
     run_rgb_persist();
     exit(0);
     break;
   case RGB_BITDIST:
     run_rgb_bitdist();
     exit(0);
     break;
/*   case RGB_LMN:
     rgb_lmn();
     exit(0);
     break; */
   default:
     break;
 }

 switch(sts){
   case STS_MONOBIT:
     run_sts_monobit();
     exit(0);
     break;
   case STS_RUNS:
     run_sts_runs();
     exit(0);
     break;
   default:
     break;
 }

 switch(user){
   case USER_TEMPLATE:
     run_user_template();
     exit(0);
     break;
   default:
     break;
 }

 list_rngs();

}
Exemplo n.º 2
0
void parsecl(int argc, char **argv)
{

 /*
  * Thus far, dieharder has used getopt() to parse the CL.  However, this
  * isn't as flexible as one might like.  To manage CLI-driven control
  * flags and a few other things, we may need to parse out options the
  * hard way in a future release.  The following variables are pretty much
  * all to support getopt and would change if we change parsing tools or
  * strategies.
  */

 int i,c,errflg=0;
 int itmp;
 int tflag_tmp = 0,dtest_tmp,gen_tmp=17;
 extern char *optarg;
 extern int optind, opterr, optopt;
 char *endptr;

 /*
  * If dieharder is executed by itself on a command line, print out help
  * and then exit.  dieharder cannot be run without options, in other
  * words.
  */
 if(argc == 1){
    Usage();
    exit(1); /* count this as an error */
 }

 while ((c = getopt(argc,argv,"aBc:D:d:Ff:g:hi:k:lL:m:n:oO:p:P:S:s:t:Vv:W:X:x:Y:y:Z:z:")) != EOF){
   switch (c){
     case 'a':
       all = YES;
       break;
     case 'B':
       output_format = 0;
	   fprintf(stderr, "Warning: \"-B\" option is deprecated.  Use \"-O 0\" instead.\n");
       break;
     case 'c':
       /* printf("Setting separator to %c\n",optarg[0]); */
       table_separator = (char) optarg[0];
       break;
     case 'D':
       /*
        * We only override the default table display flags if there is
        * actually an argument to -D.  I hope.
        */
       tflag_tmp =  strtol(optarg,&endptr,10);
       if(*endptr != 0){
         /*
	  * This trick will be useful for parsing both random
	  * number generator names and test names.  Try to convert
	  * the string to a number, but if the conversion fails
	  * then try to lookup a string instead and convert to
	  * the index/number needed.
	  */
	 for(i=0;i<TCNT;i++){
	   if(strncmp(optarg,table_fields[i],TLENGTH) == 0){
             /* printf("Setting table option %s.\n",optarg); */
	     /*
	      * If default is set explicitly, just add tflag_default
	      * to presumed zero tflag.
	      */
	     if(i == 0){
	       tflag = tflag_default;
	     } else {
               tflag_tmp = (int) pow(2,i-1);
	     }
	     break;
	   }
	 }
	 if(i == TCNT) {
	   fprintf(stderr,"Invalid -T %s option.\n",optarg);
	   exit(1);
	 }
       }
       if(tflag_tmp == 0){
         /*
	  * If default is set explicitly, just set tflag to the value of
	  * tflag_default.  This means one can ADD a feature (e.g. prefix)
	  * easily but don't add any twice!  Note that an undocumented
	  * feature is that one can subtract flag values from the default
	  * as well, but numerically only.
	  */
         tflag = tflag_default;
       } else {
         /*
	  * We accumulate tflag from zero.
	  */
         tflag += tflag_tmp;
       }
       break;
     case 'd':
       /*
        * We need to set dtest_num, either from a number or by searching
        * the dh_test_types[] set of tests for a string/name match.  We
	* also have to be sure to leave dtest_num negative if we set
	* dtest_name, since that is the signal to search for the number
	* later.
        */
       dtest_tmp =  strtol(optarg,&endptr,10);
       /* printf("optarg = %s, dtest_tmp = %d endptr = %s\n",optarg,dtest_tmp,endptr); */
       if(strncmp(optarg,endptr,1) == 0){
         strncpy(dtest_name,optarg,128);
       } else {
         dtest_num = dtest_tmp;
       }
       break;
     case 'F':
       show_flags = 1;
       break;
     case 'f':
       strncpy(filename,optarg,128);
       fromfile = 1;
       break;
     /*
      * The dieharder CLI supports a "super" XOR generator.  Multiple
      * instances (up to GVECMAX = 100) of generators and associated seeds
      * on the command line cause this generator to automagically be used.
      * It simply XOR's together the sequential output of all the
      * generators, (uint) word by word, and returns that as a standard
      * uint/udev gsl generator.  The parsing code below thus simply moves
      * the CLI entries into the appropriate global vectors, to be handled
      * by the choose_rng function later.
      */
     case 'g':
       gen_tmp =  strtol(optarg,&endptr,10);
       /* printf("optarg = %s, dtest_tmp = %d endptr = %s\n",optarg,dtest_tmp,endptr); */
       if(strncmp(optarg,endptr,1) == 0){
         strncpy(gnames[gvcount],optarg,128);
       } else {
         gnumbs[gvcount] = gen_tmp;
       }
       gvcount++;
       break;
     case 'h':
       help_flag = YES;
       break;
     case 'i':
       iterations = strtol(optarg,(char **) NULL,10);
       break;
     case 'k':
       ks_test = strtol(optarg,(char **) NULL,10);
       break;
     case 'l':
       list = YES;
       break;
     case 'L':
       overlap = strtol(optarg,(char **) NULL,10);
       break;
     case 'm':
       multiply_p = strtod(optarg,(char **) NULL);
       /*
        * Safety checking on multiply_p is done in std_test, where
        * more information (the number of p-samples) is available.
        */
       break;
     case 'n':
       ntuple = strtol(optarg,(char **) NULL,10);
       break;
     case 'o':
       output_file = 1;
       break;
     case 'O':
       output_format = strtol(optarg,(char **) NULL,10);
       if(output_format > 2){
         fprintf(stderr,"-O %u format not recognized.\n",output_format);
	 fprintf(stderr," Choices: 0 (binary), 1 (uint), 2 (decimal)\n");
       }
       break;
     case 'P':
       Xoff = strtol(optarg,(char **) NULL,10);
       break;
     case 'p':
       psamples = strtol(optarg,(char **) NULL,10);
       break;
     case 'S':
       Seed = strtol(optarg,(char **) NULL,10);
       gseeds[gscount] = gen_tmp;
       gscount++;
       break;
     case 's':
       strategy = strtol(optarg,(char **) NULL,10);
       break;
     case 't':
       itmp = strtol(optarg,(char **) NULL,10);
       /*
        * For a variety of reasons, we can't yet manage a full uint here,
        * nor can we deal with a negative number.  HOWEVER, we DO have
	* a really big ull tsamples, and we really SHOULD do our checking
	* for excessive size elsewhere.
        */
       if(itmp>=0){
         tsamples = itmp;
       } else {
         fprintf(stderr,"Warning!  tsamples cannot be negative = %d\n",itmp);
	 fprintf(stderr,"          using default tsamples value(s).\n");
	 fflush(stderr);
       }
       break;
     case 'V':
       dh_version();
       exit(0);
       break;
     case 'v':
       verbose = strtol(optarg,(char **) NULL,10);
       printf("# Verbose is now %d\n",verbose);
       break;
     case 'W':
       Xweak = strtod(optarg,(char **) NULL);
       break;
     case 'X':
       Xfail = strtod(optarg,(char **) NULL);
       break;
     case 'x':
       x_user = strtod(optarg,(char **) NULL);
       break;
     case 'Y':
       Xtrategy = strtol(optarg,(char **) NULL,10);
       break;
     case 'y':
       y_user = strtod(optarg,(char **) NULL);
       break;
     case 'z':
       z_user = strtod(optarg,(char **) NULL);
       break;
     case '?':
       errflg++;
   }
 }

 /*
  * By the time we get here, all the command line options should have
  * been processed, and we are ready to act on them.  There are a small
  * set of options that we act on right away below, mostly associated with
  * the autodocumenting features of the dieharder CLI (only).
  * Interfaces such as Rdieharder should just ifdef them out, or better
  * yet, not use this routine at all since it should invariably be faster
  * and easier to just set the options directly instead of building a
  * fake command line to hand off to parsecl().
  */

 /*
  * Some option was set incorrectly.
  */
 if(errflg){
   Usage();
   exit(0);
 }

 /*
  * If there are no more arguments it is a legal command.  We execute
  * some of the simpler, autodocumenting ones right here and then
  * immediately exit.
  */
 if(argc-optind == 0){

   /*
    * If a list of tests was requested, print it and exit.
    */
   if(list == YES) {
     list_tests();
     Exit(0);
   }

   /*
    * If a list of all the generators was requested, we give it, but
    * list_rngs() won't work until after the types[] list is built.
    * I could probably do this several ways, but this one is quite
    * simple and works fine.
    */
   if(generator == -1){
     list_rngs();
     Exit(0);
   }

   if(show_flags == 1){
     dh_header();
     fprintf(stdout," Dieharder output control flags.  Set with -D flagname or -D flag\n");
     fprintf(stdout," Multiple flags may be given:\t\tdieharder -a -D test_name -D pvalues.\n");
     fprintf(stdout," Flags names and numbers may be mixed:\tdieharder -a -D 8 -D pvalues.\n");
     fprintf(stdout," Flag\t    Flag Name\n");
     fprintf(stdout,"=======================\n");
     fprintf(stdout,"%5d\t%15s\n",0,table_fields[0]);
     for(i=0;i<TCNT;i++){
       fprintf(stdout,"%5d\t%15s\n",(int)pow(2,i),table_fields[i+1]);
     }
     Exit(0);
   }

   /*
    * If help was requested, call the help routine.  This routine does
    * different things depending on the other flags and variables, so
    * we defer calling it until they are all set.  help() will exit.
    */
   if(help_flag) help();

   /*
    * This one is tricky, but:  If tflag_tmp == 0, it means that either we
    * did not get any -D flags OR that we ONLY got -D 0.  Either way, we
    * have to set tflag to the default if we get here.  The one "odd"
    * behavior this will produce is that -D 8 -D 0 will effectively be -D
    * 0, where -D 0 -D -8 will actually turn OFF feature 8 from the
    * default list.  I don't plan to document this further anywhere but
    * here, but I may use it...;-)
    */
   if(tflag_tmp == 0){
     tflag = tflag_default;
   }

   /*
    * If we get here, it is time to move on and execute dieharder
    */
   return;

 }

 /*
  * Leftover commands on the command line are errors and should trigger
  * the standard Usage message and exit.
  */

 Usage();
 

}