1 /*
2 	file automatically generated by make_test_files.pl
3 	Tue Apr 19 14:01:03 2011
4 */
5 
6 /*****************************************************************************
7  *                                                                           *
8  *          UNU.RAN -- Universal Non-Uniform Random number generator         *
9  *                                                                           *
10  *****************************************************************************/
11 
12 /**
13  ** Tests for INFO
14  **/
15 
16 /*---------------------------------------------------------------------------*/
17 #include "testunuran.h"
18 
19 #ifdef UNUR_URNG_DEFAULT_RNGSTREAM
20 #include <RngStream.h>
21 #endif
22 /*---------------------------------------------------------------------------*/
23 
24 /*---------------------------------------------------------------------------*/
25 /* global variables                                                          */
26 
27 static FILE *TESTLOG;               /* test log file                         */
28 static FILE *UNURANLOG;             /* unuran log file                       */
29 
30 static int test_ok = TRUE;          /* all tests ok (boolean)                */
31 static int fullcheck = FALSE;       /* whether all checks are performed      */
32 
33 static TIMER watch;                 /* stop watch                            */
34 
35 /*---------------------------------------------------------------------------*/
36 
37 void run_verify_generator( FILE *LOG, int line, UNUR_PAR *par );
38 
39 int unur_info_set_verify( UNUR_PAR *par, int verify);
40 
41 
42 /*---------------------------------------------------------------------------*/
43 
44 void test_new (void);
45 void test_set (void);
46 void test_get (void);
47 void test_chg (void);
48 void test_init (void);
49 void test_reinit (void);
50 void test_sample (void);
51 void test_validate (void);
52 void test_special(void);
53 
54 /*---------------------------------------------------------------------------*/
55 
56 
57 
58 /* prototypes */
59 
60 /* CEXT: */
61 double exp1_sample(UNUR_GEN *gen);
62 
63 /* DEXT: */
64 int geom12_sample(UNUR_GEN *gen);
65 
66 
67 #define COMPARE_SAMPLE_SIZE   (10000)
68 #define VIOLATE_SAMPLE_SIZE   (20)
69 
70 
71 /* macros for running info test */
72 
73 #define INFO_TEST(genstr) \
74    gen = unur_str2gen((genstr)); \
75    fprintf(TESTLOG,"GEN  = \"%s\"\n",(genstr)); \
76    fprintf(TESTLOG,"INFO = \n%s\n",unur_gen_info(gen,FALSE)); \
77    fprintf(TESTLOG,"HELP = \n%s\n",unur_gen_info(gen,TRUE)); \
78    fprintf(TESTLOG,"---------------------\n"); \
79    unur_free(gen); gen = NULL;
80 
81 #define INFO_TEST_chg(genstr,run_chg) \
82    gen = unur_str2gen((genstr)); \
83    run_chg; \
84    fprintf(TESTLOG,"GEN  = \"%s\"\n",(genstr)); \
85    fprintf(TESTLOG,"INFO = \n%s\n",unur_gen_info(gen,FALSE)); \
86    fprintf(TESTLOG,"HELP = \n%s\n",unur_gen_info(gen,TRUE)); \
87    fprintf(TESTLOG,"---------------------\n"); \
88    unur_free(gen); gen = NULL;
89 
90 #define METHOD(m) \
91    printf("%s ",(m)); \
92    fprintf(TESTLOG,"*********************\n"); \
93    fprintf(TESTLOG,"* %s\n",(m)); \
94    fprintf(TESTLOG,"*********************\n\n"); \
95    fflush(stdout);
96 
97 #define INFO_TEST_par(genstr,gen) \
98    fprintf(TESTLOG,"GEN  = \"%s\"\n",(genstr)); \
99    fprintf(TESTLOG,"INFO = \n%s\n",unur_gen_info((gen),FALSE)); \
100    fprintf(TESTLOG,"HELP = \n%s\n",unur_gen_info((gen),TRUE)); \
101    fprintf(TESTLOG,"---------------------\n"); \
102    unur_free(gen); gen = NULL;
103 
104 
105 
106 
107 
108 /*---------------------------------------------------------------------------*/
109 
110 #ifndef CHI2_FAILURES_TOLERATED
111 #  define CHI2_FAILURES_TOLERATED DEFAULT_CHI2_FAILURES_TOLERATED
112 #endif
113 
114 /*---------------------------------------------------------------------------*/
115 /* [verbatim] */
116 
117 
118 
119 
exp1_sample(UNUR_GEN * gen)120 double exp1_sample(UNUR_GEN *gen) {
121 	double U = unur_sample_urng(gen);
122 	return (-log(1. - U));
123 }
124 
125 
geom12_sample(UNUR_GEN * gen)126 int geom12_sample(UNUR_GEN *gen) {
127 	double U = unur_sample_urng(gen);
128 	return ((int) (log(U) / log(0.5)));
129 }
130 
131 /*---------------------------------------------------------------------------*/
132 /* [new] */
133 
test_new(void)134 void test_new (void)
135 {
136         int n_tests_failed;          /* number of failed tests */
137 
138 	/* start test */
139 	printf("[new "); fflush(stdout);
140 	fprintf(TESTLOG,"\n[new]\n");
141 
142 	/* reset counter */
143 	n_tests_failed = 0;
144 
145 	/* set stop watch */
146 	stopwatch_lap(&watch);
147 
148 
149 	/* timing */
150 	stopwatch_print(TESTLOG,"\n<*>time = %.3f ms\n\n", stopwatch_lap(&watch));
151 
152 	/* test finished */
153 	test_ok &= (n_tests_failed) ? 0 : 1;
154 	(n_tests_failed) ? printf(" ==> failed] ") : printf(" ==> ok] ");
155 
156 } /* end of test_new() */
157 
158 /*---------------------------------------------------------------------------*/
159 /* [sample] */
160 
test_sample(void)161 void test_sample (void)
162 {
163         int n_tests_failed;          /* number of failed tests */
164 
165 	/* start test */
166 	printf("[sample "); fflush(stdout);
167 	fprintf(TESTLOG,"\n[sample]\n");
168 
169 	/* reset counter */
170 	n_tests_failed = 0;
171 
172 	/* set stop watch */
173 	stopwatch_lap(&watch);
174 
175 { /* set debugging flags */
176 UNUR_GEN   *gen = NULL;
177    gen = NULL;
178 
179 unur_set_default_debug(UNUR_DEBUG_INIT);
180 unur_free(gen);
181 }
182 
183 { /* AROU */
184 UNUR_GEN   *gen = NULL;
185    gen = NULL;
186 
187 #ifdef UNUR_ENABLE_INFO
188 METHOD("AROU");
189 INFO_TEST("normal & method=arou");
190 INFO_TEST("normal & method=arou; max_segments=10; cpoints=3");
191 INFO_TEST("cont; pdf='exp(-x^2)' & method=arou; max_segments=1000");
192 INFO_TEST("cont; pdf='exp(-x^2)' & method=arou; max_segments=1000; max_sqhratio=0.90");
193 #endif
194 unur_free(gen);
195 }
196 
197 { /* ARS */
198 UNUR_GEN   *gen = NULL;
199    gen = NULL;
200 
201 #ifdef UNUR_ENABLE_INFO
202 METHOD("ARS");
203 INFO_TEST("normal & method=ars");
204 INFO_TEST("normal & method=ars; cpoints=100");
205 INFO_TEST("cont; logpdf='-x^2' & method=ars");
206 #endif
207 unur_free(gen);
208 }
209 
210 { /* CEXT */
211 UNUR_DISTR *distr = NULL;
212 UNUR_PAR   *par = NULL;
213 UNUR_GEN   *gen = NULL;
214    distr = NULL;
215    par = NULL;
216    gen = NULL;
217 
218 #ifdef UNUR_ENABLE_INFO
219 METHOD("CEXT");
220 distr = unur_distr_exponential(NULL,0);
221 par = unur_cext_new(distr);
222 unur_cext_set_sample(par,exp1_sample);
223 gen = unur_init(par);
224 INFO_TEST_par("... & method=cext",gen);
225 #endif
226 unur_distr_free(distr);
227 unur_free(gen);
228 }
229 
230 { /* CSTD */
231 UNUR_GEN   *gen = NULL;
232    gen = NULL;
233 
234 #ifdef UNUR_ENABLE_INFO
235 METHOD("CSTD");
236 INFO_TEST("normal & method=cstd");
237 INFO_TEST("normal & method=cstd; variant=0");
238 INFO_TEST("normal & method=cstd; variant=-1");
239 INFO_TEST("normal & method=cstd; variant=1");
240 INFO_TEST("normal & method=cstd; variant=2");
241 INFO_TEST("normal & method=cstd; variant=3");
242 #endif
243 unur_free(gen);
244 }
245 
246 { /* DARI */
247 UNUR_GEN   *gen = NULL;
248    gen = NULL;
249 
250 #ifdef UNUR_ENABLE_INFO
251 METHOD("DARI");
252 INFO_TEST("geometric(0.5) & method=dari");
253 INFO_TEST("binomial(20,0.5) & method=dari");
254 INFO_TEST("binomial(20,0.5) & method=dari;squeeze=on");
255 INFO_TEST("binomial(20,0.5) & method=dari;tablesize=0");
256 INFO_TEST("binomial(20,0.5) & method=dari;cpfactor=0.6");
257 INFO_TEST("discr; pmf='0.5^x';domain=(0,inf) & method=dari");
258 INFO_TEST("discr; pmf='2*0.5^x';domain=(1,inf) & method=dari");
259 #endif
260 unur_free(gen);
261 }
262 
263 { /* DAU */
264 UNUR_GEN   *gen = NULL;
265    gen = NULL;
266 
267 #ifdef UNUR_ENABLE_INFO
268 METHOD("DAU");
269 INFO_TEST("geometric(0.5) & method=dau");
270 INFO_TEST("geometric(0.5) & method=dau;urnfactor=2");
271 INFO_TEST("discr; pv=(.1,.2,.3,.4,.5,.6,.7) & method=dau");
272 #endif
273 unur_free(gen);
274 }
275 
276 { /* DGT */
277 UNUR_GEN   *gen = NULL;
278    gen = NULL;
279 
280 #ifdef UNUR_ENABLE_INFO
281 METHOD("DGT");
282 INFO_TEST("geometric(0.5) & method=dgt");
283 INFO_TEST("geometric(0.5) & method=dgt;guidefactor=2");
284 INFO_TEST("discr; pv=(.1,.2,.3,.4,.5,.6,.7) & method=dgt");
285 #endif
286 unur_free(gen);
287 }
288 
289 { /* DSROU */
290 UNUR_GEN   *gen = NULL;
291    gen = NULL;
292 
293 #ifdef UNUR_ENABLE_INFO
294 METHOD("DSROU");
295 INFO_TEST("geometric(0.5) & method=dsrou");
296 INFO_TEST("binomial(20,0.5) & method=dsrou;cdfatmode=0.5");
297 INFO_TEST("binomial(20,0.5) & method=dsrou");
298 INFO_TEST("discr; pmf='0.5^x';domain=(0,inf);pmfsum=2 & method=dsrou");
299 INFO_TEST("discr; pmf='2*0.5^x';domain=(1,inf);pmfsum=2 & method=dsrou");
300 #endif
301 unur_free(gen);
302 }
303 
304 { /* DSS */
305 UNUR_GEN   *gen = NULL;
306    gen = NULL;
307 
308 #ifdef UNUR_ENABLE_INFO
309 METHOD("DSS");
310 INFO_TEST("geometric(0.5) & method=dss");
311 INFO_TEST("discr; pv=(.1,.2,.3,.4,.5,.6,.7);pmfsum=2.8 & method=dss");
312 INFO_TEST("discr; cdf='1-exp(-x)';pmfsum=1 & method=dss");
313 #endif
314 unur_free(gen);
315 }
316 
317 { /* DSTD */
318 UNUR_GEN   *gen = NULL;
319    gen = NULL;
320 
321 #ifdef UNUR_ENABLE_INFO
322 METHOD("DSTD");
323 INFO_TEST("poisson(10) & method=dstd");
324 INFO_TEST("poisson(10) & method=dstd;variant=0");
325 INFO_TEST("poisson(10) & method=dstd;variant=2");
326 INFO_TEST("geometric(0.5) & method=dstd");
327 INFO_TEST("geometric(0.5) & method=dstd;variant=0");
328 INFO_TEST("geometric(0.5) & method=dstd;variant=-1");
329 #endif
330 unur_free(gen);
331 }
332 
333 { /* DEXT */
334 UNUR_DISTR *distr = NULL;
335 UNUR_PAR   *par = NULL;
336 UNUR_GEN   *gen = NULL;
337    double fpar[1] = {0.5};
338    distr = NULL;
339    par = NULL;
340    gen = NULL;
341 
342 #ifdef UNUR_ENABLE_INFO
343 METHOD("DEXT");
344 distr = unur_distr_geometric(fpar,1);
345 par = unur_dext_new(distr);
346 unur_dext_set_sample(par,geom12_sample);
347 gen = unur_init(par);
348 INFO_TEST_par("... & method=dext",gen);
349 #endif
350 unur_distr_free(distr);
351 unur_free(gen);
352 }
353 
354 { /* EMPK */
355 UNUR_GEN   *gen = NULL;
356    gen = NULL;
357 
358 #ifdef UNUR_ENABLE_INFO
359 METHOD("EMPK");
360 INFO_TEST("cemp; data=(1.,2.,3.,4.,5.,6.,7.,8.,9.) & method=empk");
361 INFO_TEST("cemp; data=(1.,2.,3.,4.,5.,6.,7.,8.,9.) & method=empk\
362 	;beta=1.5;positive=on;smoothing=1.2;varcor=on");
363 #endif
364 unur_free(gen);
365 }
366 
367 { /* EMPL */
368 UNUR_GEN   *gen = NULL;
369    gen = NULL;
370 
371 #ifdef UNUR_ENABLE_INFO
372 METHOD("EMPL");
373 INFO_TEST("cemp; data=(1.,2.,3.,4.,5.,6.,7.,8.,9.) & method = empl");
374 #endif
375 unur_free(gen);
376 }
377 
378 { /* GIBBS */
379 UNUR_DISTR *distr = NULL;
380 UNUR_PAR   *par = NULL;
381 UNUR_GEN   *gen = NULL;
382    const int dim = 3;
383    double mean[] = {1.,2.,3.};
384    double covar[] = { 2., 2., 1.,   2., 4., 3.,   1., 3., 3. };
385    double ll[] = {0.,0.,0.};
386    double ru[] = {1.,UNUR_INFINITY,UNUR_INFINITY};
387    distr = NULL;
388    par = NULL;
389    gen = NULL;
390 
391 #ifdef UNUR_ENABLE_INFO
392 METHOD("GIBBS");
393 distr = unur_distr_multinormal( dim, mean, covar );
394 par = unur_gibbs_new(distr);
395 gen = unur_init(par);
396 INFO_TEST_par("... & method=gibbs",gen);
397 unur_distr_free(distr);unur_free(gen);
398 distr = unur_distr_multinormal( dim, NULL, NULL );
399 unur_distr_cvec_set_domain_rect( distr, ll, ru);
400 par = unur_gibbs_new(distr);
401 gen = unur_init(par);
402 INFO_TEST_par("... & method=gibbs",gen);
403 unur_distr_free(distr);unur_free(gen);
404 distr = unur_distr_multinormal( dim, NULL, NULL );
405 par = unur_gibbs_new(distr);
406 gen = unur_init(par);
407 INFO_TEST_par("... & method=gibbs",gen);
408 unur_distr_free(distr);unur_free(gen);
409 distr = unur_distr_multinormal( dim, NULL, NULL );
410 par = unur_gibbs_new(distr);
411 unur_gibbs_set_variant_random_direction(par);
412 unur_gibbs_set_c(par,-0.5);
413 unur_gibbs_set_thinning(par,3);
414 unur_gibbs_set_burnin(par,1000);
415 gen = unur_init(par);
416 INFO_TEST_par("... & method=gibbs",gen);
417 #endif
418 unur_distr_free(distr);
419 unur_free(gen);
420 }
421 
422 { /* HINV */
423 UNUR_GEN   *gen = NULL;
424    gen = NULL;
425 
426 #ifdef UNUR_ENABLE_INFO
427 METHOD("HINV");
428 INFO_TEST("normal & method=hinv");
429 INFO_TEST("cont; cdf='1-exp(-x)'; domain=(0,inf) & method=hinv");
430 INFO_TEST("cont; cdf='1-exp(-x)'; domain=(0,inf) & method=hinv; order=5");
431 INFO_TEST("cont; cdf='1-exp(-x)'; domain=(0,inf); mode=0 & method=hinv");
432 INFO_TEST("cont; cdf='1-exp(-x)'; domain=(0,inf) & method=hinv; u_resolution=1e-16");
433 INFO_TEST_chg("normal & method=hinv", unur_hinv_chg_truncated(gen,0.,1.));
434 #endif
435 unur_free(gen);
436 }
437 
438 { /* HIST */
439 UNUR_DISTR *distr = NULL;
440 UNUR_PAR   *par = NULL;
441 UNUR_GEN   *gen = NULL;
442    double hist[] = {0.1,0.2,0.3,0.4,0.5,0.4,0.3,0.2,0.1};
443    double bins[] = {1.,2.,3.,4.,5.,6.,7.,8.,9.,10.};
444    distr = NULL;
445    par = NULL;
446    gen = NULL;
447 
448 #ifdef UNUR_ENABLE_INFO
449 METHOD("HIST");
450 distr = unur_distr_cemp_new();
451 unur_distr_cemp_set_hist_prob(distr,hist,9);
452 unur_distr_cemp_set_hist_domain(distr,1.,10.);
453 par = unur_hist_new(distr);
454 gen = unur_init(par);
455 INFO_TEST_par("... & method=hist",gen);
456 unur_distr_free(distr);unur_free(gen);
457 distr = unur_distr_cemp_new();
458 unur_distr_cemp_set_hist_prob(distr,hist,9);
459 unur_distr_cemp_set_hist_bins(distr,bins,10);
460 unur_distr_cemp_set_hist_domain(distr,1.,10.);
461 par = unur_hist_new(distr);
462 gen = unur_init(par);
463 INFO_TEST_par("... & method=hist",gen);
464 #endif
465 unur_distr_free(distr);
466 unur_free(gen);
467 }
468 
469 { /* HITRO */
470 UNUR_DISTR *distr = NULL;
471 UNUR_PAR   *par = NULL;
472 UNUR_GEN   *gen = NULL;
473    const int dim = 3;
474    double mean[] = {1.,2.,3.};
475    double covar[] = { 2., 2., 1.,   2., 4., 3.,   1., 3., 3. };
476    double ll[] = {0.,0.,0.};
477    double ru[] = {1.,UNUR_INFINITY,UNUR_INFINITY};
478    distr = NULL;
479    par = NULL;
480    gen = NULL;
481 
482 #ifdef UNUR_ENABLE_INFO
483 METHOD("HITRO");
484 distr = unur_distr_multinormal( dim, mean, covar );
485 par = unur_hitro_new(distr);
486 gen = unur_init(par);
487 INFO_TEST_par("... & method=hitro",gen);
488 unur_distr_free(distr);unur_free(gen);
489 distr = unur_distr_multinormal( dim, NULL, NULL );
490 unur_distr_cvec_set_domain_rect( distr, ll, ru);
491 par = unur_hitro_new(distr);
492 gen = unur_init(par);
493 INFO_TEST_par("... & method=hitro",gen);
494 unur_distr_free(distr);unur_free(gen);
495 distr = unur_distr_multinormal( dim, NULL, NULL );
496 par = unur_hitro_new(distr);
497 gen = unur_init(par);
498 INFO_TEST_par("... & method=hitro",gen);
499 unur_distr_free(distr);unur_free(gen);
500 distr = unur_distr_multinormal( dim, NULL, NULL );
501 par = unur_hitro_new(distr);
502 unur_hitro_set_variant_random_direction(par);
503 unur_hitro_set_r(par,2.);
504 unur_hitro_set_thinning(par,3);
505 unur_hitro_set_burnin(par,1000);
506 gen = unur_init(par);
507 INFO_TEST_par("... & method=hitro",gen);
508 #endif
509 unur_distr_free(distr);
510 unur_free(gen);
511 }
512 
513 { /* HRB */
514 UNUR_GEN   *gen = NULL;
515    gen = NULL;
516 
517 #ifdef UNUR_ENABLE_INFO
518 METHOD("HRB");
519 INFO_TEST("cont; hr='1./(1.+x)' & method=hrb");
520 INFO_TEST("cont; hr='1./(1.+x)' & method=hrb;upperbound=1.1");
521 #endif
522 unur_free(gen);
523 }
524 
525 { /* HRD */
526 UNUR_GEN   *gen = NULL;
527    gen = NULL;
528 
529 #ifdef UNUR_ENABLE_INFO
530 METHOD("HRD");
531 INFO_TEST("cont; hr='1./(1.+x)' & method=hrd");
532 #endif
533 unur_free(gen);
534 }
535 
536 { /* HRI */
537 UNUR_GEN   *gen = NULL;
538    gen = NULL;
539 
540 #ifdef UNUR_ENABLE_INFO
541 METHOD("HRI");
542 INFO_TEST("cont; hr='3*x*x' & method=hri");
543 INFO_TEST("cont; hr='3*x*x' & method=hri;p0=0.8");
544 #endif
545 unur_free(gen);
546 }
547 
548 { /* ITDR */
549 UNUR_GEN   *gen = NULL;
550    gen = NULL;
551 
552 #ifdef UNUR_ENABLE_INFO
553 METHOD("ITDR");
554 INFO_TEST("gamma(0.5) & method=itdr");
555 INFO_TEST("gamma(0.5) & method=itdr; cp=-0.5; ct=-0.5");
556 INFO_TEST("gamma(0.5) & method=itdr; cp=-0.5; ct=-0.5; xi=0.4");
557 INFO_TEST("cont; pdf='exp(-x)/sqrt(x)';mode=0;domain=(0,inf) & method=itdr");
558 #endif
559 unur_free(gen);
560 }
561 
562 { /* MCORR */
563 UNUR_DISTR *distr = NULL;
564 UNUR_PAR   *par = NULL;
565 UNUR_GEN   *gen = NULL;
566    double eigenvalues[] = {1.,2.,3.,4.};
567    distr = NULL;
568    par = NULL;
569    gen = NULL;
570 
571 #ifdef UNUR_ENABLE_INFO
572 METHOD("MCORR");
573 distr = unur_distr_correlation(4);
574 par = unur_mcorr_new(distr);
575 gen = unur_init(par);
576 INFO_TEST_par("... & method=mcorr",gen);
577 unur_distr_free(distr);unur_free(gen);
578 distr = unur_distr_correlation(4);
579 par = unur_mcorr_new(distr);
580 unur_mcorr_set_eigenvalues( par, eigenvalues );
581 gen = unur_init(par);
582 INFO_TEST_par("... & method=mcorr",gen);
583 #endif
584 unur_distr_free(distr);
585 unur_free(gen);
586 }
587 
588 { /* MIXT */
589 UNUR_PAR   *par = NULL;
590 UNUR_GEN   *gen = NULL;
591    UNUR_GEN *comp[3];
592    double prob[3] = {1,2,3};
593    par = NULL;
594    gen = NULL;
595 
596 #ifdef UNUR_ENABLE_INFO
597 METHOD("MIXT");
598 comp[0] = unur_str2gen("normal;domain=(-inf,-1)&method=pinv");
599 comp[1] = unur_str2gen("uniform(-1,1)&method=cstd");
600 comp[2] = unur_str2gen("exponential;domain=(1,inf)&method=pinv");
601 par = unur_mixt_new(3,prob,comp);
602 gen = unur_init(par);
603 INFO_TEST_par("... & method=mixt",gen);
604 par = unur_mixt_new(3,prob,comp);
605 unur_mixt_set_useinversion(par,TRUE);
606 gen = unur_init(par);
607 INFO_TEST_par("... & method=mixt; useinversion=ON",gen);
608 unur_free(comp[0]);
609 unur_free(comp[1]);
610 unur_free(comp[2]);
611 comp[0] = unur_str2gen("exponential&method=pinv");
612 comp[1] = unur_str2gen("poisson(5)&method=dgt");
613 par = unur_mixt_new(2,prob,comp);
614 gen = unur_init(par);
615 INFO_TEST_par("... & method=mixt",gen);
616 unur_free(comp[0]);
617 unur_free(comp[1]);
618 comp[0] = unur_str2gen("binomial(100,0.05)&method=dgt");
619 comp[1] = unur_str2gen("poisson(5)&method=dgt");
620 par = unur_mixt_new(2,prob,comp);
621 gen = unur_init(par);
622 INFO_TEST_par("... & method=mixt",gen);
623 unur_free(comp[0]);
624 unur_free(comp[1]);
625 #endif
626 unur_free(gen);
627 }
628 
629 { /* MVSTD */
630 UNUR_DISTR *distr = NULL;
631 UNUR_PAR   *par = NULL;
632 UNUR_GEN   *gen = NULL;
633    const int dim = 3;
634    double mean[] = {1.,2.,3.};
635    double covar[] = { 2., 2., 1.,   2., 4., 3.,   1., 3., 3. };
636    distr = NULL;
637    par = NULL;
638    gen = NULL;
639 
640 #ifdef UNUR_ENABLE_INFO
641 METHOD("MVSTD");
642 distr = unur_distr_multinormal( dim, mean, covar );
643 par = unur_mvstd_new(distr);
644 gen = unur_init(par);
645 INFO_TEST_par("... & method=mvstd",gen);
646 unur_distr_free(distr);unur_free(gen);
647 distr = unur_distr_multinormal( dim, NULL, NULL );
648 par = unur_mvstd_new(distr);
649 gen = unur_init(par);
650 INFO_TEST_par("... & method=mvstd",gen);
651 #endif
652 unur_distr_free(distr);
653 unur_free(gen);
654 }
655 
656 { /* MVTDR */
657 UNUR_DISTR *distr = NULL;
658 UNUR_PAR   *par = NULL;
659 UNUR_GEN   *gen = NULL;
660    const int dim = 3;
661    double mean[] = {1.,2.,3.};
662    double covar[] = { 2., 2., 1.,   2., 4., 3.,   1., 3., 3. };
663    double ll[] = {0.,0.,0.};
664    double ru[] = {1.,UNUR_INFINITY,UNUR_INFINITY};
665    distr = NULL;
666    par = NULL;
667    gen = NULL;
668 
669 #ifdef UNUR_ENABLE_INFO
670 METHOD("MVTDR");
671 distr = unur_distr_multinormal( dim, mean, covar );
672 par = unur_mvtdr_new(distr);
673 gen = unur_init(par);
674 INFO_TEST_par("... & method=mvtdr",gen);
675 unur_distr_free(distr);unur_free(gen);
676 distr = unur_distr_multinormal( dim, NULL, NULL );
677 unur_distr_cvec_set_domain_rect( distr, ll, ru);
678 par = unur_mvtdr_new(distr);
679 gen = unur_init(par);
680 INFO_TEST_par("... & method=mvtdr",gen);
681 unur_distr_free(distr);unur_free(gen);
682 distr = unur_distr_multinormal( dim, NULL, NULL );
683 par = unur_mvtdr_new(distr);
684 gen = unur_init(par);
685 INFO_TEST_par("... & method=mvtdr",gen);
686 unur_distr_free(distr);unur_free(gen);
687 distr = unur_distr_multinormal( dim, NULL, NULL );
688 par = unur_mvtdr_new(distr);
689 unur_mvtdr_set_stepsmin( par, 7 );
690 unur_mvtdr_set_boundsplitting( par, 1.2 );
691 unur_mvtdr_set_maxcones( par, 9999 );
692 gen = unur_init(par);
693 INFO_TEST_par("... & method=mvtdr",gen);
694 unur_distr_free(distr);unur_free(gen);
695 distr = unur_distr_multinormal( dim, NULL, NULL );
696 par = unur_mvtdr_new(distr);
697 unur_mvtdr_set_maxcones( par, 10 );
698 gen = unur_init(par);
699 INFO_TEST_par("... & method=mvtdr",gen);
700 #endif
701 unur_distr_free(distr);
702 unur_free(gen);
703 }
704 
705 { /* NINV */
706 UNUR_GEN   *gen = NULL;
707    gen = NULL;
708 
709 #ifdef UNUR_ENABLE_INFO
710 METHOD("NINV");
711 INFO_TEST("normal & method=ninv");
712 INFO_TEST("normal & method=ninv; usenewton");
713 INFO_TEST("normal & method=ninv; usebisect");
714 INFO_TEST("cont; cdf='1-exp(-x)'; domain=(0,inf) & method=ninv");
715 INFO_TEST_chg("normal & method=ninv", unur_ninv_chg_truncated(gen,0.,1.));
716 INFO_TEST("normal & method=ninv; x_resolution=1e-10");
717 INFO_TEST("normal & method=ninv; u_resolution=1e-10");
718 INFO_TEST("normal & method=ninv; u_resolution=1e-10; x_resolution=1e-10");
719 INFO_TEST("normal & method=ninv; u_resolution=1e-10; x_resolution=-1");
720 INFO_TEST("normal & method=ninv; max_iter=100");
721 INFO_TEST("normal & method=ninv; start=(-1,1)");
722 INFO_TEST("normal & method=ninv; table=123");
723 #endif
724 unur_free(gen);
725 }
726 
727 { /* NORTA */
728 UNUR_DISTR *distr = NULL;
729 UNUR_PAR   *par = NULL;
730 UNUR_GEN   *gen = NULL;
731    const int dim = 3;
732    double rankcorr[] = { 1., 0.5, 0.1,  0.5, 1., 0.3,  0.1, 0.3, 1. };
733    double gamma_params[] = {5.};
734    double beta_params[] = {3.,5.};
735    UNUR_DISTR *marginal = NULL;
736    distr = NULL;
737    par = NULL;
738    gen = NULL;
739 
740 #ifdef UNUR_ENABLE_INFO
741 METHOD("NORTA");
742 distr = unur_distr_copula(dim, rankcorr);
743 par = unur_norta_new(distr);
744 gen = unur_init(par);
745 INFO_TEST_par("... & method=norta",gen);
746 unur_distr_free(distr);unur_free(gen);
747 distr = unur_distr_cvec_new(dim);
748 unur_distr_cvec_set_rankcorr(distr,rankcorr);
749 marginal = unur_distr_gamma(gamma_params,1);
750 unur_distr_cvec_set_marginals(distr,marginal);
751 unur_distr_free(marginal);
752 par = unur_norta_new(distr);
753 gen = unur_init(par);
754 INFO_TEST_par("... & method=norta",gen);
755 unur_distr_free(distr);unur_free(gen);
756 distr = unur_distr_cvec_new(dim);
757 unur_distr_cvec_set_rankcorr(distr,rankcorr);
758 unur_distr_cvec_set_marginal_list(distr,
759 	unur_distr_cauchy(NULL,0),
760 	unur_distr_gamma(gamma_params,1),
761 	unur_distr_beta(beta_params,2) );
762 par = unur_norta_new(distr);
763 gen = unur_init(par);
764 INFO_TEST_par("... & method=norta",gen);
765 #endif
766 unur_distr_free(distr);
767 unur_free(gen);
768 }
769 
770 { /* NROU */
771 UNUR_GEN   *gen = NULL;
772    gen = NULL;
773 
774 METHOD("NROU");
775 INFO_TEST("normal & method=nrou");
776 INFO_TEST("cont; pdf='exp(-x^2)' & method=nrou");
777 INFO_TEST("cont; pdf='exp(-x^2)' & method=nrou; r=2");
778 INFO_TEST("cont; pdf='exp(-x^2)' & method=nrou; v=1");
779 INFO_TEST("cont; pdf='exp(-x^2)' & method=nrou; u=(-0.61, 0.61)");
780 INFO_TEST("cont; pdf='exp(-x^2)' & method=nrou; v=1; u=(-0.61, 0.61)");
781 unur_free(gen);
782 }
783 
784 { /* PINV */
785 UNUR_GEN   *gen = NULL;
786    gen = NULL;
787 
788 #ifdef UNUR_ENABLE_INFO
789 METHOD("PINV");
790 INFO_TEST("normal & method=pinv");
791 INFO_TEST("normal & method=pinv; smoothness=1");
792 INFO_TEST("normal & method=pinv; smoothness=2");
793 INFO_TEST("normal & method=pinv; smoothness=1; order=6");
794 INFO_TEST("normal & method=pinv; usecdf");
795 INFO_TEST("normal & method=pinv; order=7; u_resolution=1e-14; use_upoints=on");
796 INFO_TEST("normal & method=pinv; boundary=(-10,10); searchboundary=(1,0)");
797 INFO_TEST("cont; cdf='1-exp(-x)'; domain=(0,inf) & method=pinv");
798 INFO_TEST("chisquare(2) & method=pinv");
799 INFO_TEST("normal & method=pinv; keepcdf=on");
800 #endif
801 unur_free(gen);
802 }
803 
804 { /* SROU */
805 UNUR_GEN   *gen = NULL;
806    gen = NULL;
807 
808 METHOD("SROU");
809 INFO_TEST("normal & method=srou");
810 INFO_TEST("cont; pdf='exp(-x^2)';pdfarea=1.773 & method=srou");
811 INFO_TEST("cont; pdf='exp(-x^2)';pdfarea=1.773 & method=srou; usemirror");
812 INFO_TEST("cont; pdf='exp(-x^2)';pdfarea=1.773 & method=srou; cdfatmode=0.5; usesqueeze");
813 INFO_TEST("cont; pdf='exp(-x^2)';pdfarea=1.773 & method=srou; r=2");
814 INFO_TEST("cont; pdf='exp(-x^2)';pdfarea=1.773 & method=srou; r=2; cdfatmode=0.5");
815 unur_free(gen);
816 }
817 
818 { /* SSR */
819 UNUR_GEN   *gen = NULL;
820    gen = NULL;
821 
822 METHOD("SSR");
823 INFO_TEST("normal & method=ssr");
824 INFO_TEST("cont; pdf='exp(-x^2)';pdfarea=1.773 & method=ssr");
825 INFO_TEST("cont; pdf='exp(-x^2)';pdfarea=1.773 & method=ssr; cdfatmode=0.5; usesqueeze");
826 INFO_TEST("cont; pdf='exp(-x^2)';pdfarea=1.773 & method=ssr; cdfatmode=0.5");
827 INFO_TEST("cont; pdf='exp(-x^2)';domain=(0,inf);pdfarea=0.887 & method=ssr");
828 unur_free(gen);
829 }
830 
831 { /* TABL */
832 UNUR_GEN   *gen = NULL;
833    gen = NULL;
834 
835 #ifdef UNUR_ENABLE_INFO
836 METHOD("TABL");
837 INFO_TEST("normal & method=tabl");
838 INFO_TEST("normal & method=tabl;variant_ia=off;max_intervals=50");
839 INFO_TEST("cont; pdf='exp(-x^2)';mode=0 & method=tabl");
840 INFO_TEST("cont; pdf='exp(-x^2)';mode=0  & method=tabl; max_intervals=100; max_sqhratio=0.99");
841 INFO_TEST_chg("normal & method=tabl", unur_tabl_chg_truncated(gen,0.,1.));
842 #endif
843 unur_free(gen);
844 }
845 
846 { /* TDR */
847 UNUR_GEN   *gen = NULL;
848    gen = NULL;
849 
850 #ifdef UNUR_ENABLE_INFO
851 METHOD("TDR");
852 INFO_TEST("normal & method=tdr");
853 INFO_TEST("normal & method=tdr; max_intervals=10; cpoints=3");
854 INFO_TEST("cont; pdf='exp(-x^2)' & method=tdr");
855 INFO_TEST("cont; pdf='exp(-x^2)' & method=tdr; c=0");
856 INFO_TEST("cont; pdf='exp(-x^2)' & method=tdr; c=0; variant_ia");
857 INFO_TEST("cont; pdf='exp(-x^2)' & method=tdr; c=0; variant_ia; max_intervals=1000");
858 INFO_TEST("cont; pdf='exp(-x^2)' & method=tdr; c=0; variant_ia; max_intervals=1000; max_sqhratio=0.90");
859 INFO_TEST_chg("normal & method=tdr", unur_tdr_chg_truncated(gen,0.,1.));
860 #endif
861 unur_free(gen);
862 }
863 
864 { /* UNIF */
865 UNUR_GEN   *gen = NULL;
866    gen = NULL;
867 
868 #ifdef UNUR_ENABLE_INFO
869 METHOD("UNIF");
870 INFO_TEST("uniform(0,1) & method=unif");
871 #endif
872 unur_free(gen);
873 }
874 
875 { /* UTDR */
876 UNUR_GEN   *gen = NULL;
877    gen = NULL;
878 
879 #ifdef UNUR_ENABLE_INFO
880 METHOD("UTDR");
881 INFO_TEST("normal & method=utdr");
882 INFO_TEST("cont; pdf='exp(-x^2)';pdfarea=1.773 & method=utdr");
883 INFO_TEST("cont; pdf='exp(-x^2)';pdfarea=1.773 & method=utdr;pdfatmode=1.0");
884 INFO_TEST("cont; pdf='exp(-x^2)';pdfarea=1.773 & method=utdr;deltafactor=1e-8");
885 #endif
886 unur_free(gen);
887 }
888 
889 { /* VEMPK */
890 UNUR_DISTR *distr = NULL;
891 UNUR_PAR   *par = NULL;
892 UNUR_GEN   *gen = NULL;
893    double data[] = {1.,1.,-1.,1.,1.,-1.,-1.,-1. };
894    distr = NULL;
895    par = NULL;
896    gen = NULL;
897 
898 #ifdef UNUR_ENABLE_INFO
899 METHOD("VEMPK");
900 distr = unur_distr_cvemp_new(2);
901 unur_distr_cvemp_set_data(distr, data, 4);
902 par = unur_vempk_new(distr);
903 gen = unur_init(par);
904 INFO_TEST_par("... & method=vempk",gen);
905 unur_distr_free(distr);unur_free(gen);
906 distr = unur_distr_cvemp_new(2);
907 unur_distr_cvemp_set_data(distr, data, 4);
908 par = unur_vempk_new(distr);
909 unur_vempk_set_smoothing(par,1.5);
910 unur_vempk_set_varcor(par,TRUE);
911 gen = unur_init(par);
912 INFO_TEST_par("... & method=vempk",gen);
913 #endif
914 unur_distr_free(distr);
915 unur_free(gen);
916 }
917 
918 { /* VNROU */
919 UNUR_DISTR *distr = NULL;
920 UNUR_PAR   *par = NULL;
921 UNUR_GEN   *gen = NULL;
922    const int dim = 3;
923    double mean[] = {1.,2.,3.};
924    double covar[] = { 2., 2., 1.,   2., 4., 3.,   1., 3., 3. };
925    double ll[] = {0.,0.,0.};
926    double ru[] = {1.,UNUR_INFINITY,UNUR_INFINITY};
927    distr = NULL;
928    par = NULL;
929    gen = NULL;
930 
931 #ifdef UNUR_ENABLE_INFO
932 METHOD("VNROU");
933 distr = unur_distr_multinormal( dim, mean, covar );
934 par = unur_vnrou_new(distr);
935 gen = unur_init(par);
936 INFO_TEST_par("... & method=vnrou",gen);
937 unur_distr_free(distr);unur_free(gen);
938 distr = unur_distr_multinormal( dim, NULL, NULL );
939 unur_distr_cvec_set_domain_rect( distr, ll, ru);
940 par = unur_vnrou_new(distr);
941 gen = unur_init(par);
942 INFO_TEST_par("... & method=vnrou",gen);
943 unur_distr_free(distr);unur_free(gen);
944 distr = unur_distr_multinormal( dim, NULL, NULL );
945 par = unur_vnrou_new(distr);
946 unur_vnrou_set_r(par,2.);
947 gen = unur_init(par);
948 INFO_TEST_par("... & method=vnrou",gen);
949 #endif
950 unur_distr_free(distr);
951 unur_free(gen);
952 }
953 
954 
955 	/* timing */
956 	stopwatch_print(TESTLOG,"\n<*>time = %.3f ms\n\n", stopwatch_lap(&watch));
957 
958 	/* test finished */
959 	test_ok &= (n_tests_failed) ? 0 : 1;
960 	(n_tests_failed) ? printf(" ==> failed] ") : printf(" ==> ok] ");
961 
962 } /* end of test_sample() */
963 
964 
965 /*---------------------------------------------------------------------------*/
966 /* run generator in verifying mode */
967 
run_verify_generator(FILE * LOG,int line,UNUR_PAR * par)968 void run_verify_generator( FILE *LOG, int line, UNUR_PAR *par )
969 {
970 	UNUR_GEN *gen;
971 	int i;
972 
973 	/* switch to verifying mode */
974 	unur_info_set_verify(par,1);
975 
976 	/* initialize generator */
977 	gen = unur_init( par ); abort_if_NULL(LOG, line, gen);
978 
979 	/* run generator */
980 	for (i=0; i<VIOLATE_SAMPLE_SIZE; i++)
981 		unur_sample_cont(gen);
982 
983 	/* destroy generator */
984 	unur_free(gen);
985 
986 } /* end of run_verify_generator() */
987 
unur_info_set_verify(UNUR_PAR * par ATTRIBUTE__UNUSED,int verify ATTRIBUTE__UNUSED)988 int unur_info_set_verify(UNUR_PAR *par ATTRIBUTE__UNUSED, int verify ATTRIBUTE__UNUSED) {return 0;}
989 
990 /*---------------------------------------------------------------------------*/
991 
main(void)992 int main(void)
993 {
994         unsigned long seed;
995 	char *str_seed, *str_tail;
996 
997 	/* start stop watch */
998 	stopwatch_init();
999 	stopwatch_start(&watch);
1000 
1001         /* open log file for unuran and set output stream for unuran messages */
1002         UNURANLOG = fopen( "t_info_unuran.log","w" );
1003         abort_if_NULL( stderr,-1, UNURANLOG );
1004         unur_set_stream( UNURANLOG );
1005 
1006         /* open log file for testing */
1007 	TESTLOG = fopen( "t_info_test.log","w" );
1008 	abort_if_NULL( stderr,-1, TESTLOG );
1009 
1010         /* seed for uniform generators */
1011 
1012 	/* seed set by environment */
1013 	str_seed = getenv("SEED");
1014 
1015 	if (str_seed != NULL) {
1016 	    seed = strtol(str_seed, &str_tail, 10);
1017 	    if (seed == 0u)
1018 		seed = 610007;
1019 	}
1020 	else {
1021 #ifdef SEED
1022 	    seed = SEED;
1023 #else
1024 	    seed = 610007;
1025 #endif
1026 	}
1027 
1028         /* seed build-in uniform generators */
1029         unur_urng_MRG31k3p_seed(NULL,seed);
1030         unur_urng_fish_seed(NULL,seed);
1031 	unur_urng_mstd_seed(NULL,seed);
1032 
1033 	/* seed uniform random number generator */
1034 #ifdef UNUR_URNG_UNURAN
1035 #  ifdef UNUR_URNG_DEFAULT_RNGSTREAM
1036 	{
1037 	        unsigned long sa[6];
1038 	        int i;
1039 	        for (i=0; i<6; i++) sa[i] = seed;
1040                 RngStream_SetPackageSeed(sa);
1041         }
1042 #  else
1043 	if (unur_urng_seed(NULL,seed) != UNUR_SUCCESS) {
1044 	        fprintf(stderr,"WARNING: Seed could not be set at random\n");
1045                 seed = ~0u;
1046 	}
1047 #  endif  /* UNUR_URNG_DEFAULT_RNGSTREAM */
1048 #endif  /* UNUR_URNG_UNURAN */
1049 
1050 	/* set default debugging flag */
1051 	unur_set_default_debug(UNUR_DEBUG_ALL);
1052 
1053         /* detect required check mode */
1054         fullcheck = (getenv("UNURANFULLCHECK")==NULL) ? FALSE : TRUE;
1055 
1056 	/* write header into log file */
1057         print_test_log_header( TESTLOG, seed, fullcheck );
1058 
1059 	/* set timer for sending SIGALRM signal */
1060 	set_alarm(TESTLOG);
1061 
1062 	/* start test */
1063 	printf("info: ");
1064 
1065 	/* run tests */
1066 test_new();
1067 test_sample();
1068 
1069 
1070 	/* test finished */
1071 	printf("\n");  fflush(stdout);
1072 
1073 	/* close log files */
1074 	fprintf(TESTLOG,"\n====================================================\n\n");
1075 	if (test_ok)
1076 		fprintf(TESTLOG,"All tests PASSED.\n");
1077 	else
1078 		fprintf(TESTLOG,"Test(s) FAILED.\n");
1079 
1080 	/* timing */
1081 	stopwatch_print(TESTLOG,"\n<*>total time = %.0f ms\n\n", stopwatch_stop(&watch));
1082 
1083 	fclose(UNURANLOG);
1084 	fclose(TESTLOG);
1085 
1086 	/* free memory */
1087 	compare_free_memory();
1088 	unur_urng_free(unur_get_default_urng());
1089 	unur_urng_free(unur_get_default_urng_aux());
1090 
1091 	/* exit */
1092 	exit( (test_ok) ? EXIT_SUCCESS : EXIT_FAILURE );
1093 
1094 } /* end of main */
1095 
1096