00001
00002
00003
00004
00005
00006
00007
00008
00009 #include <stdio.h>
00010 #include <stdlib.h>
00011 #include "randy.h"
00012
00013
00014 randy RND ;
00015
00016
00017
00018
00019 void print_basic_data ( void ){
00020 printf( "RAND_MAX = %d \n", RAND_MAX ) ;
00021 }
00022
00023
00024
00025
00026 void test_double ( void )
00027 {
00028 const double eps = NearZero ;
00029 const long max_iter = 4 ;
00030 long i ;
00031
00032 for ( i=0 ; i<max_iter ; i++ )
00033 {
00034 if ( RND.give_double() < eps )
00035 {
00036 printf ( " < 0 ; 1 > : Zero was reached. \t\t OK. \n" ) ;
00037 break ;
00038 }
00039 }
00040 if ( i==max_iter ) printf ( " < 0 ; 1 > : Zero was not reached. \t\t BAD!!!!!!\n" ) ;
00041 for ( i=0 ; i<max_iter ; i++ )
00042 {
00043 if ( (1.0-RND.give_double()) < eps )
00044 {
00045 printf ( " < 0 ; 1 > : One was reached. \t\t OK. \n" ) ;
00046 break ;
00047 }
00048 }
00049 if ( i==max_iter ) printf ( " < 0 ; 1 > : One was not reached. \t\t BAD!!!!!!\n" ) ;
00050 for ( i=0 ; i<max_iter ; i++ )
00051 {
00052 if ( RND.give_double(0L,1L) < eps )
00053 {
00054 printf ( " < 0 ; 1 ) : Zero was reached. \t\t OK. \n" ) ;
00055 break ;
00056 }
00057 }
00058 if ( i==max_iter ) printf ( " < 0 ; 1 ) : Zero was not reached. \t\t BAD!!!!!!\n" ) ;
00059 for ( i=0 ; i<max_iter ; i++ )
00060 {
00061 if ( (1.0-RND.give_double(0L,1L)) < eps )
00062 {
00063 printf ( " < 0 ; 1 ) : One was reached. \t\t BAD!!!!!!\n" ) ;
00064 break ;
00065 }
00066 }
00067 if ( i==max_iter ) printf ( " < 0 ; 1 ) : One was not reached. \t\t OK. \n" ) ;
00068 for ( i=0 ; i<max_iter ; i++ )
00069 {
00070 if ( RND.give_double(1L,0L) < eps )
00071 {
00072 printf ( " ( 0 ; 1 > : Zero was reached. \t\t BAD!!!!!!\n" ) ;
00073 break ;
00074 }
00075 }
00076 if ( i==max_iter ) printf ( " ( 0 ; 1 > : Zero was not reached. \t\t OK. \n" ) ;
00077 for ( i=0 ; i<max_iter ; i++ )
00078 {
00079 if ( (1.0-RND.give_double(1L,0L)) < eps )
00080 {
00081 printf ( " ( 0 ; 1 > : One was reached. \t\t OK.\n" ) ;
00082 break ;
00083 }
00084 }
00085 if ( i==max_iter ) printf ( " ( 0 ; 1 > : One was not reached. \t\t BAD!!!!!!\n" ) ;
00086 for ( i=0 ; i<max_iter ; i++ )
00087 {
00088 if ( RND.give_double(1L,1L) < eps )
00089 {
00090 printf ( " ( 0 ; 1 ) : Zero was reached. \t\t BAD!!!!!!\n" ) ;
00091 break ;
00092 }
00093 }
00094 if ( i==max_iter ) printf ( " ( 0 ; 1 ) : Zero was not reached. \t\t OK. \n" ) ;
00095 for ( i=0 ; i<max_iter ; i++ )
00096 {
00097 if ( (1.0-RND.give_double(1L,1L)) < eps )
00098 {
00099 printf ( " ( 0 ; 1 ) : One was reached. \t\t BAD!!!!!!\n" ) ;
00100 break ;
00101 }
00102 }
00103 if ( i==max_iter ) printf ( " ( 0 ; 1 ) : One was not reached. \t\t OK. \n" ) ;
00104 }
00105
00106
00107
00108
00109 void test_double_from ( void )
00110 {
00111 const double LOW=0. ;
00112 const double HIGH=1. ;
00113
00114 const double eps = NearZero ;
00115 const long max_iter = 4 ;
00116 long i ;
00117
00118 for ( i=0 ; i<max_iter ; i++ )
00119 {
00120 if ( RND.give_double( LOW, HIGH, 0L, 0L ) - LOW < eps )
00121 {
00122 printf ( " < %10.5f ; %10.5f > : %10.5f was reached. \t\t OK. \n",
00123 LOW, HIGH, LOW ) ;
00124 break ;
00125 }
00126 }
00127 if ( i==max_iter ) printf ( " < %10.5f ; %10.5f > : %10.5f was not reached. \t\t BAD!!!!!!\n",
00128 LOW, HIGH, LOW ) ;
00129 for ( i=0 ; i<max_iter ; i++ )
00130 {
00131 if ( (HIGH-RND.give_double( LOW, HIGH, 0L, 0L )) < eps )
00132 {
00133 printf ( " < %10.5f ; %10.5f > : %10.5f was reached. \t\t OK. \n",
00134 LOW, HIGH, HIGH ) ;
00135 break ;
00136 }
00137 }
00138 if ( i==max_iter ) printf ( " < %10.5f ; %10.5f > : %10.5f was not reached.\t\t BAD!!!!!!\n",
00139 LOW, HIGH, HIGH) ;
00140 for ( i=0 ; i<max_iter ; i++ )
00141 {
00142 if ( RND.give_double( LOW, HIGH, 0L,1L)- LOW < eps )
00143 {
00144 printf ( " < %10.5f ; %10.5f ) : %10.5f was reached. \t\t OK. \n",
00145 LOW, HIGH, LOW ) ;
00146 break ;
00147 }
00148 }
00149 if ( i==max_iter ) printf ( " < %10.5f ; %10.5f ) : %10.5f was not reached. \t\t BAD!!!!!!\n",
00150 LOW, HIGH, LOW ) ;
00151 for ( i=0 ; i<max_iter ; i++ )
00152 {
00153 if ( (HIGH-RND.give_double( LOW, HIGH, 0L,1L)) < eps )
00154 {
00155 printf ( " < %10.5f ; %10.5f ) : %10.5f was reached. \t\t BAD!!!!!!\n",
00156 LOW, HIGH, HIGH ) ;
00157 break ;
00158 }
00159 }
00160 if ( i==max_iter ) printf ( " < %10.5f ; %10.5f ) : %10.5f was not reached.\t\t OK. \n",
00161 LOW, HIGH, HIGH ) ;
00162 for ( i=0 ; i<max_iter ; i++ )
00163 {
00164 if ( RND.give_double( LOW, HIGH, 1L,0L)- LOW < eps )
00165 {
00166 printf ( " ( %10.5f ; %10.5f > : %10.5f was reached. \t\t BAD!!!!!!\n",
00167 LOW, HIGH, LOW ) ;
00168 break ;
00169 }
00170 }
00171 if ( i==max_iter ) printf ( " ( %10.5f ; %10.5f > : %10.5f was not reached. \t\t OK. \n",
00172 LOW, HIGH, LOW ) ;
00173 for ( i=0 ; i<max_iter ; i++ )
00174 {
00175 if ( (HIGH-RND.give_double( LOW, HIGH, 1L,0L)) < eps )
00176 {
00177 printf ( " ( %10.5f ; %10.5f > : %10.5f was reached. \t\t OK.\n",
00178 LOW, HIGH, HIGH ) ;
00179 break ;
00180 }
00181 }
00182 if ( i==max_iter ) printf ( " ( %10.5f ; %10.5f > : %10.5f was not reached.\t\t BAD!!!!!!\n",
00183 LOW, HIGH, HIGH ) ;
00184 for ( i=0 ; i<max_iter ; i++ )
00185 {
00186 if ( RND.give_double( LOW, HIGH, 1L,1L) - LOW < eps )
00187 {
00188 printf ( " ( %10.5f ; %10.5f ) : %10.5f was reached. \t\t BAD!!!!!!\n",
00189 LOW, HIGH, LOW ) ;
00190 break ;
00191 }
00192 }
00193 if ( i==max_iter ) printf ( " ( %10.5f ; %10.5f ) : %10.5f was not reached. \t\t OK. \n",
00194 LOW, HIGH, LOW ) ;
00195 for ( i=0 ; i<max_iter ; i++ )
00196 {
00197 if ( (HIGH-RND.give_double( LOW, HIGH, 1L,1L)) < eps )
00198 {
00199 printf ( " ( %10.5f ; %10.5f ) : %10.5f was reached. \t\t BAD!!!!!!\n",
00200 LOW, HIGH, HIGH ) ;
00201 break ;
00202 }
00203 }
00204 if ( i==max_iter ) printf ( " ( %10.5f ; %10.5f ) : %10.5f was not reached.\t\t OK. \n",
00205 LOW, HIGH, HIGH ) ;
00206 }
00207
00208 void test_long ( void )
00209 {
00210 const long NUMBER=5 ;
00211
00212 const long max_iter = 4 ;
00213 long i ;
00214
00215
00216 for ( i=0 ; i<max_iter ; i++ )
00217 {
00218 if ( RND.give_long( NUMBER ) == 0 )
00219 {
00220 printf ( " 0 was reached. \t\t OK.\n" ) ;
00221 break ;
00222 }
00223 }
00224 if ( i==max_iter ) printf ( " 0 was not reached. \t\t BAD!!!!\n" ) ;
00225 for ( i=0 ; i<max_iter ; i++ )
00226 {
00227 if ( RND.give_long( NUMBER ) == NUMBER )
00228 {
00229 printf ( " %4ld was reached. \t\t BAD!!!!\n", NUMBER ) ;
00230 break ;
00231 }
00232 }
00233 if ( i==max_iter ) printf ( " %4ld was not reached. \t\t OK.\n", NUMBER ) ;
00234 }
00235
00236 void test_long_from ( void )
00237 {
00238 const long LOW=2 ;
00239 const long HIGH=4 ;
00240
00241
00242 const long max_iter = 4 ;
00243 long i ;
00244
00245 for ( i=0 ; i<max_iter ; i++ )
00246 {
00247 if ( RND.give_long( LOW, HIGH ) - LOW == 0 )
00248 {
00249 printf ( " < %ld ; %ld > : %ld was reached. \t\t OK. \n",
00250 LOW, HIGH, LOW) ;
00251 break ;
00252 }
00253 }
00254 if ( i==max_iter )
00255 printf ( " < %ld ; %ld > : %ld was not reached. \t\t BAD!!!!!! \n",
00256 LOW, HIGH, LOW) ;
00257
00258 for ( i=0 ; i<max_iter ; i++ )
00259 {
00260 if ( (HIGH - RND.give_long( LOW, HIGH )) == 0 )
00261 {
00262 printf ( " < %ld ; %ld > : %ld was reached. \t\t OK. \n",
00263 LOW, HIGH, HIGH) ;
00264
00265 break ;
00266 }
00267 }
00268 if ( i==max_iter )
00269 printf ( " < %ld ; %ld > : %ld was not reached. \t\t BAD!!!!!! \n",
00270 LOW, HIGH, HIGH) ;
00271
00272 }
00273
00274
00275
00276 void test_gauss_double ( void )
00277 {
00278 FILE *f ;
00279 f=fopen ( "random.out", "at" ) ;
00280
00281 for ( long i=0 ; i<100000 ; i++ )
00282 {
00283 fprintf ( f, "%f \n", RND.give_gauss_double() ) ;
00284 }
00285
00286 fclose ( f ) ;
00287 }
00288
00289
00290
00291
00292 void test_gauss_long ( void )
00293 {
00294 printf ( "1-1 %ld \n", RND.give_long( 1,1 ) ) ;
00295 printf ( "1-2 %ld \n", RND.give_long( 1,2 ) ) ;
00296
00297 }
00298
00299 int main ( int , char *[] )
00300 {
00301
00302 RND.init() ;
00303
00304 print_basic_data() ;
00305 test_double() ;
00306 test_double_from() ;
00307 test_long() ;
00308 test_long_from() ;
00309
00310
00311
00312
00313 printf( "** everything done ** \n" ) ;
00314 return 0 ;
00315 }