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