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