Tizen 2.1 base
[platform/upstream/libbullet.git] / Extras / simdmathlibrary / spu / tests / fmind2_fmaxd2.c
1 /* Test fmind2 and fmaxd2 for SPU
2    Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.
3    All rights reserved.
4
5    Redistribution and use in source and binary forms,
6    with or without modification, are permitted provided that the
7    following conditions are met:
8     * Redistributions of source code must retain the above copyright
9       notice, this list of conditions and the following disclaimer.
10     * Redistributions in binary form must reproduce the above copyright
11       notice, this list of conditions and the following disclaimer in the
12       documentation and/or other materials provided with the distribution.
13     * Neither the name of the Sony Computer Entertainment Inc nor the names
14       of its contributors may be used to endorse or promote products derived
15       from this software without specific prior written permission.
16
17    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20    ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23    SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24    INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25    CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27    POSSIBILITY OF SUCH DAMAGE.
28  */
29
30 /**
31  *
32  *@@ fmind2_fmaxd2 - find minimum/maximum value.
33  *
34  *@brief
35  * boundary test for fmind2/fmaxd2. 
36  *
37  *@pre
38  *
39  *@criteria
40  *
41  *@note
42  *
43  **/
44
45
46
47 #include <stdio.h>
48 #include <stdlib.h>
49 #include <math.h>
50 #include <float.h>
51 #include "simdmath.h"
52 #include "common-test.h"
53 #include "testutils.h"
54
55
56 int main()
57 {
58    TEST_SET_START("20060824103000MH","MH", "fmind2_fmaxd2");
59    
60    double denorm_min = hide_double(make_double(0x0000000000000001ull));
61    double denorm_max = hide_double(make_double(0x000fffffffffffffull));
62    double norm_min   = hide_double(make_double(0x0010000000000000ull));
63    double norm_max   = hide_double(make_double(0x7fefffffffffffffull));
64
65    double x0min = hide_double(1760.135);
66    double x0max = hide_double(19355.03);
67
68    double x1min = hide_double(-12351.9);
69    double x1max = hide_double(-139.035);
70
71    double x2min = hide_double(-1.0);
72    double x2max = hide_double(0.0);
73
74    double x3min = hide_double(nan(""));
75    double x3max = hide_double(-1.0);
76
77    double x4min = hide_double(-0.0);
78    double x4max = hide_double(0.0);
79
80    double x5min = denorm_min;
81    double x5max = hide_double(1.0e-323);
82
83    double x6min = norm_max;
84    double x6max = hide_double(HUGE_VAL);
85
86    double x7min = hide_double(-HUGE_VAL);
87    double x7max = hide_double(19355.03);
88
89    double x8min = hide_double(-HUGE_VAL);
90    double x8max = hide_double(HUGE_VAL);
91
92    double x9min = denorm_max;
93    double x9max = norm_min;
94
95    vec_double2 x0min_v = spu_splats(x0min);
96    vec_double2 x0max_v = spu_splats(x0max);
97
98    vec_double2 x1min_v = spu_splats(x1min); 
99    vec_double2 x1max_v = spu_splats(x1max); 
100
101    vec_double2 x2min_v = spu_splats(x2min); 
102    vec_double2 x2max_v = spu_splats(x2max); 
103
104    vec_double2 x3min_v = spu_splats(x3min); 
105    vec_double2 x3max_v = spu_splats(x3max); 
106
107    vec_double2 x4min_v = spu_splats(x4min); 
108    vec_double2 x4max_v = spu_splats(x4max); 
109
110    vec_double2 x5min_v = spu_splats(x5min); 
111    vec_double2 x5max_v = spu_splats(x5max); 
112
113    vec_double2 x6min_v = spu_splats(x6min); 
114    vec_double2 x6max_v = spu_splats(x6max); 
115
116    vec_double2 x7min_v = spu_splats(x7min); 
117    vec_double2 x7max_v = spu_splats(x7max); 
118
119    vec_double2 x8min_v = spu_splats(x8min); 
120    vec_double2 x8max_v = spu_splats(x8max); 
121
122    vec_double2 x9min_v = spu_splats(x9min); 
123    vec_double2 x9max_v = spu_splats(x9max); 
124
125    vec_double2 x51min_v = (vec_double2){x5min, x1min};
126    vec_double2 x51max_v = (vec_double2){x5max, x1max};
127
128    vec_double2 res_v;
129
130    TEST_START("fmind2");
131    res_v = fmind2(x0min_v, x0max_v);
132    TEST_CHECK("20060824103001MH", allequal_double2( res_v, x0min_v ), 0);
133    res_v = fmind2(x0max_v, x0min_v);      
134    TEST_CHECK("20060824103002MH", allequal_double2( res_v, x0min_v ), 0);
135    res_v = fmind2(x1min_v, x1max_v);
136    TEST_CHECK("20060824103003MH", allequal_double2( res_v, x1min_v ), 0);
137    res_v = fmind2(x1max_v, x1min_v);      
138    TEST_CHECK("20060824103004MH", allequal_double2( res_v, x1min_v ), 0);
139    res_v = fmind2(x2min_v, x2max_v);
140    TEST_CHECK("20060824103005MH", allequal_double2( res_v, x2min_v ), 0);
141    res_v = fmind2(x2max_v, x2min_v);      
142    TEST_CHECK("20060824103006MH", allequal_double2( res_v, x2min_v ), 0);
143    res_v = fmind2(x3min_v, x3max_v);
144    TEST_CHECK("20060824103007MH", allequal_double2( res_v, x3max_v ), 0);
145    res_v = fmind2(x3max_v, x3min_v);
146    TEST_CHECK("20060824103008MH", allequal_double2( res_v, x3max_v ), 0);
147    res_v = fmind2(x4min_v, x4max_v);
148    TEST_CHECK("20060824103009MH", allequal_double2( res_v, x4min_v ), 0);
149    res_v = fmind2(x4max_v, x4min_v);
150    TEST_CHECK("20060824103010MH", allequal_double2( res_v, x4min_v ), 0);
151    res_v = fmind2(x5min_v, x5max_v);
152    TEST_CHECK("20060824103011MH", allequal_double2( res_v, x5min_v ), 0);
153    res_v = fmind2(x5max_v, x5min_v);
154    TEST_CHECK("20060824103012MH", allequal_double2( res_v, x5min_v ), 0);
155    res_v = fmind2(x6min_v, x6max_v);
156    TEST_CHECK("20060824103013MH", allequal_double2( res_v, x6min_v ), 0);
157    res_v = fmind2(x6max_v, x6min_v);
158    TEST_CHECK("20060824103014MH", allequal_double2( res_v, x6min_v ), 0);
159    res_v = fmind2(x7min_v, x7max_v);
160    TEST_CHECK("20060824103015MH", allequal_double2( res_v, x7min_v ), 0);
161    res_v = fmind2(x7max_v, x7min_v);
162    TEST_CHECK("20060824103016MH", allequal_double2( res_v, x7min_v ), 0);
163    res_v = fmind2(x8min_v, x8max_v);
164    TEST_CHECK("20060824103017MH", allequal_double2( res_v, x8min_v ), 0);
165    res_v = fmind2(x8max_v, x8min_v);
166    TEST_CHECK("20060824103018MH", allequal_double2( res_v, x8min_v ), 0);
167    res_v = fmind2(x9min_v, x9max_v);
168    TEST_CHECK("20060824103019MH", allequal_double2( res_v, x9min_v ), 0);
169    res_v = fmind2(x9max_v, x9min_v);
170    TEST_CHECK("20060824103020MH", allequal_double2( res_v, x9min_v ), 0);
171    res_v = fmind2(x51min_v, x51max_v);
172    TEST_CHECK("20060824103021MH", allequal_double2( res_v, x51min_v ), 0);
173    res_v = fmind2(x51max_v, x51min_v);
174    TEST_CHECK("20060824103022MH", allequal_double2( res_v, x51min_v ), 0);
175    
176    TEST_START("fmaxd2");
177    res_v = fmaxd2(x0min_v, x0max_v);
178    TEST_CHECK("20060824103101MH", allequal_double2( res_v, x0max_v ), 0);
179    res_v = fmaxd2(x0max_v, x0min_v);      
180    TEST_CHECK("20060824103102MH", allequal_double2( res_v, x0max_v ), 0);
181    res_v = fmaxd2(x1min_v, x1max_v);
182    TEST_CHECK("20060824103103MH", allequal_double2( res_v, x1max_v ), 0);
183    res_v = fmaxd2(x1max_v, x1min_v);      
184    TEST_CHECK("20060824103104MH", allequal_double2( res_v, x1max_v ), 0);
185    res_v = fmaxd2(x2min_v, x2max_v);
186    TEST_CHECK("20060824103105MH", allequal_double2( res_v, x2max_v ), 0);
187    res_v = fmaxd2(x2max_v, x2min_v);      
188    TEST_CHECK("20060824103106MH", allequal_double2( res_v, x2max_v ), 0);
189    res_v = fmaxd2(x3min_v, x3max_v);
190    TEST_CHECK("20060824103107MH", allequal_double2( res_v, x3max_v ), 0);
191    res_v = fmaxd2(x3max_v, x3min_v);
192    TEST_CHECK("20060824103108MH", allequal_double2( res_v, x3max_v ), 0);
193    res_v = fmaxd2(x4min_v, x4max_v);
194    TEST_CHECK("20060824103109MH", allequal_double2( res_v, x4max_v ), 0);
195    res_v = fmaxd2(x4max_v, x4min_v);
196    TEST_CHECK("20060824103110MH", allequal_double2( res_v, x4max_v ), 0);
197    res_v = fmaxd2(x5min_v, x5max_v);
198    TEST_CHECK("20060824103111MH", allequal_double2( res_v, x5max_v ), 0);
199    res_v = fmaxd2(x5max_v, x5min_v);
200    TEST_CHECK("20060824103112MH", allequal_double2( res_v, x5max_v ), 0);
201    res_v = fmaxd2(x6min_v, x6max_v);
202    TEST_CHECK("20060824103113MH", allequal_double2( res_v, x6max_v ), 0);
203    res_v = fmaxd2(x6max_v, x6min_v);
204    TEST_CHECK("20060824103114MH", allequal_double2( res_v, x6max_v ), 0);
205    res_v = fmaxd2(x7min_v, x7max_v);
206    TEST_CHECK("20060824103115MH", allequal_double2( res_v, x7max_v ), 0);
207    res_v = fmaxd2(x7max_v, x7min_v);
208    TEST_CHECK("20060824103116MH", allequal_double2( res_v, x7max_v ), 0);
209    res_v = fmaxd2(x8min_v, x8max_v);
210    TEST_CHECK("20060824103117MH", allequal_double2( res_v, x8max_v ), 0);
211    res_v = fmaxd2(x8max_v, x8min_v);
212    TEST_CHECK("20060824103118MH", allequal_double2( res_v, x8max_v ), 0);
213    res_v = fmaxd2(x9min_v, x9max_v);
214    TEST_CHECK("20060824103119MH", allequal_double2( res_v, x9max_v ), 0);
215    res_v = fmaxd2(x9max_v, x9min_v);
216    TEST_CHECK("20060824103120MH", allequal_double2( res_v, x9max_v ), 0);
217    res_v = fmaxd2(x51min_v, x51max_v);
218    TEST_CHECK("20060824103121MH", allequal_double2( res_v, x51max_v ), 0);
219    res_v = fmaxd2(x51max_v, x51min_v);
220    TEST_CHECK("20060824103122MH", allequal_double2( res_v, x51max_v ), 0);
221    
222    TEST_SET_DONE();
223    
224    TEST_EXIT();
225 }