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