Changeset 02c9d9 in git for factory/ftest
- Timestamp:
- Oct 2, 1997, 1:09:20 PM (27 years ago)
- Branches:
- (u'spielwiese', '6e5adcba05493683b94648c659a729c189812c77')
- Children:
- d37f27288dce392575ad1129adb7540432ce098f
- Parents:
- a09c41577667052c82234ad7730f0c65ddeefda2
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
factory/ftest/ftest_util.cc
ra09c415 r02c9d9 1 1 /* emacs edit mode for this file is -*- C++ -*- */ 2 /* $Id: ftest_util.cc,v 1. 6 1997-10-01 12:24:44schmidt Exp $ */2 /* $Id: ftest_util.cc,v 1.7 1997-10-02 11:09:20 schmidt Exp $ */ 3 3 4 4 //{{{ docu … … 14 14 #include <string.h> 15 15 #include <ctype.h> 16 #include <errno.h> 17 #include <iostream.h> 18 16 19 #include <GetOpt.h> 17 20 … … 57 60 { 58 61 int seed; 62 bool seedSet; 59 63 int characteristic; 60 64 int extDegree; … … 106 110 // variable is quite spurious, but I keep it for future use. 107 111 // ftestSwitchNames: symbolic names of switches 108 // 112 // ftestSeedFile: file where to read/to which to print the random 113 // generator seed. Set by ftestParseRandom(), read by 114 // ftestWriteSeed(). 109 115 // 110 116 //}}} … … 118 124 const char * ftestUsage = 0; 119 125 120 ftestEnvT ftestEnv;126 static ftestEnvT ftestEnv; 121 127 122 128 const char * ftestSwitchNames[] = … … 131 137 "USE_SPARSEMOD" 132 138 }; 139 140 static char * ftestSeedFile = 0; 133 141 //}}} 134 142 … … 202 210 //}}} 203 211 204 //{{{ static const char * ftestParse Seed( const char * tokenString )205 //{{{ docu 206 // 207 // ftestParse Seed() - parse seedspecification and set factory's212 //{{{ static const char * ftestParseRandom ( const char * tokenString ) 213 //{{{ docu 214 // 215 // ftestParseRandom() - parse random specification and set factory's 208 216 // random generator seed. 209 217 // … … 213 221 //}}} 214 222 static const char * 215 ftestParseSeed ( const char * tokenString ) 216 { 217 const char * tokenCursor; 218 219 tokenString++; // strtol will skip blancs 220 int seed = (int)strtol( tokenString, (char **)&tokenCursor, 0 ); 221 if ( tokenCursor == tokenString ) 222 ftestError( EnvSyntaxError, 223 "number expected in seed specification `%s'\n", 224 tokenString ); 223 ftestParseRandom ( const char * tokenString ) 224 { 225 int seed = 0; 226 bool seedSet = false; 227 228 do { 229 const char * tokenCursor; 230 231 // we skip either `@' or `,' 232 tokenString = ftestSkipBlancs( tokenString+1 ); 233 if ( isdigit( *tokenString ) ) { 234 // read seed specification from command line 235 seed = (int)strtol( tokenString, (char **)&tokenCursor, 0 ); 236 if ( tokenCursor == tokenString ) 237 ftestError( EnvSyntaxError, 238 "bad seed specification `%s'\n", 239 tokenString ); 240 seedSet = true; 241 } else if ( isalpha( *tokenString ) ) { 242 // read seed specification from file 243 tokenCursor = strpbrk( tokenString, ",/" ); 244 if ( ! tokenCursor ) 245 tokenCursor = strchr( tokenString, '\0' ); 246 247 // store file name 248 int nameLen = tokenCursor-tokenString; 249 ftestSeedFile = new char[nameLen+1]; 250 strncpy( ftestSeedFile, tokenString, nameLen ); 251 ftestSeedFile[nameLen] = '\0'; 252 253 // open file, read seed, close file 254 FILE * seedFile = fopen( ftestSeedFile, "r" ); 255 if ( seedFile ) { 256 // if file exists, read seed 257 if ( fscanf( seedFile, "%d", &seed ) != 1 ) 258 ftestError( FileError, 259 "garbled seed in seed file `%s'\n", ftestSeedFile ); 260 fclose( seedFile ); 261 262 seedSet = true; 263 } else 264 if ( errno != ENOENT ) 265 ftestError( FileError, 266 "failed to open `%s' for reading: %s\n", ftestSeedFile, 267 strerror( errno ) ); 268 else if ( ! (ftestEnv.seedSet || seedSet) ) { 269 // if file does not exist, set seed to some 270 // default value if it has not been set before 271 seed = 0; 272 seedSet = true; 273 } 274 } else 275 ftestError( EnvSyntaxError, 276 "bad random specification `%s'\n", tokenString ); 277 278 tokenString = ftestSkipBlancs( tokenCursor ); 279 } while ( *tokenString == ',' ); 225 280 226 281 // set seed 227 ftestEnv.seed = seed; 228 factoryseed( seed ); 229 230 return tokenCursor; 282 ftestEnv.seedSet = seedSet; 283 if ( seedSet ) { 284 ftestEnv.seed = seed; 285 factoryseed( seed ); 286 } 287 288 return tokenString; 231 289 } 232 290 //}}} … … 304 362 bool switchSetting; 305 363 306 while ( *tokenString == '+' || *tokenString == '-' ) {364 while ( *tokenString == '+' || *tokenString == '-' ) { 307 365 const char * tokenCursor; 308 366 if ( *tokenString == '+' ) … … 331 389 if ( switchSetting ) 332 390 On( switchNumber ); 391 else 392 Off( switchNumber ); 333 393 334 394 tokenString = ftestSkipBlancs( tokenCursor ); … … 382 442 mipoString[mipoLen] = '\0'; 383 443 mipo = ftestGetCanonicalForm( mipoString ); 444 delete [] mipoString; 384 445 385 446 tokenString = ftestSkipBlancs( tokenCursor ); 386 delete [] mipoString;387 447 } 388 389 448 if ( *tokenString == ',' ) 390 449 // skip optional separator … … 412 471 } 413 472 414 if ( *tokenString && *tokenString != '/' )415 ftestError( EnvSyntaxError,416 "extra characters in variable specification `%s'\n",417 tokenString );418 419 473 return tokenString; 420 474 } … … 428 482 // 429 483 // The results are also stored in global variable `ftestEnv'. 430 // Returns pointer behind last parsed character in tokenString. 484 // 485 // The parser is quite simple. As long as `tokenString' starts 486 // with a `/', he looks up the next character to determine which 487 // token follows and parses it. The functions used to do this 488 // should leave `tokenString' behind the last character it 489 // succeeded to read. 431 490 // 432 491 //}}} … … 434 493 ftestParseEnv ( const char * tokenString ) 435 494 { 495 // read list of environment specifications 436 496 tokenString = ftestSkipBlancs( tokenString ); 437 497 while ( *tokenString == '/' ) { 438 439 498 tokenString = ftestSkipBlancs( tokenString+1 ); 440 499 441 500 if ( *tokenString == '@' ) { 442 // seedspecification443 tokenString = ftestParse Seed( tokenString );501 // random specification 502 tokenString = ftestParseRandom( tokenString ); 444 503 } else if ( isdigit( *tokenString ) ) { 445 504 // specification of characteristics … … 458 517 if ( *tokenString ) 459 518 ftestError( EnvSyntaxError, 460 "extra characters in environment specification `%s'\n",519 "extra characters in environment specification list `%s'\n", 461 520 tokenString ); 462 521 } … … 559 618 case EnvSyntaxError: 560 619 case CanFormSpecError: 620 case FileError: 561 621 // ftestUsage(); 562 622 break; … … 710 770 // initialize environment 711 771 ftestEnv.seed = 0; 772 ftestEnv.seedSet = false; 712 773 ftestEnv.characteristic = 0; 713 774 ftestEnv.extDegree = 0; … … 720 781 ftestParseEnv( envString ); 721 782 delete [] envString; 783 } 784 //}}} 785 786 //{{{ void ftestWriteSeed () 787 //{{{ docu 788 // 789 // ftestWriteSeed() - write current seed to seed file. 790 // 791 //}}} 792 void 793 ftestWriteSeed () 794 { 795 if ( ftestSeedFile ) { 796 FILE * seedFile = fopen( ftestSeedFile, "w" ); 797 if ( ! seedFile ) 798 ftestError( FileError, 799 "failed to open `%s' for writing: %s\n", ftestSeedFile, 800 strerror( errno ) ); 801 fprintf( seedFile, "%d\n", factoryrandom() ); 802 fclose( seedFile ); 803 } 722 804 } 723 805 //}}} … … 806 888 printf( "\n" ); 807 889 808 // factory version and other information890 // number of repetitions 809 891 ftestPrint( "circle: %d\n", "%d\n", ftestCircle ); 810 ftestPrint( "seed : %d\n", "%d\n", ftestEnv.seed ); 811 892 893 // random generator seed 894 if ( ftestEnv.seedSet ) 895 ftestPrint( "seed : %d\n", "%d\n", ftestEnv.seed ); 896 else 897 ftestPrint( "seed : <not set>\n", "<not set>\n" ); 898 899 // factory version 812 900 const char * version; 813 901 version = strchr( factoryVersion, '=' )+2; … … 850 938 //}}} 851 939 852 //{{{ static void ftestSet Seed()853 //{{{ docu 854 // 855 // ftestSet Seed() - set random generator seed from `ftestEnv'.940 //{{{ static void ftestSetRandom () 941 //{{{ docu 942 // 943 // ftestSetRandom() - set random generator seed from `ftestEnv'. 856 944 // 857 945 // This function is quite spurious, but I keep it for future … … 860 948 //}}} 861 949 static void 862 ftestSetSeed () 863 { 864 factoryseed( ftestEnv.seed ); 950 ftestSetRandom () 951 { 952 if ( ftestEnv.seedSet ) 953 factoryseed( ftestEnv.seed ); 865 954 } 866 955 //}}} … … 957 1046 ftestSetEnv () 958 1047 { 959 ftestSet Seed();1048 ftestSetRandom(); 960 1049 ftestSetSwitches(); 961 1050 ftestSetChar();
Note: See TracChangeset
for help on using the changeset viewer.