math.c revision b1941c615023cab9baf0a78a28df1e3b4972434f
1b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans#include "test/jemalloc_test.h"
2b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans
3b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans#define	MAX_REL_ERR 1.0e-9
4b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans#define	MAX_ABS_ERR 1.0e-9
5b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans
6b1941c615023cab9baf0a78a28df1e3b4972434fJason Evansstatic bool
7b1941c615023cab9baf0a78a28df1e3b4972434fJason Evansdouble_eq_rel(double a, double b, double max_rel_err, double max_abs_err)
8b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans{
9b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	double rel_err;
10b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans
11b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	if (fabs(a - b) < max_abs_err)
12b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans		return (true);
13b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	rel_err = (fabs(b) > fabs(a)) ? fabs((a-b)/b) : fabs((a-b)/a);
14b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	return (rel_err < max_rel_err);
15b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans}
16b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans
17b1941c615023cab9baf0a78a28df1e3b4972434fJason Evansstatic uint64_t
18b1941c615023cab9baf0a78a28df1e3b4972434fJason Evansfactorial(unsigned x)
19b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans{
20b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	uint64_t ret = 1;
21b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	unsigned i;
22b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans
23b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	for (i = 2; i <= x; i++)
24b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans		ret *= (uint64_t)i;
25b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans
26b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	return (ret);
27b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans}
28b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans
29b1941c615023cab9baf0a78a28df1e3b4972434fJason EvansTEST_BEGIN(test_ln_gamma_factorial)
30b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans{
31b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	unsigned x;
32b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans
33b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	/* exp(ln_gamma(x)) == (x-1)! for integer x. */
34b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	for (x = 1; x <= 21; x++) {
35b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans		assert_true(double_eq_rel(exp(ln_gamma(x)),
36b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans		    (double)factorial(x-1), MAX_REL_ERR, MAX_ABS_ERR),
37b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans		    "Incorrect factorial result for x=%u", x);
38b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	}
39b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans}
40b1941c615023cab9baf0a78a28df1e3b4972434fJason EvansTEST_END
41b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans
42b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans/* Expected ln_gamma([0.0..100.0] increment=0.25). */
43b1941c615023cab9baf0a78a28df1e3b4972434fJason Evansstatic const double ln_gamma_misc_expected[] = {
44b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	INFINITY,
45b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	1.28802252469807743, 0.57236494292470008, 0.20328095143129538,
46b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	0.00000000000000000, -0.09827183642181320, -0.12078223763524518,
47b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	-0.08440112102048555, 0.00000000000000000, 0.12487171489239651,
48b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	0.28468287047291918, 0.47521466691493719, 0.69314718055994529,
49b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	0.93580193110872523, 1.20097360234707429, 1.48681557859341718,
50b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	1.79175946922805496, 2.11445692745037128, 2.45373657084244234,
51b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	2.80857141857573644, 3.17805383034794575, 3.56137591038669710,
52b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	3.95781396761871651, 4.36671603662228680, 4.78749174278204581,
53b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	5.21960398699022932, 5.66256205985714178, 6.11591589143154568,
54b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	6.57925121201010121, 7.05218545073853953, 7.53436423675873268,
55b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	8.02545839631598312, 8.52516136106541467, 9.03318691960512332,
56b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	9.54926725730099690, 10.07315123968123949, 10.60460290274525086,
57b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	11.14340011995171231, 11.68933342079726856, 12.24220494005076176,
58b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	12.80182748008146909, 13.36802367147604720, 13.94062521940376342,
59b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	14.51947222506051816, 15.10441257307551943, 15.69530137706046524,
60b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	16.29200047656724237, 16.89437797963419285, 17.50230784587389010,
61b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	18.11566950571089407, 18.73434751193644843, 19.35823122022435427,
62b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	19.98721449566188468, 20.62119544270163018, 21.26007615624470048,
63b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	21.90376249182879320, 22.55216385312342098, 23.20519299513386002,
64b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	23.86276584168908954, 24.52480131594137802, 25.19122118273868338,
65b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	25.86194990184851861, 26.53691449111561340, 27.21604439872720604,
66b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	27.89927138384089389, 28.58652940490193828, 29.27775451504081516,
67b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	29.97288476399884871, 30.67186010608067548, 31.37462231367769050,
68b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	32.08111489594735843, 32.79128302226991565, 33.50507345013689076,
69b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	34.22243445715505317, 34.94331577687681545, 35.66766853819134298,
70b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	36.39544520803305261, 37.12659953718355865, 37.86108650896109395,
71b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	38.59886229060776230, 39.33988418719949465, 40.08411059791735198,
72b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	40.83150097453079752, 41.58201578195490100, 42.33561646075348506,
73b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	43.09226539146988699, 43.85192586067515208, 44.61456202863158893,
74b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	45.38013889847690052, 46.14862228684032885, 46.91997879580877395,
75b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	47.69417578616628361, 48.47118135183522014, 49.25096429545256882,
76b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	50.03349410501914463, 50.81874093156324790, 51.60667556776436982,
77b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	52.39726942748592364, 53.19049452616926743, 53.98632346204390586,
78b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	54.78472939811231157, 55.58568604486942633, 56.38916764371992940,
79b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	57.19514895105859864, 58.00360522298051080, 58.81451220059079787,
80b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	59.62784609588432261, 60.44358357816834371, 61.26170176100199427,
81b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	62.08217818962842927, 62.90499082887649962, 63.73011805151035958,
82b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	64.55753862700632340, 65.38723171073768015, 66.21917683354901385,
83b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	67.05335389170279825, 67.88974313718154008, 68.72832516833013017,
84b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	69.56908092082363737, 70.41199165894616385, 71.25703896716800045,
85b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	72.10420474200799390, 72.95347118416940191, 73.80482079093779646,
86b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	74.65823634883015814, 75.51370092648485866, 76.37119786778275454,
87b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	77.23071078519033961, 78.09222355331530707, 78.95572030266725960,
88b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	79.82118541361435859, 80.68860351052903468, 81.55795945611502873,
89b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	82.42923834590904164, 83.30242550295004378, 84.17750647261028973,
90b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	85.05446701758152983, 85.93329311301090456, 86.81397094178107920,
91b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	87.69648688992882057, 88.58082754219766741, 89.46697967771913795,
92b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	90.35493026581838194, 91.24466646193963015, 92.13617560368709292,
93b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	93.02944520697742803, 93.92446296229978486, 94.82121673107967297,
94b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	95.71969454214321615, 96.61988458827809723, 97.52177522288820910,
95b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	98.42535495673848800, 99.33061245478741341, 100.23753653310367895,
96b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	101.14611615586458981, 102.05634043243354370, 102.96819861451382394,
97b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	103.88168009337621811, 104.79677439715833032, 105.71347118823287303,
98b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	106.63176026064346047, 107.55163153760463501, 108.47307506906540198,
99b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	109.39608102933323153, 110.32063971475740516, 111.24674154146920557,
100b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	112.17437704317786995, 113.10353686902013237, 114.03421178146170689,
101b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	114.96639265424990128, 115.90007047041454769, 116.83523632031698014,
102b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	117.77188139974506953, 118.70999700805310795, 119.64957454634490830,
103b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	120.59060551569974962, 121.53308151543865279, 122.47699424143097247,
104b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	123.42233548443955726, 124.36909712850338394, 125.31727114935689826,
105b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	126.26684961288492559, 127.21782467361175861, 128.17018857322420899,
106b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	129.12393363912724453, 130.07905228303084755, 131.03553699956862033,
107b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	131.99338036494577864, 132.95257503561629164, 133.91311374698926784,
108b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	134.87498931216194364, 135.83819462068046846, 136.80272263732638294,
109b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	137.76856640092901785, 138.73571902320256299, 139.70417368760718091,
110b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	140.67392364823425055, 141.64496222871400732, 142.61728282114600574,
111b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	143.59087888505104047, 144.56574394634486680, 145.54187159633210058,
112b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	146.51925549072063859, 147.49788934865566148, 148.47776695177302031,
113b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	149.45888214327129617, 150.44122882700193600, 151.42480096657754984,
114b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	152.40959258449737490, 153.39559776128982094, 154.38281063467164245,
115b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	155.37122539872302696, 156.36083630307879844, 157.35163765213474107,
116b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	158.34362380426921391, 159.33678917107920370, 160.33112821663092973,
117b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	161.32663545672428995, 162.32330545817117695, 163.32113283808695314,
118b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	164.32011226319519892, 165.32023844914485267, 166.32150615984036790,
119b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	167.32391020678358018, 168.32744544842768164, 169.33210678954270634,
120b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	170.33788918059275375, 171.34478761712384198, 172.35279713916281707,
121b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	173.36191283062726143, 174.37212981874515094, 175.38344327348534080,
122b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	176.39584840699734514, 177.40934047306160437, 178.42391476654847793,
123b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	179.43956662288721304, 180.45629141754378111, 181.47408456550741107,
124b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	182.49294152078630304, 183.51285777591152737, 184.53382886144947861,
125b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	185.55585034552262869, 186.57891783333786861, 187.60302696672312095,
126b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	188.62817342367162610, 189.65435291789341932, 190.68156119837468054,
127b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	191.70979404894376330, 192.73904728784492590, 193.76931676731820176,
128b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	194.80059837318714244, 195.83288802445184729, 196.86618167288995096,
129b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	197.90047530266301123, 198.93576492992946214, 199.97204660246373464,
130b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	201.00931639928148797, 202.04757043027063901, 203.08680483582807597,
131b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	204.12701578650228385, 205.16819948264117102, 206.21035215404597807,
132b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	207.25347005962987623, 208.29754948708190909, 209.34258675253678916,
133b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	210.38857820024875878, 211.43552020227099320, 212.48340915813977858,
134b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	213.53224149456323744, 214.58201366511514152, 215.63272214993284592,
135b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	216.68436345542014010, 217.73693411395422004, 218.79043068359703739,
136b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	219.84484974781133815, 220.90018791517996988, 221.95644181913033322,
137b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	223.01360811766215875, 224.07168349307951871, 225.13066465172661879,
138b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	226.19054832372759734, 227.25133126272962159, 228.31301024565024704,
139b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	229.37558207242807384, 230.43904356577689896, 231.50339157094342113,
140b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	232.56862295546847008, 233.63473460895144740, 234.70172344281823484,
141b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	235.76958639009222907, 236.83832040516844586, 237.90792246359117712,
142b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	238.97838956183431947, 240.04971871708477238, 241.12190696702904802,
143b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	242.19495136964280846, 243.26884900298270509, 244.34359696498191283,
144b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	245.41919237324782443, 246.49563236486270057, 247.57291409618682110,
145b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	248.65103474266476269, 249.72999149863338175, 250.80978157713354904,
146b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	251.89040220972316320, 252.97185064629374551, 254.05412415488834199,
147b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	255.13722002152300661, 256.22113555000953511, 257.30586806178126835,
148b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	258.39141489572085675, 259.47777340799029844, 260.56494097186322279,
149b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	261.65291497755913497, 262.74169283208021852, 263.83127195904967266,
150b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	264.92164979855277807, 266.01282380697938379, 267.10479145686849733,
151b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	268.19755023675537586, 269.29109765101975427, 270.38543121973674488,
152b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	271.48054847852881721, 272.57644697842033565, 273.67312428569374561,
153b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	274.77057798174683967, 275.86880566295326389, 276.96780494052313770,
154b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	278.06757344036617496, 279.16810880295668085, 280.26940868320008349,
155b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	281.37147075030043197, 282.47429268763045229, 283.57787219260217171,
156b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	284.68220697654078322, 285.78729476455760050, 286.89313329542699194,
157b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	287.99972032146268930, 289.10705360839756395, 290.21513093526289140,
158b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	291.32395009427028754, 292.43350889069523646, 293.54380514276073200,
159b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	294.65483668152336350, 295.76660135076059532, 296.87909700685889902,
160b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	297.99232151870342022, 299.10627276756946458, 300.22094864701409733,
161b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	301.33634706277030091, 302.45246593264130297, 303.56930318639643929,
162b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	304.68685676566872189, 305.80512462385280514, 306.92410472600477078,
163b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	308.04379504874236773, 309.16419358014690033, 310.28529831966631036,
164b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	311.40710727801865687, 312.52961847709792664, 313.65282994987899201,
165b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	314.77673974032603610, 315.90134590329950015, 317.02664650446632777,
166b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	318.15263962020929966, 319.27932333753892635, 320.40669575400545455,
167b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	321.53475497761127144, 322.66349912672620803, 323.79292633000159185,
168b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	324.92303472628691452, 326.05382246454587403, 327.18528770377525916,
169b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	328.31742861292224234, 329.45024337080525356, 330.58373016603343331,
170b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	331.71788719692847280, 332.85271267144611329, 333.98820480709991898,
171b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	335.12436183088397001, 336.26118197919845443, 337.39866349777429377,
172b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	338.53680464159958774, 339.67560367484657036, 340.81505887079896411,
173b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	341.95516851178109619, 343.09593088908627578, 344.23734430290727460,
174b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	345.37940706226686416, 346.52211748494903532, 347.66547389743118401,
175b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	348.80947463481720661, 349.95411804077025408, 351.09940246744753267,
176b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	352.24532627543504759, 353.39188783368263103, 354.53908551944078908,
177b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	355.68691771819692349, 356.83538282361303118, 357.98447923746385868,
178b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	359.13420536957539753
179b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans};
180b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans
181b1941c615023cab9baf0a78a28df1e3b4972434fJason EvansTEST_BEGIN(test_ln_gamma_misc)
182b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans{
183b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	unsigned i;
184b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans
185b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	for (i = 1; i < sizeof(ln_gamma_misc_expected)/sizeof(double); i++) {
186b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans		double x = (double)i * 0.25;
187b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans		assert_true(double_eq_rel(ln_gamma(x),
188b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans		    ln_gamma_misc_expected[i], MAX_REL_ERR, MAX_ABS_ERR),
189b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans		    "Incorrect ln_gamma result for i=%u", i);
190b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	}
191b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans}
192b1941c615023cab9baf0a78a28df1e3b4972434fJason EvansTEST_END
193b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans
194b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans/* Expected pt_norm([0.01..0.99] increment=0.01). */
195b1941c615023cab9baf0a78a28df1e3b4972434fJason Evansstatic const double pt_norm_expected[] = {
196b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	-INFINITY,
197b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	-2.32634787404084076, -2.05374891063182252, -1.88079360815125085,
198b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	-1.75068607125216946, -1.64485362695147264, -1.55477359459685305,
199b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	-1.47579102817917063, -1.40507156030963221, -1.34075503369021654,
200b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	-1.28155156554460081, -1.22652812003661049, -1.17498679206608991,
201b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	-1.12639112903880045, -1.08031934081495606, -1.03643338949378938,
202b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	-0.99445788320975281, -0.95416525314619416, -0.91536508784281390,
203b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	-0.87789629505122846, -0.84162123357291418, -0.80642124701824025,
204b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	-0.77219321418868492, -0.73884684918521371, -0.70630256284008752,
205b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	-0.67448975019608171, -0.64334540539291685, -0.61281299101662701,
206b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	-0.58284150727121620, -0.55338471955567281, -0.52440051270804067,
207b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	-0.49585034734745320, -0.46769879911450812, -0.43991316567323380,
208b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	-0.41246312944140462, -0.38532046640756751, -0.35845879325119373,
209b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	-0.33185334643681652, -0.30548078809939738, -0.27931903444745404,
210b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	-0.25334710313579978, -0.22754497664114931, -0.20189347914185077,
211b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	-0.17637416478086135, -0.15096921549677725, -0.12566134685507399,
212b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	-0.10043372051146975, -0.07526986209982976, -0.05015358346473352,
213b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	-0.02506890825871106, 0.00000000000000000, 0.02506890825871106,
214b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	0.05015358346473366, 0.07526986209982990, 0.10043372051146990,
215b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	0.12566134685507413, 0.15096921549677739, 0.17637416478086146,
216b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	0.20189347914185105, 0.22754497664114931, 0.25334710313579978,
217b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	0.27931903444745404, 0.30548078809939738, 0.33185334643681652,
218b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	0.35845879325119373, 0.38532046640756762, 0.41246312944140484,
219b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	0.43991316567323391, 0.46769879911450835, 0.49585034734745348,
220b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	0.52440051270804111, 0.55338471955567303, 0.58284150727121620,
221b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	0.61281299101662701, 0.64334540539291685, 0.67448975019608171,
222b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	0.70630256284008752, 0.73884684918521371, 0.77219321418868492,
223b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	0.80642124701824036, 0.84162123357291441, 0.87789629505122879,
224b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	0.91536508784281423, 0.95416525314619460, 0.99445788320975348,
225b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	1.03643338949378938, 1.08031934081495606, 1.12639112903880045,
226b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	1.17498679206608991, 1.22652812003661049, 1.28155156554460081,
227b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	1.34075503369021654, 1.40507156030963265, 1.47579102817917085,
228b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	1.55477359459685394, 1.64485362695147308, 1.75068607125217102,
229b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	1.88079360815125041, 2.05374891063182208, 2.32634787404084076
230b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans};
231b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans
232b1941c615023cab9baf0a78a28df1e3b4972434fJason EvansTEST_BEGIN(test_pt_norm)
233b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans{
234b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	unsigned i;
235b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans
236b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	for (i = 1; i < sizeof(pt_norm_expected)/sizeof(double); i++) {
237b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans		double p = (double)i * 0.01;
238b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans		assert_true(double_eq_rel(pt_norm(p), pt_norm_expected[i],
239b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans		    MAX_REL_ERR, MAX_ABS_ERR),
240b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans		    "Incorrect pt_norm result for i=%u", i);
241b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	}
242b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans}
243b1941c615023cab9baf0a78a28df1e3b4972434fJason EvansTEST_END
244b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans
245b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans/*
246b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans * Expected pt_chi2(p=[0.01..0.99] increment=0.07,
247b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans *                  df={0.1, 1.1, 10.1, 100.1, 1000.1}).
248b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans */
249b1941c615023cab9baf0a78a28df1e3b4972434fJason Evansstatic const double pt_chi2_df[] = {0.1, 1.1, 10.1, 100.1, 1000.1};
250b1941c615023cab9baf0a78a28df1e3b4972434fJason Evansstatic const double pt_chi2_expected[] = {
251b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	1.168926411457320e-40, 1.347680397072034e-22, 3.886980416666260e-17,
252b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	8.245951724356564e-14, 2.068936347497604e-11, 1.562561743309233e-09,
253b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	5.459543043426564e-08, 1.114775688149252e-06, 1.532101202364371e-05,
254b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	1.553884683726585e-04, 1.239396954915939e-03, 8.153872320255721e-03,
255b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	4.631183739647523e-02, 2.473187311701327e-01, 2.175254800183617e+00,
256b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans
257b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	0.0003729887888876379, 0.0164409238228929513, 0.0521523015190650113,
258b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	0.1064701372271216612, 0.1800913735793082115, 0.2748704281195626931,
259b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	0.3939246282787986497, 0.5420727552260817816, 0.7267265822221973259,
260b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	0.9596554296000253670, 1.2607440376386165326, 1.6671185084541604304,
261b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	2.2604828984738705167, 3.2868613342148607082, 6.9298574921692139839,
262b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans
263b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	2.606673548632508, 4.602913725294877, 5.646152813924212,
264b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	6.488971315540869, 7.249823275816285, 7.977314231410841,
265b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	8.700354939944047, 9.441728024225892, 10.224338321374127,
266b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	11.076435368801061, 12.039320937038386, 13.183878752697167,
267b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	14.657791935084575, 16.885728216339373, 23.361991680031817,
268b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans
269b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	70.14844087392152, 80.92379498849355, 85.53325420085891,
270b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	88.94433120715347, 91.83732712857017, 94.46719943606301,
271b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	96.96896479994635, 99.43412843510363, 101.94074719829733,
272b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	104.57228644307247, 107.43900093448734, 110.71844673417287,
273b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	114.76616819871325, 120.57422505959563, 135.92318818757556,
274b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans
275b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	899.0072447849649, 937.9271278858220, 953.8117189560207,
276b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	965.3079371501154, 974.8974061207954, 983.4936235182347,
277b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	991.5691170518946, 999.4334123954690, 1007.3391826856553,
278b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	1015.5445154999951, 1024.3777075619569, 1034.3538789836223,
279b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	1046.4872561869577, 1063.5717461999654, 1107.0741966053859
280b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans};
281b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans
282b1941c615023cab9baf0a78a28df1e3b4972434fJason EvansTEST_BEGIN(test_pt_chi2)
283b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans{
284b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	unsigned i, j;
285b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	unsigned e = 0;
286b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans
287b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	for (i = 0; i < sizeof(pt_chi2_df)/sizeof(double); i++) {
288b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans		double df = pt_chi2_df[i];
289b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans		double ln_gamma_df = ln_gamma(df * 0.5);
290b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans		for (j = 1; j < 100; j += 7) {
291b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans			double p = (double)j * 0.01;
292b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans			assert_true(double_eq_rel(pt_chi2(p, df, ln_gamma_df),
293b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans			    pt_chi2_expected[e], MAX_REL_ERR, MAX_ABS_ERR),
294b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans			    "Incorrect pt_chi2 result for i=%u, j=%u", i, j);
295b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans			e++;
296b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans		}
297b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	}
298b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans}
299b1941c615023cab9baf0a78a28df1e3b4972434fJason EvansTEST_END
300b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans
301b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans/*
302b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans * Expected pt_gamma(p=[0.1..0.99] increment=0.07,
303b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans *                   shape=[0.5..3.0] increment=0.5).
304b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans */
305b1941c615023cab9baf0a78a28df1e3b4972434fJason Evansstatic const double pt_gamma_shape[] = {0.5, 1.0, 1.5, 2.0, 2.5, 3.0};
306b1941c615023cab9baf0a78a28df1e3b4972434fJason Evansstatic const double pt_gamma_expected[] = {
307b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	7.854392895485103e-05, 5.043466107888016e-03, 1.788288957794883e-02,
308b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	3.900956150232906e-02, 6.913847560638034e-02, 1.093710833465766e-01,
309b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	1.613412523825817e-01, 2.274682115597864e-01, 3.114117323127083e-01,
310b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	4.189466220207417e-01, 5.598106789059246e-01, 7.521856146202706e-01,
311b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	1.036125427911119e+00, 1.532450860038180e+00, 3.317448300510606e+00,
312b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans
313b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	0.01005033585350144, 0.08338160893905107, 0.16251892949777497,
314b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	0.24846135929849966, 0.34249030894677596, 0.44628710262841947,
315b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	0.56211891815354142, 0.69314718055994529, 0.84397007029452920,
316b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	1.02165124753198167, 1.23787435600161766, 1.51412773262977574,
317b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	1.89711998488588196, 2.52572864430825783, 4.60517018598809091,
318b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans
319b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	0.05741590094955853, 0.24747378084860744, 0.39888572212236084,
320b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	0.54394139997444901, 0.69048812513915159, 0.84311389861296104,
321b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	1.00580622221479898, 1.18298694218766931, 1.38038096305861213,
322b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	1.60627736383027453, 1.87396970522337947, 2.20749220408081070,
323b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	2.65852391865854942, 3.37934630984842244, 5.67243336507218476,
324b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans
325b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	0.1485547402532659, 0.4657458011640391, 0.6832386130709406,
326b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	0.8794297834672100, 1.0700752852474524, 1.2629614217350744,
327b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	1.4638400448580779, 1.6783469900166610, 1.9132338090606940,
328b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	2.1778589228618777, 2.4868823970010991, 2.8664695666264195,
329b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	3.3724415436062114, 4.1682658512758071, 6.6383520679938108,
330b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans
331b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	0.2771490383641385, 0.7195001279643727, 0.9969081732265243,
332b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	1.2383497880608061, 1.4675206597269927, 1.6953064251816552,
333b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	1.9291243435606809, 2.1757300955477641, 2.4428032131216391,
334b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	2.7406534569230616, 3.0851445039665513, 3.5043101122033367,
335b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	4.0575997065264637, 4.9182956424675286, 7.5431362346944937,
336b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans
337b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	0.4360451650782932, 0.9983600902486267, 1.3306365880734528,
338b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	1.6129750834753802, 1.8767241606994294, 2.1357032436097660,
339b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	2.3988853336865565, 2.6740603137235603, 2.9697561737517959,
340b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	3.2971457713883265, 3.6731795898504660, 4.1275751617770631,
341b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	4.7230515633946677, 5.6417477865306020, 8.4059469148854635
342b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans};
343b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans
344b1941c615023cab9baf0a78a28df1e3b4972434fJason EvansTEST_BEGIN(test_pt_gamma_shape)
345b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans{
346b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	unsigned i, j;
347b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	unsigned e = 0;
348b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans
349b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	for (i = 0; i < sizeof(pt_gamma_shape)/sizeof(double); i++) {
350b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans		double shape = pt_gamma_shape[i];
351b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans		double ln_gamma_shape = ln_gamma(shape);
352b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans		for (j = 1; j < 100; j += 7) {
353b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans			double p = (double)j * 0.01;
354b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans			assert_true(double_eq_rel(pt_gamma(p, shape, 1.0,
355b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans			    ln_gamma_shape), pt_gamma_expected[e], MAX_REL_ERR,
356b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans			    MAX_ABS_ERR),
357b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans			    "Incorrect pt_gamma result for i=%u, j=%u", i, j);
358b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans			e++;
359b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans		}
360b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	}
361b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans}
362b1941c615023cab9baf0a78a28df1e3b4972434fJason EvansTEST_END
363b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans
364b1941c615023cab9baf0a78a28df1e3b4972434fJason EvansTEST_BEGIN(test_pt_gamma_scale)
365b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans{
366b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	double shape = 1.0;
367b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	double ln_gamma_shape = ln_gamma(shape);
368b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans
369b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	assert_true(double_eq_rel(
370b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	    pt_gamma(0.5, shape, 1.0, ln_gamma_shape) * 10.0,
371b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	    pt_gamma(0.5, shape, 10.0, ln_gamma_shape), MAX_REL_ERR,
372b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	    MAX_ABS_ERR),
373b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	    "Scale should be trivially equivalent to external multiplication");
374b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans}
375b1941c615023cab9baf0a78a28df1e3b4972434fJason EvansTEST_END
376b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans
377b1941c615023cab9baf0a78a28df1e3b4972434fJason Evansint
378b1941c615023cab9baf0a78a28df1e3b4972434fJason Evansmain(void)
379b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans{
380b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans
381b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	return (test(
382b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	    test_ln_gamma_factorial,
383b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	    test_ln_gamma_misc,
384b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	    test_pt_norm,
385b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	    test_pt_chi2,
386b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	    test_pt_gamma_shape,
387b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans	    test_pt_gamma_scale));
388b1941c615023cab9baf0a78a28df1e3b4972434fJason Evans}
389