195934c3aSSiva Chandra //===-- Unittests for fma ------------------------------------------------===//
295934c3aSSiva Chandra //
395934c3aSSiva Chandra // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
495934c3aSSiva Chandra // See https://llvm.org/LICENSE.txt for license information.
595934c3aSSiva Chandra // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
695934c3aSSiva Chandra //
795934c3aSSiva Chandra //===----------------------------------------------------------------------===//
895934c3aSSiva Chandra 
995934c3aSSiva Chandra #include "FmaTest.h"
1095934c3aSSiva Chandra 
1195934c3aSSiva Chandra #include "src/math/fma.h"
1295934c3aSSiva Chandra 
13*ee899277STue Ly struct Inputs {
14*ee899277STue Ly   double a, b, c;
15*ee899277STue Ly };
16*ee899277STue Ly 
17*ee899277STue Ly struct LlvmLibcFmaTest : public FmaTestTemplate<double> {
test_more_valuesLlvmLibcFmaTest18*ee899277STue Ly   void test_more_values() {
19*ee899277STue Ly     constexpr int N = 236;
20*ee899277STue Ly     constexpr Inputs INPUTS[N] = {
21*ee899277STue Ly         {0x1p+0, 0x2p+0, 0x3p+0},
22*ee899277STue Ly         {0x1.4p+0, 0xcp-4, 0x1p-4},
23*ee899277STue Ly         {0x0p+0, 0x0p+0, 0x0p+0},
24*ee899277STue Ly         {0x1p+0, 0x0p+0, 0x0p+0},
25*ee899277STue Ly         {0x0p+0, 0x1p+0, 0x0p+0},
26*ee899277STue Ly         {0x1p+0, 0x1p+0, 0x1p+0},
27*ee899277STue Ly         {0x0p+0, 0x0p+0, 0x1p+0},
28*ee899277STue Ly         {0x0p+0, 0x0p+0, 0x2p+0},
29*ee899277STue Ly         {0x0p+0, 0x0p+0, 0xf.fffffp+124},
30*ee899277STue Ly         {0x0p+0, 0x0p+0, 0xf.ffffffffffff8p+1020},
31*ee899277STue Ly         {0x0p+0, 0x1p+0, 0x1p+0},
32*ee899277STue Ly         {0x1p+0, 0x0p+0, 0x1p+0},
33*ee899277STue Ly         {0x0p+0, 0x1p+0, 0x2p+0},
34*ee899277STue Ly         {0x1p+0, 0x0p+0, 0x2p+0},
35*ee899277STue Ly         {0x0p+0, 0x1p+0, 0xf.fffffp+124},
36*ee899277STue Ly         {0x0p+0, 0x1p+0, 0xf.ffffffffffff8p+1020},
37*ee899277STue Ly         {0x1p+0, 0x0p+0, 0xf.fffffp+124},
38*ee899277STue Ly         {0x1p+0, 0x0p+0, 0xf.ffffffffffff8p+1020},
39*ee899277STue Ly         {0x4p-128, 0x4p-128, 0x0p+0},
40*ee899277STue Ly         {0x4p-128, 0x4p-1024, 0x0p+0},
41*ee899277STue Ly         {0x4p-128, 0x8p-972, 0x0p+0},
42*ee899277STue Ly         {0x4p-1024, 0x4p-128, 0x0p+0},
43*ee899277STue Ly         {0x4p-1024, 0x4p-1024, 0x0p+0},
44*ee899277STue Ly         {0x4p-1024, 0x8p-972, 0x0p+0},
45*ee899277STue Ly         {0x8p-972, 0x4p-128, 0x0p+0},
46*ee899277STue Ly         {0x8p-972, 0x4p-1024, 0x0p+0},
47*ee899277STue Ly         {0x8p-972, 0x8p-972, 0x0p+0},
48*ee899277STue Ly         {0x4p-128, 0x4p-128, 0x0p+0},
49*ee899277STue Ly         {0x4p-128, 0x4p-1024, 0x0p+0},
50*ee899277STue Ly         {0x4p-128, 0x8p-972, 0x0p+0},
51*ee899277STue Ly         {0x4p-1024, 0x4p-128, 0x0p+0},
52*ee899277STue Ly         {0x4p-1024, 0x4p-1024, 0x0p+0},
53*ee899277STue Ly         {0x4p-1024, 0x8p-972, 0x0p+0},
54*ee899277STue Ly         {0x8p-972, 0x4p-128, 0x0p+0},
55*ee899277STue Ly         {0x8p-972, 0x4p-1024, 0x0p+0},
56*ee899277STue Ly         {0x8p-972, 0x8p-972, 0x0p+0},
57*ee899277STue Ly         {0x4p-128, 0x4p-128, 0x0p+0},
58*ee899277STue Ly         {0x4p-128, 0x4p-1024, 0x0p+0},
59*ee899277STue Ly         {0x4p-128, 0x8p-972, 0x0p+0},
60*ee899277STue Ly         {0x4p-1024, 0x4p-128, 0x0p+0},
61*ee899277STue Ly         {0x4p-1024, 0x4p-1024, 0x0p+0},
62*ee899277STue Ly         {0x4p-1024, 0x8p-972, 0x0p+0},
63*ee899277STue Ly         {0x8p-972, 0x4p-128, 0x0p+0},
64*ee899277STue Ly         {0x8p-972, 0x4p-1024, 0x0p+0},
65*ee899277STue Ly         {0x8p-972, 0x8p-972, 0x0p+0},
66*ee899277STue Ly         {0x4p-128, 0x4p-128, 0x0p+0},
67*ee899277STue Ly         {0x4p-128, 0x4p-1024, 0x0p+0},
68*ee899277STue Ly         {0x4p-128, 0x8p-972, 0x0p+0},
69*ee899277STue Ly         {0x4p-1024, 0x4p-128, 0x0p+0},
70*ee899277STue Ly         {0x4p-1024, 0x4p-1024, 0x0p+0},
71*ee899277STue Ly         {0x4p-1024, 0x8p-972, 0x0p+0},
72*ee899277STue Ly         {0x8p-972, 0x4p-128, 0x0p+0},
73*ee899277STue Ly         {0x8p-972, 0x4p-1024, 0x0p+0},
74*ee899277STue Ly         {0x8p-972, 0x8p-972, 0x0p+0},
75*ee899277STue Ly         {0x4p-128, 0x4p-128, 0x0p+0},
76*ee899277STue Ly         {0x4p-128, 0x4p-1024, 0x0p+0},
77*ee899277STue Ly         {0x4p-128, 0x8p-972, 0x0p+0},
78*ee899277STue Ly         {0x4p-1024, 0x4p-128, 0x0p+0},
79*ee899277STue Ly         {0x4p-1024, 0x4p-1024, 0x0p+0},
80*ee899277STue Ly         {0x4p-1024, 0x8p-972, 0x0p+0},
81*ee899277STue Ly         {0x8p-972, 0x4p-128, 0x0p+0},
82*ee899277STue Ly         {0x8p-972, 0x4p-1024, 0x0p+0},
83*ee899277STue Ly         {0x8p-972, 0x8p-972, 0x0p+0},
84*ee899277STue Ly         {0x4p-128, 0x4p-128, 0x0p+0},
85*ee899277STue Ly         {0x4p-128, 0x4p-1024, 0x0p+0},
86*ee899277STue Ly         {0x4p-128, 0x8p-972, 0x0p+0},
87*ee899277STue Ly         {0x4p-1024, 0x4p-128, 0x0p+0},
88*ee899277STue Ly         {0x4p-1024, 0x4p-1024, 0x0p+0},
89*ee899277STue Ly         {0x4p-1024, 0x8p-972, 0x0p+0},
90*ee899277STue Ly         {0x8p-972, 0x4p-128, 0x0p+0},
91*ee899277STue Ly         {0x8p-972, 0x4p-1024, 0x0p+0},
92*ee899277STue Ly         {0x8p-972, 0x8p-972, 0x0p+0},
93*ee899277STue Ly         {0x4p-128, 0x4p-128, 0x0p+0},
94*ee899277STue Ly         {0x4p-128, 0x4p-1024, 0x0p+0},
95*ee899277STue Ly         {0x4p-128, 0x8p-972, 0x0p+0},
96*ee899277STue Ly         {0x4p-1024, 0x4p-128, 0x0p+0},
97*ee899277STue Ly         {0x4p-1024, 0x4p-1024, 0x0p+0},
98*ee899277STue Ly         {0x4p-1024, 0x8p-972, 0x0p+0},
99*ee899277STue Ly         {0x8p-972, 0x4p-128, 0x0p+0},
100*ee899277STue Ly         {0x8p-972, 0x4p-1024, 0x0p+0},
101*ee899277STue Ly         {0x8p-972, 0x8p-972, 0x0p+0},
102*ee899277STue Ly         {0x4p-128, 0x4p-128, 0x0p+0},
103*ee899277STue Ly         {0x4p-128, 0x4p-1024, 0x0p+0},
104*ee899277STue Ly         {0x4p-128, 0x8p-972, 0x0p+0},
105*ee899277STue Ly         {0x4p-1024, 0x4p-128, 0x0p+0},
106*ee899277STue Ly         {0x4p-1024, 0x4p-1024, 0x0p+0},
107*ee899277STue Ly         {0x4p-1024, 0x8p-972, 0x0p+0},
108*ee899277STue Ly         {0x8p-972, 0x4p-128, 0x0p+0},
109*ee899277STue Ly         {0x8p-972, 0x4p-1024, 0x0p+0},
110*ee899277STue Ly         {0x8p-972, 0x8p-972, 0x0p+0},
111*ee899277STue Ly         {0xf.fffffp+124, 0xf.fffffp+124, 0x4p-128},
112*ee899277STue Ly         {0xf.fffffp+124, 0xf.fffffp+124, 0x4p-1024},
113*ee899277STue Ly         {0xf.fffffp+124, 0xf.fffffp+124, 0x8p-972},
114*ee899277STue Ly         {0xf.fffffp+124, 0xf.ffffffffffff8p+1020, 0x4p-128},
115*ee899277STue Ly         {0xf.fffffp+124, 0xf.ffffffffffff8p+1020, 0x4p-1024},
116*ee899277STue Ly         {0xf.fffffp+124, 0xf.ffffffffffff8p+1020, 0x8p-972},
117*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.fffffp+124, 0x4p-128},
118*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.fffffp+124, 0x4p-1024},
119*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.fffffp+124, 0x8p-972},
120*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.ffffffffffff8p+1020, 0x4p-128},
121*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.ffffffffffff8p+1020, 0x4p-1024},
122*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.ffffffffffff8p+1020, 0x8p-972},
123*ee899277STue Ly         {0xf.fffffp+124, 0xf.fffffp+124, 0x4p-128},
124*ee899277STue Ly         {0xf.fffffp+124, 0xf.fffffp+124, 0x4p-1024},
125*ee899277STue Ly         {0xf.fffffp+124, 0xf.fffffp+124, 0x8p-972},
126*ee899277STue Ly         {0xf.fffffp+124, 0xf.ffffffffffff8p+1020, 0x4p-128},
127*ee899277STue Ly         {0xf.fffffp+124, 0xf.ffffffffffff8p+1020, 0x4p-1024},
128*ee899277STue Ly         {0xf.fffffp+124, 0xf.ffffffffffff8p+1020, 0x8p-972},
129*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.fffffp+124, 0x4p-128},
130*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.fffffp+124, 0x4p-1024},
131*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.fffffp+124, 0x8p-972},
132*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.ffffffffffff8p+1020, 0x4p-128},
133*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.ffffffffffff8p+1020, 0x4p-1024},
134*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.ffffffffffff8p+1020, 0x8p-972},
135*ee899277STue Ly         {0xf.fffffp+124, 0xf.fffffp+124, 0x4p-128},
136*ee899277STue Ly         {0xf.fffffp+124, 0xf.fffffp+124, 0x4p-1024},
137*ee899277STue Ly         {0xf.fffffp+124, 0xf.fffffp+124, 0x8p-972},
138*ee899277STue Ly         {0xf.fffffp+124, 0xf.ffffffffffff8p+1020, 0x4p-128},
139*ee899277STue Ly         {0xf.fffffp+124, 0xf.ffffffffffff8p+1020, 0x4p-1024},
140*ee899277STue Ly         {0xf.fffffp+124, 0xf.ffffffffffff8p+1020, 0x8p-972},
141*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.fffffp+124, 0x4p-128},
142*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.fffffp+124, 0x4p-1024},
143*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.fffffp+124, 0x8p-972},
144*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.ffffffffffff8p+1020, 0x4p-128},
145*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.ffffffffffff8p+1020, 0x4p-1024},
146*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.ffffffffffff8p+1020, 0x8p-972},
147*ee899277STue Ly         {0xf.fffffp+124, 0xf.fffffp+124, 0x4p-128},
148*ee899277STue Ly         {0xf.fffffp+124, 0xf.fffffp+124, 0x4p-1024},
149*ee899277STue Ly         {0xf.fffffp+124, 0xf.fffffp+124, 0x8p-972},
150*ee899277STue Ly         {0xf.fffffp+124, 0xf.ffffffffffff8p+1020, 0x4p-128},
151*ee899277STue Ly         {0xf.fffffp+124, 0xf.ffffffffffff8p+1020, 0x4p-1024},
152*ee899277STue Ly         {0xf.fffffp+124, 0xf.ffffffffffff8p+1020, 0x8p-972},
153*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.fffffp+124, 0x4p-128},
154*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.fffffp+124, 0x4p-1024},
155*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.fffffp+124, 0x8p-972},
156*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.ffffffffffff8p+1020, 0x4p-128},
157*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.ffffffffffff8p+1020, 0x4p-1024},
158*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.ffffffffffff8p+1020, 0x8p-972},
159*ee899277STue Ly         {0xf.fffffp+124, 0xf.fffffp+124, 0x4p-128},
160*ee899277STue Ly         {0xf.fffffp+124, 0xf.fffffp+124, 0x4p-1024},
161*ee899277STue Ly         {0xf.fffffp+124, 0xf.fffffp+124, 0x8p-972},
162*ee899277STue Ly         {0xf.fffffp+124, 0xf.ffffffffffff8p+1020, 0x4p-128},
163*ee899277STue Ly         {0xf.fffffp+124, 0xf.ffffffffffff8p+1020, 0x4p-1024},
164*ee899277STue Ly         {0xf.fffffp+124, 0xf.ffffffffffff8p+1020, 0x8p-972},
165*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.fffffp+124, 0x4p-128},
166*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.fffffp+124, 0x4p-1024},
167*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.fffffp+124, 0x8p-972},
168*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.ffffffffffff8p+1020, 0x4p-128},
169*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.ffffffffffff8p+1020, 0x4p-1024},
170*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.ffffffffffff8p+1020, 0x8p-972},
171*ee899277STue Ly         {0xf.fffffp+124, 0xf.fffffp+124, 0x4p-128},
172*ee899277STue Ly         {0xf.fffffp+124, 0xf.fffffp+124, 0x4p-1024},
173*ee899277STue Ly         {0xf.fffffp+124, 0xf.fffffp+124, 0x8p-972},
174*ee899277STue Ly         {0xf.fffffp+124, 0xf.ffffffffffff8p+1020, 0x4p-128},
175*ee899277STue Ly         {0xf.fffffp+124, 0xf.ffffffffffff8p+1020, 0x4p-1024},
176*ee899277STue Ly         {0xf.fffffp+124, 0xf.ffffffffffff8p+1020, 0x8p-972},
177*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.fffffp+124, 0x4p-128},
178*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.fffffp+124, 0x4p-1024},
179*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.fffffp+124, 0x8p-972},
180*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.ffffffffffff8p+1020, 0x4p-128},
181*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.ffffffffffff8p+1020, 0x4p-1024},
182*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.ffffffffffff8p+1020, 0x8p-972},
183*ee899277STue Ly         {0xf.fffffp+124, 0xf.fffffp+124, 0x4p-128},
184*ee899277STue Ly         {0xf.fffffp+124, 0xf.fffffp+124, 0x4p-1024},
185*ee899277STue Ly         {0xf.fffffp+124, 0xf.fffffp+124, 0x8p-972},
186*ee899277STue Ly         {0xf.fffffp+124, 0xf.ffffffffffff8p+1020, 0x4p-128},
187*ee899277STue Ly         {0xf.fffffp+124, 0xf.ffffffffffff8p+1020, 0x4p-1024},
188*ee899277STue Ly         {0xf.fffffp+124, 0xf.ffffffffffff8p+1020, 0x8p-972},
189*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.fffffp+124, 0x4p-128},
190*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.fffffp+124, 0x4p-1024},
191*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.fffffp+124, 0x8p-972},
192*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.ffffffffffff8p+1020, 0x4p-128},
193*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.ffffffffffff8p+1020, 0x4p-1024},
194*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.ffffffffffff8p+1020, 0x8p-972},
195*ee899277STue Ly         {0xf.fffffp+124, 0xf.fffffp+124, 0x4p-128},
196*ee899277STue Ly         {0xf.fffffp+124, 0xf.fffffp+124, 0x4p-1024},
197*ee899277STue Ly         {0xf.fffffp+124, 0xf.fffffp+124, 0x8p-972},
198*ee899277STue Ly         {0xf.fffffp+124, 0xf.ffffffffffff8p+1020, 0x4p-128},
199*ee899277STue Ly         {0xf.fffffp+124, 0xf.ffffffffffff8p+1020, 0x4p-1024},
200*ee899277STue Ly         {0xf.fffffp+124, 0xf.ffffffffffff8p+1020, 0x8p-972},
201*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.fffffp+124, 0x4p-128},
202*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.fffffp+124, 0x4p-1024},
203*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.fffffp+124, 0x8p-972},
204*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.ffffffffffff8p+1020, 0x4p-128},
205*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.ffffffffffff8p+1020, 0x4p-1024},
206*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0xf.ffffffffffff8p+1020, 0x8p-972},
207*ee899277STue Ly         {0x2.fffp+12, 0x1.000002p+0, 0x1.ffffp-24},
208*ee899277STue Ly         {0x1.fffp+0, 0x1.00001p+0, 0x1.fffp+0},
209*ee899277STue Ly         {0xc.d5e6fp+124, 0x2.6af378p-128, 0x1.f08948p+0},
210*ee899277STue Ly         {0x1.9abcdep+100, 0x2.6af378p-128, 0x3.e1129p-28},
211*ee899277STue Ly         {0xf.fffffp+124, 0x1.001p+0, 0xf.fffffp+124},
212*ee899277STue Ly         {0xf.fffffp+124, 0x1.fffffep+0, 0xf.fffffp+124},
213*ee899277STue Ly         {0xf.fffffp+124, 0x2p+0, 0xf.fffffp+124},
214*ee899277STue Ly         {0x5p-128, 0x8.00002p-4, 0x1p-128},
215*ee899277STue Ly         {0x7.ffffep-128, 0x8.00001p-4, 0x8p-152},
216*ee899277STue Ly         {0x8p-152, 0x8p-4, 0x3.fffff8p-128},
217*ee899277STue Ly         {0x8p-152, 0x8.8p-4, 0x3.fffff8p-128},
218*ee899277STue Ly         {0x8p-152, 0x8p-152, 0x8p+124},
219*ee899277STue Ly         {0x8p-152, 0x8p-152, 0x4p-128},
220*ee899277STue Ly         {0x8p-152, 0x8p-152, 0x3.fffff8p-128},
221*ee899277STue Ly         {0x8p-152, 0x8p-152, 0x8p-152},
222*ee899277STue Ly         {0xf.ffp-4, 0xf.ffp-4, 0xf.fep-4},
223*ee899277STue Ly         {0x4.000008p-128, 0x4.000008p-28, 0x8p+124},
224*ee899277STue Ly         {0x4.000008p-128, 0x4.000008p-28, 0x8p+100},
225*ee899277STue Ly         {0x2.fep+12, 0x1.0000000000001p+0, 0x1.ffep-48},
226*ee899277STue Ly         {0x1.fffp+0, 0x1.0000000000001p+0, 0x1.fffp+0},
227*ee899277STue Ly         {0x1.0000002p+0, 0xf.fffffep-4, 0x1p-300},
228*ee899277STue Ly         {0xe.f56df7797f768p+1020, 0x3.7ab6fbbcbfbb4p-1024,
229*ee899277STue Ly          0x3.40bf1803497f6p+0},
230*ee899277STue Ly         {0x1.deadbeef2feedp+900, 0x3.7ab6fbbcbfbb4p-1024,
231*ee899277STue Ly          0x6.817e300692fecp-124},
232*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0x1.001p+0, 0xf.ffffffffffff8p+1020},
233*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0x1.fffffffffffffp+0,
234*ee899277STue Ly          0xf.ffffffffffff8p+1020},
235*ee899277STue Ly         {0xf.ffffffffffff8p+1020, 0x2p+0, 0xf.ffffffffffff8p+1020},
236*ee899277STue Ly         {0x5.a827999fcef3p-540, 0x5.a827999fcef3p-540, 0x0p+0},
237*ee899277STue Ly         {0x3.bd5b7dde5fddap-496, 0x3.bd5b7dde5fddap-496, 0xd.fc352bc352bap-992},
238*ee899277STue Ly         {0x3.bd5b7dde5fddap-504, 0x3.bd5b7dde5fddap-504,
239*ee899277STue Ly          0xd.fc352bc352bap-1008},
240*ee899277STue Ly         {0x8p-540, 0x4p-540, 0x4p-1076},
241*ee899277STue Ly         {0x1.7fffff8p-968, 0x4p-108, 0x4p-1048},
242*ee899277STue Ly         {0x2.8000008p-968, 0x4p-108, 0x4p-1048},
243*ee899277STue Ly         {0x2.8p-968, 0x4p-108, 0x4p-1048},
244*ee899277STue Ly         {0x2.33956cdae7c2ep-960, 0x3.8e211518bfea2p-108,
245*ee899277STue Ly          0x2.02c2b59766d9p-1024},
246*ee899277STue Ly         {0x3.a5d5dadd1d3a6p-980, 0x2.9c0cd8c5593bap-64, 0x2.49179ac00d15p-1024},
247*ee899277STue Ly         {0x2.2a7aca1773e0cp-908, 0x9.6809186a42038p-128, 0x2.c9e356b3f0fp-1024},
248*ee899277STue Ly         {0x3.ffffffffffffep-712, 0x3.ffffffffffffep-276,
249*ee899277STue Ly          0x3.fffffc0000ffep-984},
250*ee899277STue Ly         {0x5p-1024, 0x8.000000000001p-4, 0x1p-1024},
251*ee899277STue Ly         {0x7.ffffffffffffp-1024, 0x8.0000000000008p-4, 0x4p-1076},
252*ee899277STue Ly         {0x4p-1076, 0x8p-4, 0x3.ffffffffffffcp-1024},
253*ee899277STue Ly         {0x4p-1076, 0x8.8p-4, 0x3.ffffffffffffcp-1024},
254*ee899277STue Ly         {0x4p-1076, 0x4p-1076, 0x8p+1020},
255*ee899277STue Ly         {0x4p-1076, 0x4p-1076, 0x4p-1024},
256*ee899277STue Ly         {0x4p-1076, 0x4p-1076, 0x3.ffffffffffffcp-1024},
257*ee899277STue Ly         {0x4p-1076, 0x4p-1076, 0x4p-1076},
258*ee899277STue Ly         {0xf.ffffffffffff8p-4, 0xf.ffffffffffff8p-4, 0xf.ffffffffffffp-4},
259*ee899277STue Ly         {0x4.0000000000004p-1024, 0x2.0000000000002p-56, 0x8p+1020},
260*ee899277STue Ly         {0x4.0000000000004p-1024, 0x2.0000000000002p-56, 0x4p+968},
261*ee899277STue Ly         {0x7.fffff8p-128, 0x3.fffffcp+24, 0xf.fffffp+124},
262*ee899277STue Ly         {0x7.ffffffffffffcp-1024, 0x7.ffffffffffffcp+52,
263*ee899277STue Ly          0xf.ffffffffffff8p+1020},
264*ee899277STue Ly     };
265*ee899277STue Ly 
266*ee899277STue Ly     for (int i = 0; i < N; ++i) {
267*ee899277STue Ly       for (int signs = 0; signs < 7; ++signs) {
268*ee899277STue Ly         double a = (signs & 4) ? -INPUTS[i].a : INPUTS[i].a;
269*ee899277STue Ly         double b = (signs & 2) ? -INPUTS[i].b : INPUTS[i].b;
270*ee899277STue Ly         double c = (signs & 1) ? -INPUTS[i].c : INPUTS[i].c;
271*ee899277STue Ly         mpfr::TernaryInput<double> input{a, b, c};
272*ee899277STue Ly         ASSERT_MPFR_MATCH_ALL_ROUNDING(mpfr::Operation::Fma, input,
273*ee899277STue Ly                                        __llvm_libc::fma(a, b, c), 0.5);
274*ee899277STue Ly       }
275*ee899277STue Ly     }
276*ee899277STue Ly   }
277*ee899277STue Ly };
27895934c3aSSiva Chandra 
TEST_F(LlvmLibcFmaTest,SpecialNumbers)27995934c3aSSiva Chandra TEST_F(LlvmLibcFmaTest, SpecialNumbers) {
28025226f3eSMichael Jones   test_special_numbers(&__llvm_libc::fma);
28195934c3aSSiva Chandra }
28295934c3aSSiva Chandra 
TEST_F(LlvmLibcFmaTest,SubnormalRange)28395934c3aSSiva Chandra TEST_F(LlvmLibcFmaTest, SubnormalRange) {
28425226f3eSMichael Jones   test_subnormal_range(&__llvm_libc::fma);
28595934c3aSSiva Chandra }
28695934c3aSSiva Chandra 
TEST_F(LlvmLibcFmaTest,NormalRange)28725226f3eSMichael Jones TEST_F(LlvmLibcFmaTest, NormalRange) { test_normal_range(&__llvm_libc::fma); }
288*ee899277STue Ly 
TEST_F(LlvmLibcFmaTest,ExtraValues)289*ee899277STue Ly TEST_F(LlvmLibcFmaTest, ExtraValues) { test_more_values(); }
290