1# $Id: t_nrou.conf 5330 2011-04-19 10:50:18Z leydold $ 2############################################################################# 3 4[main] 5 6[main - data:] 7 8# method (for information only: the program scans the file name) 9method: NROU 10 11[main - header:] 12 13/* prototypes */ 14 15double pdf_sqrtlin( double x, const UNUR_DISTR *distr ); 16double dpdf_sqrtlin( double x, const UNUR_DISTR *distr ); 17double cdf_sqrtlin( double x, const UNUR_DISTR *distr ); 18 19double pdf_sqrtlinshft(double x, const UNUR_DISTR *distr ); 20double dpdf_sqrtlinshft( double x, const UNUR_DISTR *distr ); 21double cdf_sqrtlinshft( double x, const UNUR_DISTR *distr ); 22 23 24int unur_nrou_set_pedantic( struct unur_par *par, int pedantic ); 25 26\#define COMPARE_SAMPLE_SIZE (10000) 27\#define VIOLATE_SAMPLE_SIZE (100) 28 29############################################################################# 30 31[new] 32 33[new - invalid NULL ptr: 34 distr = NULL; ] 35 36~( distr ); 37 --> expected_NULL --> UNUR_ERR_NULL 38 39[new - invalid distribution type: 40 distr = unur_distr_discr_new(); ] 41 42~( distr ); 43 --> expected_NULL --> UNUR_ERR_DISTR_INVALID 44 45[new - data missing in distribution object: 46 distr = unur_distr_cont_new(); ] 47 48/* pdf */ 49~( distr ); 50 --> expected_NULL --> UNUR_ERR_DISTR_REQUIRED 51 52############################################################################# 53 54[set] 55 56[set - invalid NULL ptr: 57 par = NULL; ] 58 59~_u(par,-1.,1.); 60 --> expected_setfailed --> UNUR_ERR_NULL 61 62~_v(par,1.); 63 --> expected_setfailed --> UNUR_ERR_NULL 64 65~_center(par,0.); 66 --> expected_setfailed --> UNUR_ERR_NULL 67 68~_verify(par,1); 69 --> expected_setfailed --> UNUR_ERR_NULL 70 71 72[set - invalid parameter object: 73 double fpar[2] = {0.,1.}; 74 distr = unur_distr_normal(fpar,2); 75 par = unur_arou_new(distr); ] 76 77~_u(par,-1.,1.); 78 --> expected_setfailed --> UNUR_ERR_PAR_INVALID 79 80~_v(par,1.); 81 --> expected_setfailed --> UNUR_ERR_PAR_INVALID 82 83~_center(par,0.); 84 --> expected_setfailed --> UNUR_ERR_PAR_INVALID 85 86~_verify(par,1); 87 --> expected_setfailed --> UNUR_ERR_PAR_INVALID 88 89unur_par_free(par); 90 91[set - invalid parameters: 92 double fpar[2] = {0.,1.}; 93 distr = unur_distr_normal(fpar,2); 94 par = unur_nrou_new(distr); ] 95 96~_u(par,-1.,-2.); 97 --> expected_setfailed --> UNUR_ERR_PAR_SET 98 99~_v(par,0.); 100 --> expected_setfailed --> UNUR_ERR_PAR_SET 101 102unur_par_free(par); 103 104############################################################################# 105 106# [get] 107 108############################################################################# 109 110[chg] 111 112[chg - invalid generator object: 113 double fpar[2] = {0.,1.}; 114 distr = unur_distr_normal(fpar,2); 115 par = unur_arou_new(distr); 116 unur_set_debug(par,0); 117 gen = unur_init( par ); <-- ! NULL ] 118 119~_verify(gen,1); 120 --> expected_setfailed --> UNUR_ERR_GEN_INVALID 121 122############################################################################# 123 124[init] 125 126[init - invalid NULL ptr: 127 par = NULL; ] 128 129unur_init( par ); 130 --> expected_NULL --> UNUR_ERR_NULL 131 132 133############################################################################# 134 135[reinit] 136 137[reinit - exist: 138 distr = unur_distr_normal(NULL,0); 139 par = unur_nrou_new(distr); 140 gen = unur_init( par ); <-- ! NULL ] 141 142unur_reinit( gen ); 143 --> expected_reinit 144 145############################################################################# 146 147[sample] 148 149[sample - compare: 150 distr = unur_distr_normal(NULL,0); 151 par = NULL; ] 152 153/* default algorithm */ 154par = unur_nrou_new(distr); 155unur_nrou_set_u(par,-0.56,0.56); 156unur_nrou_set_v(par,0.64); 157 -->compare_sequence_par_start 158 159/* default algorithm - verifying mode */ 160par = unur_nrou_new(distr); 161unur_nrou_set_u(par,-0.56,0.56); 162unur_nrou_set_v(par,0.64); 163unur_nrou_set_verify(par,1); 164 -->compare_sequence_par 165 166#..................................................................... 167 168[sample - violate condition: 169 distr = unur_distr_normal(NULL,0); 170 par = NULL; ] 171 172/* v-value is too small */ 173par = unur_nrou_new(distr); 174unur_nrou_set_u(par,-0.56,0.56); 175unur_nrou_set_v(par,0.1); 176 --> run_verify_generator --> UNUR_ERR_GEN_CONDITION 177 178/* u-value is too small */ 179par = unur_nrou_new(distr); 180unur_nrou_set_u(par,-0.2,0.56); 181unur_nrou_set_v(par,0.64); 182 --> run_verify_generator --> UNUR_ERR_GEN_CONDITION 183 184/* u-value is too small */ 185par = unur_nrou_new(distr); 186unur_nrou_set_u(par,-0.56,0.26); 187unur_nrou_set_v(par,0.64); 188 --> run_verify_generator --> UNUR_ERR_GEN_CONDITION 189 190#..................................................................... 191 192[sample - compare clone: 193 UNUR_GEN *clone; 194 distr = unur_distr_normal(NULL,0); 195 par = NULL; 196 gen = NULL; ] 197 198/* original generator object */ 199par = unur_nrou_new(distr); 200unur_nrou_set_u(par,-0.56,0.56); 201unur_nrou_set_v(par,0.64); 202gen = unur_init(par); 203 -->compare_sequence_gen_start 204 205/* clone */ 206clone = unur_gen_clone(gen); 207unur_free(gen); 208gen = clone; 209 -->compare_sequence_gen 210 211#..................................................................... 212 213[sample - compare reinit: 214 distr = unur_distr_normal(NULL,0); 215 par = NULL; 216 gen = NULL; ] 217 218/* original generator object */ 219par = unur_nrou_new(distr); 220gen = unur_init(par); 221 -->compare_sequence_gen_start 222 223/* reinit */ 224unur_reinit(gen); 225 -->compare_sequence_gen 226 227#..................................................................... 228 229[sample - compare stringparser: 230 distr = NULL; 231 par = NULL; 232 gen = NULL; ] 233 234distr = unur_distr_normal(NULL,0); 235par = unur_nrou_new(distr); 236gen = unur_init(par); 237 -->compare_sequence_gen_start 238 239unur_free(gen); gen = NULL; 240unur_distr_free(distr); distr = NULL; 241gen = unur_str2gen( "normal() & method = nrou" ); 242 -->compare_sequence_gen 243 244unur_free(gen); gen = NULL; 245distr = unur_distr_normal(NULL,0); 246par = unur_nrou_new(distr); 247unur_nrou_set_u(par,-0.6,0.6); 248unur_nrou_set_v(par,1.); 249gen = unur_init(par); 250 -->compare_sequence_gen_start 251 252unur_free(gen); gen = NULL; 253unur_distr_free(distr); distr = NULL; 254gen = unur_str2gen( "normal() & method = nrou; u=(-0.6,0.6); v=1" ); 255 -->compare_sequence_gen 256 257 258############################################################################# 259 260[validate] 261 262[validate - generators:] 263 264# default variant 265par[0] = unur_nrou_new(@distr@); 266 267# use bounding rectangle 268par[1] = unur_nrou_new(@distr@); 269unur_nrou_set_u(par,-0.6,0.6); 270unur_nrou_set_v(par,1.); 271 272# r-parameter = 0.5 273par[2] = unur_nrou_new(@distr@); 274unur_nrou_set_r(par, 0.5); 275 276# r-parameter = 2.0 277par[3] = unur_nrou_new(@distr@); 278unur_nrou_set_r(par, 2.0 ); 279 280# default variant but reinitialized with changed domain 281{ UNUR_DISTR *dg =NULL; 282par[4] = unur_nrou_new(@distr@); 283dg = unur_get_distr(gen); 284unur_distr_cont_set_domain(dg,0.1,0.99); 285unur_distr_cont_upd_pdfarea(dg); 286unur_distr_cont_upd_mode(dg); 287unur_reinit(gen); } 288 289# default variant but reinitialized with changed pdf parameters 290{ UNUR_DISTR *dg =NULL; 291par[5] = unur_nrou_new(@distr@); 292fpm[0] = 1.; 293fpm[1] = 4.; 294dg = unur_get_distr(gen); 295unur_distr_cont_set_pdfparams(dg,fpm,2); 296unur_distr_cont_upd_pdfarea(dg); 297unur_distr_cont_upd_mode(dg); 298unur_reinit(gen); } 299 300[validate - distributions:] 301 302# Beta distributions 303fpm[0] = 1.; 304fpm[1] = 2.; 305distr[0] = unur_distr_beta(fpm,2); 306 307fpm[0] = 1.; 308fpm[1] = 5.; 309distr[1] = unur_distr_beta(fpm,2); 310 311fpm[0] = 1.; 312fpm[1] = 100.; 313distr[2] = unur_distr_beta(fpm,2); 314 315fpm[0] = 3.; 316fpm[1] = 4.; 317distr[3] = unur_distr_beta(fpm,2); 318 319fpm[0] = 5.; 320fpm[1] = 100.; 321distr[4] = unur_distr_beta(fpm,2); 322 323fpm[0] = 500.; 324fpm[1] = 300.; 325distr[5] = unur_distr_beta(fpm,2); 326 327fpm[0] = 5.; 328fpm[1] = 10.; 329fpm[2] = -3.; 330fpm[3] = 15.; 331distr[6] = unur_distr_beta(fpm,4); 332 333# Cauchy distributions 334distr[7] = unur_distr_cauchy(NULL,0); 335 336fpm[0] = 1.; 337fpm[1] = 20.; 338distr[8] = unur_distr_cauchy(fpm,2); 339 340# Exponential distributions 341distr[23] = unur_distr_exponential(NULL,0); 342 343fpm[0] = 30.; 344fpm[1] = -5.; 345distr[24] = unur_distr_exponential(fpm,2); 346 347# Gamma distributions 348fpm[0] = 1.; 349distr[9] = unur_distr_gamma(fpm,1); 350 351fpm[0] = 2.; 352distr[10] = unur_distr_gamma(fpm,1); 353 354fpm[0] = 3.; 355distr[11] = unur_distr_gamma(fpm,1); 356 357fpm[0] = 10.; 358distr[12] = unur_distr_gamma(fpm,1); 359 360fpm[0] = 1000.; 361distr[13] = unur_distr_gamma(fpm,1); 362 363fpm[0] = 5.; 364fpm[1] = 1000.; 365distr[14] = unur_distr_gamma(fpm,2); 366 367fpm[0] = 5.; 368fpm[1] = 1.e-5; 369distr[15] = unur_distr_gamma(fpm,2); 370 371fpm[0] = 5.; 372fpm[1] = 10.; 373fpm[2] = 1000; 374distr[16] = unur_distr_gamma(fpm,3); 375 376fpm[0] = 1.; 377fpm[1] = 4.; 378distr[29] = unur_distr_gamma(fpm,2); 379 380# Laplace distributions 381distr[25] = unur_distr_laplace(NULL,0); 382 383fpm[0] = -10.; 384fpm[1] = 100.; 385distr[26] = unur_distr_laplace(fpm,2); 386 387# Normal distributions 388distr[17] = unur_distr_normal(NULL,0); 389 390fpm[0] = 1.; 391fpm[1] = 1.e-5; 392distr[18] = unur_distr_normal(fpm,2); 393 394fpm[0] = 0.; 395fpm[1] = 1.e+5; 396distr[19] = unur_distr_normal(fpm,2); 397 398# Uniform distributions 399distr[20] = unur_distr_uniform(NULL,0); 400 401fpm[0] = 1.; 402fpm[1] = 20.; 403distr[21] = unur_distr_uniform(fpm,2); 404 405# pdf with piecewise linear function as transformed density with T = -1/sqrt 406distr[27] = unur_distr_cont_new(); 407unur_distr_cont_set_pdf(distr[27],pdf_sqrtlin); 408unur_distr_cont_set_dpdf(distr[27],dpdf_sqrtlin); 409unur_distr_cont_set_cdf(distr[27],cdf_sqrtlin); 410unur_distr_set_name(distr[27],"sqrtlin"); 411unur_distr_cont_set_mode(distr[27],0.); 412unur_distr_cont_set_pdfarea(distr[27],2.); 413 414# pdf with piecewise linear function as transformed density with T = -1/sqrt and shifted mode 415distr[28] = unur_distr_cont_new(); 416unur_distr_cont_set_pdf(distr[28],pdf_sqrtlinshft); 417unur_distr_cont_set_dpdf(distr[28],dpdf_sqrtlinshft); 418unur_distr_cont_set_cdf(distr[28],cdf_sqrtlinshft); 419unur_distr_set_name(distr[28],"sqrtlin"); 420unur_distr_cont_set_mode(distr[28],1000.); 421unur_distr_cont_set_pdfarea(distr[28],2.); 422 423# truncated distributions 424distr[22] = unur_distr_cauchy(NULL,0); 425unur_distr_cont_set_domain(distr[22],0.1,1.); 426unur_distr_cont_upd_mode(distr[22]); 427unur_distr_cont_upd_pdfarea(distr[22]); 428 429# distribution with center 430distr[30] = unur_distr_exponential(NULL,0); 431unur_distr_cont_set_center(distr[30],2.); 432 433# number of distributions: 31 434 435[validate - test chi2:] 436 437# + ... pass test 438# 0 ... fail to initialize generator 439# - ... fail test 440# . ... do not run test 441# # ... comment 442# 443# generators: 444# [0] ... default variant 445# [1] ... use rectangle 446# [2] ... r=0.5 447# [3] ... r=2.0 448# [4] ... default variant but reinitialized with changed domain 449# [5] ... default variant but reinitialized with changed pdf parameters 450# 451# 0 1 2 3 4 5 # distribution 452#--------------------------------------------------------------------- 453 <0> + . + + + + # beta (1, 2) 454 <1> + . + + + + # beta (1, 5) 455 <2> + . + + + + # beta (1, 100) 456 <3> + . + + + + # beta (3, 4) 457 <4> + . + + + + # beta (5, 100) 458x <5> + . + + + + # beta (500, 300) 459 <6> + . + + + + # beta (5, 10, -3, 15) 460 <23> + . + + + + # exponential () 461 <24> + . + + + + # exponential (30, -5) 462 <7> + . . + + + # cauchy () 463 <8> + . . + + + # cauchy (1, 20) 464 <9> + . + + + + # gamma (1) 465 <10> + . + + + + # gamma (2) 466 <11> + . + + + + # gamma (3) 467 <12> + . + + + + # gamma (10) 468x<13> + . + + . + # gamma (1000) 469 <29> + . + + + + # gamma (1, 4) 470 <14> + . + + . + # gamma (5, 1000, 0) 471x<15> + . + + . + # gamma (5, 1e-05, 0) 472x<16> + . + + . + # gamma (5, 10, 100000) 473 <25> + . + + + + # laplace () 474 <26> + - + + . + # laplace (-10, 100) 475 <17> + + + + + + # normal () 476x<18> + . + + . + # normal (1, 1e-05) 477 <19> + . + + + + # normal (1, 1e+05) 478 <20> + . + + + + # uniform () 479 <21> + . + + . + # uniform (1, 20) 480 <22> + . + + . . # cauchy () - truncated 481 <27> + . . + . . # pdf with piecewise linear function as transformed density with T = -1/sqrt 482 <28> + . . + . . # [27] with shifted mode 483 <30> + . + + . . # standard exponential distribution with center at 2 484 485# number of distributions: 31 486 487 488[validate - verify hat:] 489 490# + ... pass test 491# ~ ... fail in at most 1% of samples 492# 0 ... fail to initialize generator 493# - ... fail test 494# . ... do not run test 495# # ... comment 496# 497# generators: 498# [0] ... default variant 499# [1] ... use rectangle 500# [2] ... r=0.5 501# [3] ... r=2.0 502# [4] ... default variant but reinitialized with changed domain 503# [5] ... default variant but reinitialized with changed pdf parameters 504# 505# 0 1 2 3 4 5 # distribution 506#--------------------------------------------------------------------- 507 <0> + . + + + + # beta (1, 2) 508 <1> + . + + + + # beta (1, 5) 509 <2> + . + + + + # beta (1, 100) 510 <3> + . + + + + # beta (3, 4) 511 <4> + . + + + + # beta (5, 100) 512x <5> + . + + + + # beta (500, 300) 513 <6> + . + + + + # beta (5, 10, -3, 15) 514 <23> + . + + + + # exponential () 515 <24> + . + + + + # exponential (30, -5) 516 <7> + . . + + + # cauchy () 517 <8> + . . + + + # cauchy (1, 20) 518 <9> + . + + + + # gamma (1) 519 <10> + . + + + + # gamma (2) 520 <11> + . + + + + # gamma (3) 521 <12> + . + + + + # gamma (10) 522x<13> + . + + . + # gamma (1000) 523 <29> + . + + + + # gamma (1, 4) 524 <14> + . + + . + # gamma (5, 1000, 0) 525x<15> + . + + . + # gamma (5, 1e-05, 0) 526x<16> + . + + . + # gamma (5, 10, 100000) 527 <25> + . + + + + # laplace () 528 <26> + - + + . + # laplace (-10, 100) 529 <17> + + + + + + # normal () 530x<18> + . + + . + # normal (1, 1e-05) 531 <19> + . + + + + # normal (1, 1e+05) 532 <20> + . + + + + # uniform () 533 <21> + . + + . + # uniform (1, 20) 534 <22> + . + + . . # cauchy () - truncated 535 <27> + . . + . . # pdf with piecewise linear function as transformed density with T = -1/sqrt 536 <28> + . . + . . # [27] with shifted mode 537 <30> + . + + . . # standard exponential distribution with center at 2 538 539# number of distributions: 31 540 541 542############################################################################# 543############################################################################# 544 545[verbatim] 546 547/* pdf with piecewise linear function as transformed density with T = -1/sqrt */ 548double pdf_sqrtlin( double x, const UNUR_DISTR *distr ATTRIBUTE__UNUSED) 549{ 550 double y = 1./(fabs(x)+1.); 551 return y*y; 552} 553double dpdf_sqrtlin( double x, const UNUR_DISTR *distr ATTRIBUTE__UNUSED) 554{ 555 double y = 1./(fabs(x)+1.); 556 y = 2.*y*y*y; 557 return ((x<0.) ? y : - y); 558} 559double cdf_sqrtlin( double x, const UNUR_DISTR *distr ATTRIBUTE__UNUSED) 560{ 561 if (x<=0.) 562 return 0.5/(1.-x); 563 else 564 return (1.-0.5/(1.+x)); 565} 566 567/* pdf with piecewise linear function as transformed density with T = -1/sqrt and shifted mode */ 568double pdf_sqrtlinshft( double x, const UNUR_DISTR *distr ATTRIBUTE__UNUSED) 569{ 570 double y; 571 x -= 1000.; 572 y = 1./(fabs(x)+1.); 573 return y*y; 574} 575double dpdf_sqrtlinshft( double x, const UNUR_DISTR *distr ATTRIBUTE__UNUSED) 576{ 577 double y; 578 x -= 1000.; 579 y = 1./(fabs(x)+1.); 580 y = 2.*y*y*y; 581 return ((x<0.) ? y : - y); 582} 583double cdf_sqrtlinshft( double x, const UNUR_DISTR *distr ATTRIBUTE__UNUSED) 584{ 585 x -= 1000.; 586 if (x<=0.) 587 return 0.5/(1.-x); 588 else 589 return (1.-0.5/(1.+x)); 590} 591 592/* dummy function */ 593int unur_nrou_set_pedantic( struct unur_par *par ATTRIBUTE__UNUSED, int pedantic ATTRIBUTE__UNUSED) 594{ return 1; } 595 596############################################################################# 597