Added MACS source
[htsworkflow.git] / htswanalysis / MACS / lib / gsl / gsl-1.11 / fit / test.c
1 /* These tests are based on the NIST Statistical Reference Datasets
2    See http://www.nist.gov/itl/div898/strd/index.html for more
3    information. */
4
5 #include <config.h>
6 #include <stdlib.h>
7 #include <gsl/gsl_math.h>
8 #include <gsl/gsl_test.h>
9 #include <gsl/gsl_fit.h>
10
11 #include <gsl/gsl_ieee_utils.h>
12
13 size_t norris_n = 36;
14
15 double norris_x[] = { 0.2, 337.4, 118.2, 884.6, 10.1, 226.5, 666.3, 996.3,
16                       448.6, 777.0, 558.2, 0.4, 0.6, 775.5, 666.9, 338.0, 
17                       447.5, 11.6, 556.0, 228.1, 995.8, 887.6, 120.2, 0.3, 
18                       0.3, 556.8, 339.1, 887.2, 999.0, 779.0, 11.1, 118.3,
19                       229.2, 669.1, 448.9, 0.5 } ;
20
21 double norris_y[] = { 0.1, 338.8, 118.1, 888.0, 9.2, 228.1, 668.5, 998.5,
22                       449.1, 778.9, 559.2, 0.3, 0.1, 778.1, 668.8, 339.3, 
23                       448.9, 10.8, 557.7, 228.3, 998.0, 888.8, 119.6, 0.3, 
24                       0.6, 557.6, 339.3, 888.0, 998.5, 778.9, 10.2, 117.6,
25                       228.9, 668.4, 449.2, 0.2};
26
27 size_t noint1_n = 11;
28 double noint1_x[] = { 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70 };
29 double noint1_y[] = { 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140};
30
31 size_t noint2_n = 3;
32 double noint2_x[] = { 4, 5, 6 } ;
33 double noint2_y[] = { 3, 4, 4 } ;
34
35 int
36 main (void)
37 {
38
39
40   double x[1000], y[1000], w[1000];
41
42   size_t xstride = 2, wstride = 3, ystride = 5;
43   size_t i;
44
45   for (i = 0; i < norris_n; i++) 
46     {
47       x[i*xstride] = norris_x[i];
48       w[i*wstride] = 1.0;
49       y[i*ystride] = norris_y[i];
50     }
51
52   gsl_ieee_env_setup();
53
54   {
55     double c0, c1, cov00, cov01, cov11, sumsq;
56        
57     double expected_c0 = -0.262323073774029;
58     double expected_c1 =  1.00211681802045; 
59     double expected_cov00 = pow(0.232818234301152, 2.0);
60     double expected_cov01 = -7.74327536339570e-05;  /* computed from octave */
61     double expected_cov11 = pow(0.429796848199937E-03, 2.0);
62     double expected_sumsq = 26.6173985294224;
63     
64     gsl_fit_linear (x, xstride, y, ystride, norris_n, 
65                     &c0, &c1, &cov00, &cov01, &cov11, &sumsq);
66     
67     /* gsl_fit_wlinear (x, xstride, w, wstride, y, ystride, norris_n, 
68                      &c0, &c1, &cov00, &cov01, &cov11, &sumsq); */
69   
70     gsl_test_rel (c0, expected_c0, 1e-10, "norris gsl_fit_linear c0") ;
71     gsl_test_rel (c1, expected_c1, 1e-10, "norris gsl_fit_linear c1") ;
72     gsl_test_rel (cov00, expected_cov00, 1e-10, "norris gsl_fit_linear cov00") ;
73     gsl_test_rel (cov01, expected_cov01, 1e-10, "norris gsl_fit_linear cov01") ;
74     gsl_test_rel (cov11, expected_cov11, 1e-10, "norris gsl_fit_linear cov11") ;
75     gsl_test_rel (sumsq, expected_sumsq, 1e-10, "norris gsl_fit_linear sumsq") ;
76   }
77
78   {
79     double c0, c1, cov00, cov01, cov11, sumsq;
80        
81     double expected_c0 = -0.262323073774029;
82     double expected_c1 =  1.00211681802045; 
83     double expected_cov00 = 6.92384428759429e-02;  /* computed from octave */
84     double expected_cov01 = -9.89095016390515e-05; /* computed from octave */
85     double expected_cov11 = 2.35960747164148e-07;  /* computed from octave */
86     double expected_sumsq = 26.6173985294224;
87     
88     gsl_fit_wlinear (x, xstride, w, wstride, y, ystride, norris_n, 
89                      &c0, &c1, &cov00, &cov01, &cov11, &sumsq);
90   
91     gsl_test_rel (c0, expected_c0, 1e-10, "norris gsl_fit_wlinear c0") ;
92     gsl_test_rel (c1, expected_c1, 1e-10, "norris gsl_fit_wlinear c1") ;
93     gsl_test_rel (cov00, expected_cov00, 1e-10, "norris gsl_fit_wlinear cov00") ;
94     gsl_test_rel (cov01, expected_cov01, 1e-10, "norris gsl_fit_wlinear cov01") ;
95     gsl_test_rel (cov11, expected_cov11, 1e-10, "norris gsl_fit_wlinear cov11") ;
96     gsl_test_rel (sumsq, expected_sumsq, 1e-10, "norris gsl_fit_wlinear sumsq") ;
97   }
98
99   for (i = 0; i < noint1_n; i++) 
100     {
101       x[i*xstride] = noint1_x[i];
102       w[i*wstride] = 1.0;
103       y[i*ystride] = noint1_y[i];
104     }
105
106   {
107     double c1, cov11, sumsq;
108        
109     double expected_c1 = 2.07438016528926; 
110     double expected_cov11 = pow(0.165289256198347E-01, 2.0);  
111     double expected_sumsq = 127.272727272727;
112     
113     gsl_fit_mul (x, xstride, y, ystride, noint1_n, &c1, &cov11, &sumsq);
114   
115     gsl_test_rel (c1, expected_c1, 1e-10, "noint1 gsl_fit_mul c1") ;
116     gsl_test_rel (cov11, expected_cov11, 1e-10, "noint1 gsl_fit_mul cov11") ;
117     gsl_test_rel (sumsq, expected_sumsq, 1e-10, "noint1 gsl_fit_mul sumsq") ;
118   }
119
120   {
121     double c1, cov11, sumsq;
122        
123     double expected_c1 = 2.07438016528926; 
124     double expected_cov11 = 2.14661371686165e-05; /* computed from octave */
125     double expected_sumsq = 127.272727272727;
126     
127     gsl_fit_wmul (x, xstride, w, wstride, y, ystride, noint1_n, &c1, &cov11, &sumsq);
128
129     gsl_test_rel (c1, expected_c1, 1e-10, "noint1 gsl_fit_wmul c1") ;
130     gsl_test_rel (cov11, expected_cov11, 1e-10, "noint1 gsl_fit_wmul cov11") ;
131     gsl_test_rel (sumsq, expected_sumsq, 1e-10, "noint1 gsl_fit_wmul sumsq") ;
132   }
133
134
135   for (i = 0; i < noint2_n; i++) 
136     {
137       x[i*xstride] = noint2_x[i];
138       w[i*wstride] = 1.0;
139       y[i*ystride] = noint2_y[i];
140     }
141
142   {
143     double c1, cov11, sumsq;
144        
145     double expected_c1 = 0.727272727272727; 
146     double expected_cov11 = pow(0.420827318078432E-01, 2.0);  
147     double expected_sumsq = 0.272727272727273;
148     
149     gsl_fit_mul (x, xstride, y, ystride, noint2_n, &c1, &cov11, &sumsq);
150   
151     gsl_test_rel (c1, expected_c1, 1e-10, "noint2 gsl_fit_mul c1") ;
152     gsl_test_rel (cov11, expected_cov11, 1e-10, "noint2 gsl_fit_mul cov11") ;
153     gsl_test_rel (sumsq, expected_sumsq, 1e-10, "noint2 gsl_fit_mul sumsq") ;
154   }
155
156   {
157     double c1, cov11, sumsq;
158        
159     double expected_c1 = 0.727272727272727; 
160     double expected_cov11 = 1.29870129870130e-02 ; /* computed from octave */
161     double expected_sumsq = 0.272727272727273;
162     
163     gsl_fit_wmul (x, xstride, w, wstride, y, ystride, noint2_n, &c1, &cov11, &sumsq);
164
165     gsl_test_rel (c1, expected_c1, 1e-10, "noint2 gsl_fit_wmul c1") ;
166     gsl_test_rel (cov11, expected_cov11, 1e-10, "noint2 gsl_fit_wmul cov11") ;
167     gsl_test_rel (sumsq, expected_sumsq, 1e-10, "noint2 gsl_fit_wmul sumsq") ;
168   }
169
170   /* now summarize the results */
171
172   exit (gsl_test_summary ());
173 }