1 /* Test fmind2 and fmaxd2 for SPU
2 Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.
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.
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.
32 *@@ fmind2_fmaxd2 - find minimum/maximum value.
35 * boundary test for fmind2/fmaxd2.
52 #include "common-test.h"
53 #include "testutils.h"
58 TEST_SET_START("20060824103000MH","MH", "fmind2_fmaxd2");
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));
65 double x0min = hide_double(1760.135);
66 double x0max = hide_double(19355.03);
68 double x1min = hide_double(-12351.9);
69 double x1max = hide_double(-139.035);
71 double x2min = hide_double(-1.0);
72 double x2max = hide_double(0.0);
74 double x3min = hide_double(nan(""));
75 double x3max = hide_double(-1.0);
77 double x4min = hide_double(-0.0);
78 double x4max = hide_double(0.0);
80 double x5min = denorm_min;
81 double x5max = hide_double(1.0e-323);
83 double x6min = norm_max;
84 double x6max = hide_double(HUGE_VAL);
86 double x7min = hide_double(-HUGE_VAL);
87 double x7max = hide_double(19355.03);
89 double x8min = hide_double(-HUGE_VAL);
90 double x8max = hide_double(HUGE_VAL);
92 double x9min = denorm_max;
93 double x9max = norm_min;
95 vec_double2 x0min_v = spu_splats(x0min);
96 vec_double2 x0max_v = spu_splats(x0max);
98 vec_double2 x1min_v = spu_splats(x1min);
99 vec_double2 x1max_v = spu_splats(x1max);
101 vec_double2 x2min_v = spu_splats(x2min);
102 vec_double2 x2max_v = spu_splats(x2max);
104 vec_double2 x3min_v = spu_splats(x3min);
105 vec_double2 x3max_v = spu_splats(x3max);
107 vec_double2 x4min_v = spu_splats(x4min);
108 vec_double2 x4max_v = spu_splats(x4max);
110 vec_double2 x5min_v = spu_splats(x5min);
111 vec_double2 x5max_v = spu_splats(x5max);
113 vec_double2 x6min_v = spu_splats(x6min);
114 vec_double2 x6max_v = spu_splats(x6max);
116 vec_double2 x7min_v = spu_splats(x7min);
117 vec_double2 x7max_v = spu_splats(x7max);
119 vec_double2 x8min_v = spu_splats(x8min);
120 vec_double2 x8max_v = spu_splats(x8max);
122 vec_double2 x9min_v = spu_splats(x9min);
123 vec_double2 x9max_v = spu_splats(x9max);
125 vec_double2 x51min_v = (vec_double2){x5min, x1min};
126 vec_double2 x51max_v = (vec_double2){x5max, x1max};
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);
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);