traj circle
[aversive.git] / modules / base / math / fixed_point / test / main.c
1 /*  
2  *  Copyright Droids Corporation, Microb Technology, Eirbot (2005)
3  * 
4  *  This program is free software; you can redistribute it and/or modify
5  *  it under the terms of the GNU General Public License as published by
6  *  the Free Software Foundation; either version 2 of the License, or
7  *  (at your option) any later version.
8  *
9  *  This program is distributed in the hope that it will be useful,
10  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  *  GNU General Public License for more details.
13  *
14  *  You should have received a copy of the GNU General Public License
15  *  along with this program; if not, write to the Free Software
16  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17  *
18  *  Revision : $Id: main.c,v 1.5.4.2 2007-06-12 16:18:43 zer0 Exp $
19  *
20  */
21
22 #include <stdio.h>
23 #include <math.h>
24
25 #include <uart.h>
26 #include <f64.h>
27 #include <f32.h>
28 #include <f16.h>
29
30 #define A 6.25
31 #define B -4.684
32 #define C 0.0566
33
34 int f64_test(void)
35 {
36     f64 a,b,c;
37
38     a = f64_from_double(A);
39     b = f64_from_double(B);
40     c = f64_from_double(C);
41
42     printf("************ F64\n\n");
43
44     printf("*** ADD\n\n");
45     printf("Result is        ");
46     f64_print(f64_add(a,b));
47     printf("\nResult should be %f\n\n", A+B);
48     printf("Result is        ");
49     f64_print(f64_add(b,c));
50     printf("\nResult should be %f\n\n", B+C);
51     printf("Result is        ");
52     f64_print(f64_add(c,a));
53     printf("\nResult should be %f\n\n", C+A);
54
55     printf("*** SUB\n\n");
56     printf("Result is        ");
57     f64_print(f64_sub(a,b));
58     printf("\nResult should be %f\n\n", A-B);
59     printf("Result is        ");
60     f64_print(f64_sub(b,c));
61     printf("\nResult should be %f\n\n", B-C);
62     printf("Result is        ");
63     f64_print(f64_sub(c,a));
64     printf("\nResult should be %f\n\n", C-A);
65
66     printf("*** INV\n\n");
67     printf("Result is        ");
68     f64_print(f64_inv(a));
69     printf("\nResult should be %f\n\n", 1.0/A);
70     printf("Result is        ");
71     f64_print(f64_inv(b));
72     printf("\nResult should be %f\n\n", 1.0/B);
73     printf("Result is        ");
74     f64_print(f64_inv(c));
75     printf("\nResult should be %f\n\n", 1.0/C);
76
77     printf("*** MUL\n\n");
78     printf("Result is        ");
79     f64_print(f64_mul(a,b));
80     printf("\nResult should be %f\n\n", A*B);
81     printf("Result is        ");
82     f64_print(f64_mul(b,c));
83     printf("\nResult should be %f\n\n", B*C);
84     printf("Result is        ");
85     f64_print(f64_mul(c,a));
86     printf("\nResult should be %f\n\n", C*A);
87
88     printf("*** DIV\n\n");
89     printf("Result is        ");
90     f64_print(f64_div(a,b));
91     printf("\nResult should be %f\n\n", A/B);
92     printf("Result is        ");
93     f64_print(f64_div(b,c));
94     printf("\nResult should be %f\n\n", B/C);
95     printf("Result is        ");
96     f64_print(f64_div(c,a));
97     printf("\nResult should be %f\n\n", C/A);
98
99     printf("*** SQRT\n\n");
100     printf("Result is        ");
101     f64_print(f64_sqrt(a));
102     f64_sqrt(a);
103     printf("\nResult should be %f\n\n", sqrt(A));
104     printf("Result is        ");
105     f64_print(f64_sqrt(b));
106     printf("\nResult should be %f\n\n", sqrt(B));
107     printf("Result is        ");
108     f64_print(f64_sqrt(c));
109     printf("\nResult should be %f\n\n", sqrt(C));
110
111
112     return 0;
113 }
114
115
116 int f32_test(void)
117 {
118     f32 a,b,c;
119
120     a = f32_from_double(A);
121     b = f32_from_double(B);
122     c = f32_from_double(C);
123
124     printf("************ F32\n\n");
125
126     printf("*** ADD\n\n");
127     printf("Result is        ");
128     f32_print(f32_add(a,b));
129     printf("\nResult should be %f\n\n", A+B);
130     printf("Result is        ");
131     f32_print(f32_add(b,c));
132     printf("\nResult should be %f\n\n", B+C);
133     printf("Result is        ");
134     f32_print(f32_add(c,a));
135     printf("\nResult should be %f\n\n", C+A);
136
137     printf("*** SUB\n\n");
138     printf("Result is        ");
139     f32_print(f32_sub(a,b));
140     printf("\nResult should be %f\n\n", A-B);
141     printf("Result is        ");
142     f32_print(f32_sub(b,c));
143     printf("\nResult should be %f\n\n", B-C);
144     printf("Result is        ");
145     f32_print(f32_sub(c,a));
146     printf("\nResult should be %f\n\n", C-A);
147
148     printf("*** INV\n\n");
149     printf("Result is        ");
150     f32_print(f32_inv(a));
151     printf("\nResult should be %f\n\n", 1.0/A);
152     printf("Result is        ");
153     f32_print(f32_inv(b));
154     printf("\nResult should be %f\n\n", 1.0/B);
155     printf("Result is        ");
156     f32_print(f32_inv(c));
157     printf("\nResult should be %f\n\n", 1.0/C);
158
159     printf("*** MUL\n\n");
160     printf("Result is        ");
161     f32_print(f32_mul(a,b));
162     printf("\nResult should be %f\n\n", A*B);
163     printf("Result is        ");
164     f32_print(f32_mul(b,c));
165     printf("\nResult should be %f\n\n", B*C);
166     printf("Result is        ");
167     f32_print(f32_mul(c,a));
168     printf("\nResult should be %f\n\n", C*A);
169
170     printf("*** DIV\n\n");
171     printf("Result is        ");
172     f32_print(f32_div(a,b));
173     printf("\nResult should be %f\n\n", A/B);
174     printf("Result is        ");
175     f32_print(f32_div(b,c));
176     printf("\nResult should be %f\n\n", B/C);
177     printf("Result is        ");
178     f32_print(f32_div(c,a));
179     printf("\nResult should be %f\n\n", C/A);
180
181     printf("*** SQRT\n\n");
182     printf("Result is        ");
183     f32_print(f32_sqrt(a));
184     printf("\nResult should be %f\n\n", sqrt(A));
185     printf("Result is        ");
186     f32_print(f32_sqrt(b));
187     printf("\nResult should be %f\n\n", sqrt(B));
188     printf("Result is        ");
189     f32_print(f32_sqrt(c));
190     printf("\nResult should be %f\n\n", sqrt(C));
191
192
193     return 0;
194 }
195
196 int f16_test(void)
197 {
198     f16 a,b,c;
199
200     a = f16_from_double(A);
201     b = f16_from_double(B);
202     c = f16_from_double(C);
203
204     printf("************ F16\n\n");
205
206     printf("*** ADD\n\n");
207     printf("Result is        ");
208     f16_print(f16_add(a,b));
209     printf("\nResult should be %f\n\n", A+B);
210     printf("Result is        ");
211     f16_print(f16_add(b,c));
212     printf("\nResult should be %f\n\n", B+C);
213     printf("Result is        ");
214     f16_print(f16_add(c,a));
215     printf("\nResult should be %f\n\n", C+A);
216
217     printf("*** SUB\n\n");
218     printf("Result is        ");
219     f16_print(f16_sub(a,b));
220     printf("\nResult should be %f\n\n", A-B);
221     printf("Result is        ");
222     f16_print(f16_sub(b,c));
223     printf("\nResult should be %f\n\n", B-C);
224     printf("Result is        ");
225     f16_print(f16_sub(c,a));
226     printf("\nResult should be %f\n\n", C-A);
227
228     printf("*** INV\n\n");
229     printf("Result is        ");
230     f16_print(f16_inv(a));
231     printf("\nResult should be %f\n\n", 1.0/A);
232     printf("Result is        ");
233     f16_print(f16_inv(b));
234     printf("\nResult should be %f\n\n", 1.0/B);
235     printf("Result is        ");
236     f16_print(f16_inv(c));
237     printf("\nResult should be %f\n\n", 1.0/C);
238
239     printf("*** MUL\n\n");
240     printf("Result is        ");
241     f16_print(f16_mul(a,b));
242     printf("\nResult should be %f\n\n", A*B);
243     printf("Result is        ");
244     f16_print(f16_mul(b,c));
245     printf("\nResult should be %f\n\n", B*C);
246     printf("Result is        ");
247     f16_print(f16_mul(c,a));
248     printf("\nResult should be %f\n\n", C*A);
249
250     printf("*** DIV\n\n");
251     printf("Result is        ");
252     f16_print(f16_div(a,b));
253     printf("\nResult should be %f\n\n", A/B);
254     printf("Result is        ");
255     f16_print(f16_div(b,c));
256     printf("\nResult should be %f\n\n", B/C);
257     printf("Result is        ");
258     f16_print(f16_div(c,a));
259     printf("\nResult should be %f\n\n", C/A);
260
261     printf("*** SQRT\n\n");
262     printf("Result is        ");
263     f16_print(f16_sqrt(a));
264     printf("\nResult should be %f\n\n", sqrt(A));
265     printf("Result is        ");
266     f16_print(f16_sqrt(b));
267     printf("\nResult should be %f\n\n", sqrt(B));
268     printf("Result is        ");
269     f16_print(f16_sqrt(c));
270     printf("\nResult should be %f\n\n", sqrt(C));
271
272
273     return 0;
274 }
275
276 int main(void)
277 {
278 #ifndef HOST_VERSION
279     uart_init();
280     fdevopen((void*)uart0_dev_send, (void*)uart0_dev_recv);
281     
282     sei();
283 #endif
284
285     f64_test();
286     f32_test();
287     f16_test();
288     return 0;
289 }