1b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar//===-- muldc3_test.c - Test __muldc3 -------------------------------------===//
2b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar//
3b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar//                     The LLVM Compiler Infrastructure
4b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar//
59ad441ffec97db647fee3725b3424284fb913e14Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open
69ad441ffec97db647fee3725b3424284fb913e14Howard Hinnant// Source Licenses. See LICENSE.TXT for details.
7b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar//
8b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar//===----------------------------------------------------------------------===//
9b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar//
10b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar// This file tests __muldc3 for the compiler_rt library.
11b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar//
12b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar//===----------------------------------------------------------------------===//
13b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
14b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar#include "int_lib.h"
15b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar#include <math.h>
16b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar#include <complex.h>
17b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar#include <stdio.h>
18b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
19b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar// Returns: the product of a + ib and c + id
20b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
21b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbardouble _Complex __muldc3(double __a, double __b, double __c, double __d);
22b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
23b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbarenum {zero, non_zero, inf, NaN, non_zero_nan};
24b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
25b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbarint
26b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbarclassify(double _Complex x)
27b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar{
28b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    if (x == 0)
29b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        return zero;
30b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    if (isinf(creal(x)) || isinf(cimag(x)))
31b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        return inf;
32b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    if (isnan(creal(x)) && isnan(cimag(x)))
33b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        return NaN;
34b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    if (isnan(creal(x)))
35b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {
36b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        if (cimag(x) == 0)
37b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            return NaN;
38b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        return non_zero_nan;
39b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    }
40b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    if (isnan(cimag(x)))
41b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {
42b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        if (creal(x) == 0)
43b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            return NaN;
44b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        return non_zero_nan;
45b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    }
46b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    return non_zero;
47b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar}
48b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
49b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbarint test__muldc3(double a, double b, double c, double d)
50b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar{
51b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    double _Complex r = __muldc3(a, b, c, d);
52b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar//     printf("test__muldc3(%f, %f, %f, %f) = %f + I%f\n",
53b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar//             a, b, c, d, creal(r), cimag(r));
54b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar	double _Complex dividend;
55b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar	double _Complex divisor;
56b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
57b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar	__real__ dividend = a;
58b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar	__imag__ dividend = b;
59b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar	__real__ divisor = c;
60b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar	__imag__ divisor = d;
61b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
62b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    switch (classify(dividend))
63b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {
64b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    case zero:
65b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        switch (classify(divisor))
66b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        {
67b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        case zero:
68b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            if (classify(r) != zero)
69b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar                return 1;
70b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            break;
71b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        case non_zero:
72b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            if (classify(r) != zero)
73b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar                return 1;
74b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            break;
75b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        case inf:
76b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            if (classify(r) != NaN)
77b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar                return 1;
78b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            break;
79b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        case NaN:
80b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            if (classify(r) != NaN)
81b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar                return 1;
82b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            break;
83b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        case non_zero_nan:
84b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            if (classify(r) != NaN)
85b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar                return 1;
86b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            break;
87b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        }
88b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        break;
89b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    case non_zero:
90b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        switch (classify(divisor))
91b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        {
92b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        case zero:
93b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            if (classify(r) != zero)
94b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar                return 1;
95b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            break;
96b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        case non_zero:
97b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            if (classify(r) != non_zero)
98b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar                return 1;
99b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            if (r != a * c - b * d + _Complex_I*(a * d + b * c))
100b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar                return 1;
101b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            break;
102b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        case inf:
103b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            if (classify(r) != inf)
104b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar                return 1;
105b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            break;
106b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        case NaN:
107b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            if (classify(r) != NaN)
108b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar                return 1;
109b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            break;
110b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        case non_zero_nan:
111b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            if (classify(r) != NaN)
112b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar                return 1;
113b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            break;
114b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        }
115b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        break;
116b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    case inf:
117b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        switch (classify(divisor))
118b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        {
119b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        case zero:
120b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            if (classify(r) != NaN)
121b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar                return 1;
122b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            break;
123b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        case non_zero:
124b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            if (classify(r) != inf)
125b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar                return 1;
126b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            break;
127b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        case inf:
128b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            if (classify(r) != inf)
129b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar                return 1;
130b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            break;
131b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        case NaN:
132b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            if (classify(r) != NaN)
133b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar                return 1;
134b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            break;
135b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        case non_zero_nan:
136b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            if (classify(r) != inf)
137b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar                return 1;
138b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            break;
139b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        }
140b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        break;
141b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    case NaN:
142b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        switch (classify(divisor))
143b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        {
144b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        case zero:
145b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            if (classify(r) != NaN)
146b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar                return 1;
147b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            break;
148b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        case non_zero:
149b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            if (classify(r) != NaN)
150b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar                return 1;
151b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            break;
152b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        case inf:
153b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            if (classify(r) != NaN)
154b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar                return 1;
155b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            break;
156b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        case NaN:
157b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            if (classify(r) != NaN)
158b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar                return 1;
159b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            break;
160b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        case non_zero_nan:
161b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            if (classify(r) != NaN)
162b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar                return 1;
163b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            break;
164b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        }
165b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        break;
166b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    case non_zero_nan:
167b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        switch (classify(divisor))
168b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        {
169b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        case zero:
170b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            if (classify(r) != NaN)
171b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar                return 1;
172b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            break;
173b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        case non_zero:
174b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            if (classify(r) != NaN)
175b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar                return 1;
176b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            break;
177b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        case inf:
178b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            if (classify(r) != inf)
179b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar                return 1;
180b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            break;
181b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        case NaN:
182b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            if (classify(r) != NaN)
183b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar                return 1;
184b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            break;
185b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        case non_zero_nan:
186b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            if (classify(r) != NaN)
187b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar                return 1;
188b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            break;
189b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        }
190b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        break;
191b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    }
192b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
193b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    return 0;
194b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar}
195b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
196b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbardouble x[][2] =
197b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar{
198b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    { 1.e-6,  1.e-6},
199b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-1.e-6,  1.e-6},
200b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-1.e-6, -1.e-6},
201b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    { 1.e-6, -1.e-6},
202b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
203b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    { 1.e+6,  1.e-6},
204b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-1.e+6,  1.e-6},
205b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-1.e+6, -1.e-6},
206b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    { 1.e+6, -1.e-6},
207b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
208b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    { 1.e-6,  1.e+6},
209b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-1.e-6,  1.e+6},
210b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-1.e-6, -1.e+6},
211b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    { 1.e-6, -1.e+6},
212b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
213b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    { 1.e+6,  1.e+6},
214b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-1.e+6,  1.e+6},
215b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-1.e+6, -1.e+6},
216b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    { 1.e+6, -1.e+6},
217b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
218b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {NAN, NAN},
219b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-INFINITY, NAN},
220b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-2, NAN},
221b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-1, NAN},
222b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-0.5, NAN},
223b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-0., NAN},
224b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {+0., NAN},
225b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {0.5, NAN},
226b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {1, NAN},
227b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {2, NAN},
228b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {INFINITY, NAN},
229b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
230b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {NAN, -INFINITY},
231b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-INFINITY, -INFINITY},
232b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-2, -INFINITY},
233b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-1, -INFINITY},
234b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-0.5, -INFINITY},
235b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-0., -INFINITY},
236b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {+0., -INFINITY},
237b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {0.5, -INFINITY},
238b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {1, -INFINITY},
239b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {2, -INFINITY},
240b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {INFINITY, -INFINITY},
241b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
242b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {NAN, -2},
243b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-INFINITY, -2},
244b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-2, -2},
245b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-1, -2},
246b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-0.5, -2},
247b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-0., -2},
248b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {+0., -2},
249b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {0.5, -2},
250b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {1, -2},
251b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {2, -2},
252b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {INFINITY, -2},
253b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
254b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {NAN, -1},
255b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-INFINITY, -1},
256b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-2, -1},
257b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-1, -1},
258b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-0.5, -1},
259b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-0., -1},
260b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {+0., -1},
261b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {0.5, -1},
262b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {1, -1},
263b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {2, -1},
264b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {INFINITY, -1},
265b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
266b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {NAN, -0.5},
267b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-INFINITY, -0.5},
268b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-2, -0.5},
269b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-1, -0.5},
270b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-0.5, -0.5},
271b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-0., -0.5},
272b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {+0., -0.5},
273b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {0.5, -0.5},
274b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {1, -0.5},
275b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {2, -0.5},
276b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {INFINITY, -0.5},
277b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
278b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {NAN, -0.},
279b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-INFINITY, -0.},
280b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-2, -0.},
281b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-1, -0.},
282b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-0.5, -0.},
283b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-0., -0.},
284b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {+0., -0.},
285b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {0.5, -0.},
286b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {1, -0.},
287b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {2, -0.},
288b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {INFINITY, -0.},
289b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
290b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {NAN, 0.},
291b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-INFINITY, 0.},
292b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-2, 0.},
293b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-1, 0.},
294b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-0.5, 0.},
295b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-0., 0.},
296b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {+0., 0.},
297b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {0.5, 0.},
298b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {1, 0.},
299b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {2, 0.},
300b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {INFINITY, 0.},
301b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
302b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {NAN, 0.5},
303b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-INFINITY, 0.5},
304b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-2, 0.5},
305b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-1, 0.5},
306b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-0.5, 0.5},
307b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-0., 0.5},
308b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {+0., 0.5},
309b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {0.5, 0.5},
310b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {1, 0.5},
311b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {2, 0.5},
312b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {INFINITY, 0.5},
313b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
314b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {NAN, 1},
315b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-INFINITY, 1},
316b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-2, 1},
317b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-1, 1},
318b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-0.5, 1},
319b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-0., 1},
320b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {+0., 1},
321b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {0.5, 1},
322b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {1, 1},
323b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {2, 1},
324b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {INFINITY, 1},
325b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
326b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {NAN, 2},
327b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-INFINITY, 2},
328b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-2, 2},
329b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-1, 2},
330b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-0.5, 2},
331b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-0., 2},
332b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {+0., 2},
333b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {0.5, 2},
334b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {1, 2},
335b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {2, 2},
336b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {INFINITY, 2},
337b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
338b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {NAN, INFINITY},
339b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-INFINITY, INFINITY},
340b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-2, INFINITY},
341b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-1, INFINITY},
342b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-0.5, INFINITY},
343b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {-0., INFINITY},
344b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {+0., INFINITY},
345b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {0.5, INFINITY},
346b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {1, INFINITY},
347b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {2, INFINITY},
348b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {INFINITY, INFINITY}
349b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
350b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar};
351b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
352b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbarint main()
353b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar{
354b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    const unsigned N = sizeof(x) / sizeof(x[0]);
355b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    unsigned i, j;
356b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    for (i = 0; i < N; ++i)
357b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    {
358b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        for (j = 0; j < N; ++j)
359b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        {
360b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar            if (test__muldc3(x[i][0], x[i][1], x[j][0], x[j][1]))
361b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar                return 1;
362b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar        }
363b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    }
364b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar
365b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar    return 0;
366b3a6901e66f55b35aa9e01bcb24134e6a65ea004Daniel Dunbar}
367