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