1 /*
2    Copyright 2018 - The OPRECOMP Project Consortium, Alma Mater Studiorum
3    Università di Bologna. All rights reserved.
4 
5    Licensed under the Apache License, Version 2.0 (the "License");
6    you may not use this file except in compliance with the License.
7    You may obtain a copy of the License at
8 
9        http://www.apache.org/licenses/LICENSE-2.0
10 
11    Unless required by applicable law or agreed to in writing, software
12    distributed under the License is distributed on an "AS IS" BASIS,
13    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14    See the License for the specific language governing permissions and
15    limitations under the License.
16 */
17 
18 
19 #include <gtest/gtest.h>
20 #include <flexfloat.hpp>
21 
show(fp_t d)22 void show(fp_t d)
23 {
24     #ifdef FLEXFLOAT_ON_QUAD
25     char buffer[128];
26     quadmath_snprintf(buffer, sizeof buffer, "%.38Qf", d);
27     printf("%s\t", buffer);
28     #else
29     printf(PRINTF_FORMAT "\t", d);
30     #endif
31     uint_t u = *((uint_t *) &d);
32     #ifdef FLEXFLOAT_ON_SINGLE
33     printf("0x%016x\t", u);
34     #endif
35     #ifdef FLEXFLOAT_ON_DOUBLE
36     printf("0x%016lx\t", u);
37     #endif
38     std::cout << std::bitset<NUM_BITS>(u) << std::endl;
39 }
40 
41 class MyTest
42     : public ::testing::TestWithParam<std::tuple<uint64_t, uint64_t>> {
43 };
44 
TEST_P(MyTest,TestFormula)45 TEST_P(MyTest, TestFormula)
46 {
47     uint64_t const in_number = std::get<0>(GetParam());
48     uint64_t const out_number = std::get<1>(GetParam());
49 
50     fp_t d = reinterpret_double_bits_as(in_number);
51     fp_t expected = reinterpret_double_bits_as(out_number);
52 
53     // IEEE half.
54     flexfloat<5, 10> fx = d;
55     fp_t recoverd_fx = (fp_t)(fx);
56 
57      //printf("number:     \t"); show(d);
58      //printf("recoverd_fx:\t"); show(recoverd_fx);
59      //printf("expected:   \t"); show(expected);
60 
61     // Enforces the same reprsentation for nan's.
62     uint_t out = reinterpret_as_double_bits(recoverd_fx);
63 
64     #ifndef FLEXFLOAT_ON_SINGLE
65     #ifdef FLEXFLOAT_ROUNDING
66     ASSERT_EQ(out, out_number);
67     #endif
68     #endif
69     // ASSERT_EQ(recoverd_fx, expected); // does not work for NAN's.
70 }
71 
72 INSTANTIATE_TEST_CASE_P(
73     TestWithParameters_manual_sampels, MyTest,
74     testing::Values(
75 
76         // Case triggering >> 64 (does generates wrong masks)
77         // number:     	6.09397888183593736447e-05	0x3f0ff33333333333
78         // 0011111100001111111100110011001100110011001100110011001100110011
79         // recoverd_sf:	6.09159469604492187500e-05	0x3f0ff00000000000
80         // 0011111100001111111100000000000000000000000000000000000000000000
81         ::testing::make_tuple(0x3f0ff33333333333, 0x3f0ff00000000000),
82 
83         // Case, triggering rounding twice after each other not the same ase
84         // rounding once (sticky bit)
85         // number:     	6.09517097473144544803e-05	0x3f0ff4cccccccccd
86         // 0011111100001111111101001100110011001100110011001100110011001101
87         // recoverd_sf:	6.09755516052246093750e-05	0x3f0ff80000000000
88         // 0011111100001111111110000000000000000000000000000000000000000000
89         ::testing::make_tuple(0x3f0ff4cccccccccd, 0x3f0ff80000000000),
90 
91         // Case that triggers a MANTISSA overflow due rounding, requires the
92         // exponent to be changed.
93         // number:     	3.05056571960449225526e-05	0x3efffccccccccccd
94         // 0011111011111111111111001100110011001100110011001100110011001101
95         // recoverd_sf:	3.05175781250000000000e-05	0x3f00000000000000
96         // 0011111100000000000000000000000000000000000000000000000000000000
97         ::testing::make_tuple(0x3efffccccccccccd, 0x3f00000000000000),
98 
99         // Super ugly (and rare) case! A very small sub-normal number requires
100         // the mantissa bits almost to be moved out of the storage range.
101         // Henceforth, the correct rounding should go either up / or down. In
102         // that case, the rounding depends on the hidden 1, not explicitly
103         // stored in the mantissa. (BUGFIX) add the hidden one, perform correct
104         // rounding and go furhter in the routine. That requires to change the
105         // exponent due rounding at a later point.
106         // number:     	4.76837158203125026470e-08	0x3e6999999999999a
107         // 0011111001101001100110011001100110011001100110011001100110011010
108         // recoverd_sf:	5.96046447753906250000e-08	0x3e70000000000000
109         // 0011111001110000000000000000000000000000000000000000000000000000
110         ::testing::make_tuple(0x3e6999999999999a, 0x3e70000000000000),
111 
112         // A number smaller than the smallest subnormal, requires a full flush
113         // to 0.
114         // number:     	2.38418579101562513235e-08	0x3e5999999999999a
115         // 0011111001011001100110011001100110011001100110011001100110011010
116         // recoverd_sf:	0.00000000000000000000e+00	0x0000000000000000
117         // 0000000000000000000000000000000000000000000000000000000000000000
118         ::testing::make_tuple(0x3e5999999999999a, 0x0000000000000000)));
119 
120 
121 INSTANTIATE_TEST_CASE_P(
122     // Cases showing failuers during a float - Half - float brute force test!
123     TestWithParameters_manual_sampels_002, MyTest,
124     testing::Values(
125         // number:     	1.58346726468704329014e-43	0x370c400000000000
126         // 0011011100001100010000000000000000000000000000000000000000000000
127         // recoverd_sf:	0.00000000000000000000e+00	0x0000000000000000
128         // 0000000000000000000000000000000000000000000000000000000000000000
129         ::testing::make_tuple(0x370c400000000000, 0x0000000000000000),
130         // number:     	4.88279038108885288239e-04	0x3f3ffff680000000
131         // 0011111100111111111111111111011010000000000000000000000000000000
132         // recoverd_sf:	4.88281250000000000000e-04	0x3f40000000000000
133         // 0011111101000000000000000000000000000000000000000000000000000000
134         ::testing::make_tuple(0x3f3ffff680000000, 0x3f40000000000000),
135         // number:     	6.60882968750000000000e+04	0x40f02284c0000000
136         // 0100000011110000001000101000010011000000000000000000000000000000
137         // recoverd_sf:	inf	0x7ff0000000000000
138         // 0111111111110000000000000000000000000000000000000000000000000000
139         ::testing::make_tuple(0x40f02284c0000000, 0x7ff0000000000000),
140         // number:     	nan	0x7ff80e1780000000
141         // 0111111111111000000011100001011110000000000000000000000000000000
142         // recoverd_sf:	nan	0x7ff80c0000000000
143         // 0111111111111000000011000000000000000000000000000000000000000000
144         ::testing::make_tuple(0x7ff80e1780000000, 0x7ff80c0000000000),
145         // number:     	nan	0x7ff80eeeeeeeeeee
146         // 0111111111111000000011101110111011101110111011101110111011101110
147         // recoverd_sf:	nan	0x7ff80c0000000000
148         // 0111111111111000000011000000000000000000000000000000000000000000
149         ::testing::make_tuple(0x7ff80eeeeeeeeeee, 0x7ff80c0000000000),
150         // number:     	-2.98454239100465201773e-08	0xbe6005ec80000000
151         // 1011111001100000000001011110110010000000000000000000000000000000
152         // recoverd_sf:	-5.96046447753906250000e-08	0xbe70000000000000
153         // 1011111001110000000000000000000000000000000000000000000000000000
154         ::testing::make_tuple(0xbe6005ec80000000, 0xbe70000000000000)));
155 
156 
157 INSTANTIATE_TEST_CASE_P(
158     TestWithParametersC1, MyTest,
159     testing::Values(
160         // number:     	1.00000000000000000000e+00	0x3ff0000000000000
161         // 0011111111110000000000000000000000000000000000000000000000000000
162         // recoverd_sf:	1.00000000000000000000e+00	0x3ff0000000000000
163         // 0011111111110000000000000000000000000000000000000000000000000000
164         ::testing::make_tuple(0x3ff0000000000000, 0x3ff0000000000000),
165         // number:     	5.00000000000000000000e-01	0x3fe0000000000000
166         // 0011111111100000000000000000000000000000000000000000000000000000
167         // recoverd_sf:	5.00000000000000000000e-01	0x3fe0000000000000
168         // 0011111111100000000000000000000000000000000000000000000000000000
169         ::testing::make_tuple(0x3fe0000000000000, 0x3fe0000000000000),
170         // number:     	3.33333333333333314830e-01	0x3fd5555555555555
171         // 0011111111010101010101010101010101010101010101010101010101010101
172         // recoverd_sf:	3.33251953125000000000e-01	0x3fd5540000000000
173         // 0011111111010101010101000000000000000000000000000000000000000000
174         ::testing::make_tuple(0x3fd5555555555555, 0x3fd5540000000000),
175         // number:     	2.50000000000000000000e-01	0x3fd0000000000000
176         // 0011111111010000000000000000000000000000000000000000000000000000
177         // recoverd_sf:	2.50000000000000000000e-01	0x3fd0000000000000
178         // 0011111111010000000000000000000000000000000000000000000000000000
179         ::testing::make_tuple(0x3fd0000000000000, 0x3fd0000000000000),
180         // number:     	2.00000000000000011102e-01	0x3fc999999999999a
181         // 0011111111001001100110011001100110011001100110011001100110011010
182         // recoverd_sf:	1.99951171875000000000e-01	0x3fc9980000000000
183         // 0011111111001001100110000000000000000000000000000000000000000000
184         ::testing::make_tuple(0x3fc999999999999a, 0x3fc9980000000000),
185         // number:     	1.66666666666666657415e-01	0x3fc5555555555555
186         // 0011111111000101010101010101010101010101010101010101010101010101
187         // recoverd_sf:	1.66625976562500000000e-01	0x3fc5540000000000
188         // 0011111111000101010101000000000000000000000000000000000000000000
189         ::testing::make_tuple(0x3fc5555555555555, 0x3fc5540000000000),
190         // number:     	1.42857142857142849213e-01	0x3fc2492492492492
191         // 0011111111000010010010010010010010010010010010010010010010010010
192         // recoverd_sf:	1.42822265625000000000e-01	0x3fc2480000000000
193         // 0011111111000010010010000000000000000000000000000000000000000000
194         ::testing::make_tuple(0x3fc2492492492492, 0x3fc2480000000000),
195         // number:     	1.25000000000000000000e-01	0x3fc0000000000000
196         // 0011111111000000000000000000000000000000000000000000000000000000
197         // recoverd_sf:	1.25000000000000000000e-01	0x3fc0000000000000
198         // 0011111111000000000000000000000000000000000000000000000000000000
199         ::testing::make_tuple(0x3fc0000000000000, 0x3fc0000000000000),
200         // number:     	1.11111111111111104943e-01	0x3fbc71c71c71c71c
201         // 0011111110111100011100011100011100011100011100011100011100011100
202         // recoverd_sf:	1.11083984375000000000e-01	0x3fbc700000000000
203         // 0011111110111100011100000000000000000000000000000000000000000000
204         ::testing::make_tuple(0x3fbc71c71c71c71c, 0x3fbc700000000000)));
205 
206 // Brute force snippsets from extracted from softlow
207 INSTANTIATE_TEST_CASE_P(
208     TestWithParameters_BF_001, MyTest,
209     testing::Values(
210         // start: 0
211         // stop:  50
212         // inc:   1
213         ::testing::make_tuple(0x0000000000000000, 0x0000000000000000),
214         ::testing::make_tuple(0x36a0000000000000, 0x0000000000000000),
215         ::testing::make_tuple(0x36b0000000000000, 0x0000000000000000),
216         ::testing::make_tuple(0x36b8000000000000, 0x0000000000000000),
217         ::testing::make_tuple(0x36c0000000000000, 0x0000000000000000),
218         ::testing::make_tuple(0x36c4000000000000, 0x0000000000000000),
219         ::testing::make_tuple(0x36c8000000000000, 0x0000000000000000),
220         ::testing::make_tuple(0x36cc000000000000, 0x0000000000000000),
221         ::testing::make_tuple(0x36d0000000000000, 0x0000000000000000),
222         ::testing::make_tuple(0x36d2000000000000, 0x0000000000000000),
223         ::testing::make_tuple(0x36d4000000000000, 0x0000000000000000),
224         ::testing::make_tuple(0x36d6000000000000, 0x0000000000000000),
225         ::testing::make_tuple(0x36d8000000000000, 0x0000000000000000),
226         ::testing::make_tuple(0x36da000000000000, 0x0000000000000000),
227         ::testing::make_tuple(0x36dc000000000000, 0x0000000000000000),
228         ::testing::make_tuple(0x36de000000000000, 0x0000000000000000),
229         ::testing::make_tuple(0x36e0000000000000, 0x0000000000000000),
230         ::testing::make_tuple(0x36e1000000000000, 0x0000000000000000),
231         ::testing::make_tuple(0x36e2000000000000, 0x0000000000000000),
232         ::testing::make_tuple(0x36e3000000000000, 0x0000000000000000),
233         ::testing::make_tuple(0x36e4000000000000, 0x0000000000000000),
234         ::testing::make_tuple(0x36e5000000000000, 0x0000000000000000),
235         ::testing::make_tuple(0x36e6000000000000, 0x0000000000000000),
236         ::testing::make_tuple(0x36e7000000000000, 0x0000000000000000),
237         ::testing::make_tuple(0x36e8000000000000, 0x0000000000000000),
238         ::testing::make_tuple(0x36e9000000000000, 0x0000000000000000),
239         ::testing::make_tuple(0x36ea000000000000, 0x0000000000000000),
240         ::testing::make_tuple(0x36eb000000000000, 0x0000000000000000),
241         ::testing::make_tuple(0x36ec000000000000, 0x0000000000000000),
242         ::testing::make_tuple(0x36ed000000000000, 0x0000000000000000),
243         ::testing::make_tuple(0x36ee000000000000, 0x0000000000000000),
244         ::testing::make_tuple(0x36ef000000000000, 0x0000000000000000),
245         ::testing::make_tuple(0x36f0000000000000, 0x0000000000000000),
246         ::testing::make_tuple(0x36f0800000000000, 0x0000000000000000),
247         ::testing::make_tuple(0x36f1000000000000, 0x0000000000000000),
248         ::testing::make_tuple(0x36f1800000000000, 0x0000000000000000),
249         ::testing::make_tuple(0x36f2000000000000, 0x0000000000000000),
250         ::testing::make_tuple(0x36f2800000000000, 0x0000000000000000),
251         ::testing::make_tuple(0x36f3000000000000, 0x0000000000000000),
252         ::testing::make_tuple(0x36f3800000000000, 0x0000000000000000),
253         ::testing::make_tuple(0x36f4000000000000, 0x0000000000000000),
254         ::testing::make_tuple(0x36f4800000000000, 0x0000000000000000),
255         ::testing::make_tuple(0x36f5000000000000, 0x0000000000000000),
256         ::testing::make_tuple(0x36f5800000000000, 0x0000000000000000),
257         ::testing::make_tuple(0x36f6000000000000, 0x0000000000000000),
258         ::testing::make_tuple(0x36f6800000000000, 0x0000000000000000),
259         ::testing::make_tuple(0x36f7000000000000, 0x0000000000000000),
260         ::testing::make_tuple(0x36f7800000000000, 0x0000000000000000),
261         ::testing::make_tuple(0x36f8000000000000, 0x0000000000000000),
262         ::testing::make_tuple(0x36f8800000000000, 0x0000000000000000)));
263 
264 INSTANTIATE_TEST_CASE_P(
265     TestWithParameters_BF_002, MyTest,
266     testing::Values(
267         // start: 97495757619
268         // stop:  97495757669
269         // inc:   1
270         ::testing::make_tuple(0xbe66666660000000, 0xbe70000000000000),
271         ::testing::make_tuple(0xbe66666680000000, 0xbe70000000000000),
272         ::testing::make_tuple(0xbe666666a0000000, 0xbe70000000000000),
273         ::testing::make_tuple(0xbe666666c0000000, 0xbe70000000000000),
274         ::testing::make_tuple(0xbe666666e0000000, 0xbe70000000000000),
275         ::testing::make_tuple(0xbe66666700000000, 0xbe70000000000000),
276         ::testing::make_tuple(0xbe66666720000000, 0xbe70000000000000),
277         ::testing::make_tuple(0xbe66666740000000, 0xbe70000000000000),
278         ::testing::make_tuple(0xbe66666760000000, 0xbe70000000000000),
279         ::testing::make_tuple(0xbe66666780000000, 0xbe70000000000000),
280         ::testing::make_tuple(0xbe666667a0000000, 0xbe70000000000000),
281         ::testing::make_tuple(0xbe666667c0000000, 0xbe70000000000000),
282         ::testing::make_tuple(0xbe666667e0000000, 0xbe70000000000000),
283         ::testing::make_tuple(0xbe66666800000000, 0xbe70000000000000),
284         ::testing::make_tuple(0xbe66666820000000, 0xbe70000000000000),
285         ::testing::make_tuple(0xbe66666840000000, 0xbe70000000000000),
286         ::testing::make_tuple(0xbe66666860000000, 0xbe70000000000000),
287         ::testing::make_tuple(0xbe66666880000000, 0xbe70000000000000),
288         ::testing::make_tuple(0xbe666668a0000000, 0xbe70000000000000),
289         ::testing::make_tuple(0xbe666668c0000000, 0xbe70000000000000),
290         ::testing::make_tuple(0xbe666668e0000000, 0xbe70000000000000),
291         ::testing::make_tuple(0xbe66666900000000, 0xbe70000000000000),
292         ::testing::make_tuple(0xbe66666920000000, 0xbe70000000000000),
293         ::testing::make_tuple(0xbe66666940000000, 0xbe70000000000000),
294         ::testing::make_tuple(0xbe66666960000000, 0xbe70000000000000),
295         ::testing::make_tuple(0xbe66666980000000, 0xbe70000000000000),
296         ::testing::make_tuple(0xbe666669a0000000, 0xbe70000000000000),
297         ::testing::make_tuple(0xbe666669c0000000, 0xbe70000000000000),
298         ::testing::make_tuple(0xbe666669e0000000, 0xbe70000000000000),
299         ::testing::make_tuple(0xbe66666a00000000, 0xbe70000000000000),
300         ::testing::make_tuple(0xbe66666a20000000, 0xbe70000000000000),
301         ::testing::make_tuple(0xbe66666a40000000, 0xbe70000000000000),
302         ::testing::make_tuple(0xbe66666a60000000, 0xbe70000000000000),
303         ::testing::make_tuple(0xbe66666a80000000, 0xbe70000000000000),
304         ::testing::make_tuple(0xbe66666aa0000000, 0xbe70000000000000),
305         ::testing::make_tuple(0xbe66666ac0000000, 0xbe70000000000000),
306         ::testing::make_tuple(0xbe66666ae0000000, 0xbe70000000000000),
307         ::testing::make_tuple(0xbe66666b00000000, 0xbe70000000000000),
308         ::testing::make_tuple(0xbe66666b20000000, 0xbe70000000000000),
309         ::testing::make_tuple(0xbe66666b40000000, 0xbe70000000000000),
310         ::testing::make_tuple(0xbe66666b60000000, 0xbe70000000000000),
311         ::testing::make_tuple(0xbe66666b80000000, 0xbe70000000000000),
312         ::testing::make_tuple(0xbe66666ba0000000, 0xbe70000000000000),
313         ::testing::make_tuple(0xbe66666bc0000000, 0xbe70000000000000),
314         ::testing::make_tuple(0xbe66666be0000000, 0xbe70000000000000),
315         ::testing::make_tuple(0xbe66666c00000000, 0xbe70000000000000),
316         ::testing::make_tuple(0xbe66666c20000000, 0xbe70000000000000),
317         ::testing::make_tuple(0xbe66666c40000000, 0xbe70000000000000),
318         ::testing::make_tuple(0xbe66666c60000000, 0xbe70000000000000),
319         ::testing::make_tuple(0xbe66666c80000000, 0xbe70000000000000)));
320 
321 INSTANTIATE_TEST_CASE_P(
322     TestWithParameters_BF_003, MyTest,
323     testing::Values(
324         // start: 214318868070
325         // stop:  214318868120
326         // inc:   1
327         ::testing::make_tuple(0xc4ccccccc0000000, 0xfff0000000000000),
328         ::testing::make_tuple(0xc4cccccce0000000, 0xfff0000000000000),
329         ::testing::make_tuple(0xc4cccccd00000000, 0xfff0000000000000),
330         ::testing::make_tuple(0xc4cccccd20000000, 0xfff0000000000000),
331         ::testing::make_tuple(0xc4cccccd40000000, 0xfff0000000000000),
332         ::testing::make_tuple(0xc4cccccd60000000, 0xfff0000000000000),
333         ::testing::make_tuple(0xc4cccccd80000000, 0xfff0000000000000),
334         ::testing::make_tuple(0xc4cccccda0000000, 0xfff0000000000000),
335         ::testing::make_tuple(0xc4cccccdc0000000, 0xfff0000000000000),
336         ::testing::make_tuple(0xc4cccccde0000000, 0xfff0000000000000),
337         ::testing::make_tuple(0xc4ccccce00000000, 0xfff0000000000000),
338         ::testing::make_tuple(0xc4ccccce20000000, 0xfff0000000000000),
339         ::testing::make_tuple(0xc4ccccce40000000, 0xfff0000000000000),
340         ::testing::make_tuple(0xc4ccccce60000000, 0xfff0000000000000),
341         ::testing::make_tuple(0xc4ccccce80000000, 0xfff0000000000000),
342         ::testing::make_tuple(0xc4cccccea0000000, 0xfff0000000000000),
343         ::testing::make_tuple(0xc4cccccec0000000, 0xfff0000000000000),
344         ::testing::make_tuple(0xc4cccccee0000000, 0xfff0000000000000),
345         ::testing::make_tuple(0xc4cccccf00000000, 0xfff0000000000000),
346         ::testing::make_tuple(0xc4cccccf20000000, 0xfff0000000000000),
347         ::testing::make_tuple(0xc4cccccf40000000, 0xfff0000000000000),
348         ::testing::make_tuple(0xc4cccccf60000000, 0xfff0000000000000),
349         ::testing::make_tuple(0xc4cccccf80000000, 0xfff0000000000000),
350         ::testing::make_tuple(0xc4cccccfa0000000, 0xfff0000000000000),
351         ::testing::make_tuple(0xc4cccccfc0000000, 0xfff0000000000000),
352         ::testing::make_tuple(0xc4cccccfe0000000, 0xfff0000000000000),
353         ::testing::make_tuple(0xc4ccccd000000000, 0xfff0000000000000),
354         ::testing::make_tuple(0xc4ccccd020000000, 0xfff0000000000000),
355         ::testing::make_tuple(0xc4ccccd040000000, 0xfff0000000000000),
356         ::testing::make_tuple(0xc4ccccd060000000, 0xfff0000000000000),
357         ::testing::make_tuple(0xc4ccccd080000000, 0xfff0000000000000),
358         ::testing::make_tuple(0xc4ccccd0a0000000, 0xfff0000000000000),
359         ::testing::make_tuple(0xc4ccccd0c0000000, 0xfff0000000000000),
360         ::testing::make_tuple(0xc4ccccd0e0000000, 0xfff0000000000000),
361         ::testing::make_tuple(0xc4ccccd100000000, 0xfff0000000000000),
362         ::testing::make_tuple(0xc4ccccd120000000, 0xfff0000000000000),
363         ::testing::make_tuple(0xc4ccccd140000000, 0xfff0000000000000),
364         ::testing::make_tuple(0xc4ccccd160000000, 0xfff0000000000000),
365         ::testing::make_tuple(0xc4ccccd180000000, 0xfff0000000000000),
366         ::testing::make_tuple(0xc4ccccd1a0000000, 0xfff0000000000000),
367         ::testing::make_tuple(0xc4ccccd1c0000000, 0xfff0000000000000),
368         ::testing::make_tuple(0xc4ccccd1e0000000, 0xfff0000000000000),
369         ::testing::make_tuple(0xc4ccccd200000000, 0xfff0000000000000),
370         ::testing::make_tuple(0xc4ccccd220000000, 0xfff0000000000000),
371         ::testing::make_tuple(0xc4ccccd240000000, 0xfff0000000000000),
372         ::testing::make_tuple(0xc4ccccd260000000, 0xfff0000000000000),
373         ::testing::make_tuple(0xc4ccccd280000000, 0xfff0000000000000),
374         ::testing::make_tuple(0xc4ccccd2a0000000, 0xfff0000000000000),
375         ::testing::make_tuple(0xc4ccccd2c0000000, 0xfff0000000000000),
376         ::testing::make_tuple(0xc4ccccd2e0000000, 0xfff0000000000000)));
377 
378 INSTANTIATE_TEST_CASE_P(
379     TestWithParameters_BF_004, MyTest,
380     testing::Values(
381         // start: 429492434632
382         // stop:  429492434682
383         // inc:   1
384         ::testing::make_tuple(0xffffced900000000, 0xffffcc0000000000),
385         ::testing::make_tuple(0xffffced920000000, 0xffffcc0000000000),
386         ::testing::make_tuple(0xffffced940000000, 0xffffcc0000000000),
387         ::testing::make_tuple(0xffffced960000000, 0xffffcc0000000000),
388         ::testing::make_tuple(0xffffced980000000, 0xffffcc0000000000),
389         ::testing::make_tuple(0xffffced9a0000000, 0xffffcc0000000000),
390         ::testing::make_tuple(0xffffced9c0000000, 0xffffcc0000000000),
391         ::testing::make_tuple(0xffffced9e0000000, 0xffffcc0000000000),
392         ::testing::make_tuple(0xffffceda00000000, 0xffffcc0000000000),
393         ::testing::make_tuple(0xffffceda20000000, 0xffffcc0000000000),
394         ::testing::make_tuple(0xffffceda40000000, 0xffffcc0000000000),
395         ::testing::make_tuple(0xffffceda60000000, 0xffffcc0000000000),
396         ::testing::make_tuple(0xffffceda80000000, 0xffffcc0000000000),
397         ::testing::make_tuple(0xffffcedaa0000000, 0xffffcc0000000000),
398         ::testing::make_tuple(0xffffcedac0000000, 0xffffcc0000000000),
399         ::testing::make_tuple(0xffffcedae0000000, 0xffffcc0000000000),
400         ::testing::make_tuple(0xffffcedb00000000, 0xffffcc0000000000),
401         ::testing::make_tuple(0xffffcedb20000000, 0xffffcc0000000000),
402         ::testing::make_tuple(0xffffcedb40000000, 0xffffcc0000000000),
403         ::testing::make_tuple(0xffffcedb60000000, 0xffffcc0000000000),
404         ::testing::make_tuple(0xffffcedb80000000, 0xffffcc0000000000),
405         ::testing::make_tuple(0xffffcedba0000000, 0xffffcc0000000000),
406         ::testing::make_tuple(0xffffcedbc0000000, 0xffffcc0000000000),
407         ::testing::make_tuple(0xffffcedbe0000000, 0xffffcc0000000000),
408         ::testing::make_tuple(0xffffcedc00000000, 0xffffcc0000000000),
409         ::testing::make_tuple(0xffffcedc20000000, 0xffffcc0000000000),
410         ::testing::make_tuple(0xffffcedc40000000, 0xffffcc0000000000),
411         ::testing::make_tuple(0xffffcedc60000000, 0xffffcc0000000000),
412         ::testing::make_tuple(0xffffcedc80000000, 0xffffcc0000000000),
413         ::testing::make_tuple(0xffffcedca0000000, 0xffffcc0000000000),
414         ::testing::make_tuple(0xffffcedcc0000000, 0xffffcc0000000000),
415         ::testing::make_tuple(0xffffcedce0000000, 0xffffcc0000000000),
416         ::testing::make_tuple(0xffffcedd00000000, 0xffffcc0000000000),
417         ::testing::make_tuple(0xffffcedd20000000, 0xffffcc0000000000),
418         ::testing::make_tuple(0xffffcedd40000000, 0xffffcc0000000000),
419         ::testing::make_tuple(0xffffcedd60000000, 0xffffcc0000000000),
420         ::testing::make_tuple(0xffffcedd80000000, 0xffffcc0000000000),
421         ::testing::make_tuple(0xffffcedda0000000, 0xffffcc0000000000),
422         ::testing::make_tuple(0xffffceddc0000000, 0xffffcc0000000000),
423         ::testing::make_tuple(0xffffcedde0000000, 0xffffcc0000000000),
424         ::testing::make_tuple(0xffffcede00000000, 0xffffcc0000000000),
425         ::testing::make_tuple(0xffffcede20000000, 0xffffcc0000000000),
426         ::testing::make_tuple(0xffffcede40000000, 0xffffcc0000000000),
427         ::testing::make_tuple(0xffffcede60000000, 0xffffcc0000000000),
428         ::testing::make_tuple(0xffffcede80000000, 0xffffcc0000000000),
429         ::testing::make_tuple(0xffffcedea0000000, 0xffffcc0000000000),
430         ::testing::make_tuple(0xffffcedec0000000, 0xffffcc0000000000),
431         ::testing::make_tuple(0xffffcedee0000000, 0xffffcc0000000000),
432         ::testing::make_tuple(0xffffcedf00000000, 0xffffcc0000000000),
433         ::testing::make_tuple(0xffffcedf20000000, 0xffffcc0000000000)));
434 
435 
436 INSTANTIATE_TEST_CASE_P(
437     TestWithParameters_BF_005, MyTest,
438     testing::Values(
439         // start: 97495757619
440         // stop:  97548186419
441         // inc:   1048576
442         ::testing::make_tuple(0xbe66666660000000, 0xbe70000000000000),
443         ::testing::make_tuple(0xbe68666660000000, 0xbe70000000000000),
444         ::testing::make_tuple(0xbe6a666660000000, 0xbe70000000000000),
445         ::testing::make_tuple(0xbe6c666660000000, 0xbe70000000000000),
446         ::testing::make_tuple(0xbe6e666660000000, 0xbe70000000000000),
447         ::testing::make_tuple(0xbe70666660000000, 0xbe70000000000000),
448         ::testing::make_tuple(0xbe72666660000000, 0xbe70000000000000),
449         ::testing::make_tuple(0xbe74666660000000, 0xbe70000000000000),
450         ::testing::make_tuple(0xbe76666660000000, 0xbe70000000000000),
451         ::testing::make_tuple(0xbe78666660000000, 0xbe80000000000000),
452         ::testing::make_tuple(0xbe7a666660000000, 0xbe80000000000000),
453         ::testing::make_tuple(0xbe7c666660000000, 0xbe80000000000000),
454         ::testing::make_tuple(0xbe7e666660000000, 0xbe80000000000000),
455         ::testing::make_tuple(0xbe80666660000000, 0xbe80000000000000),
456         ::testing::make_tuple(0xbe82666660000000, 0xbe80000000000000),
457         ::testing::make_tuple(0xbe84666660000000, 0xbe88000000000000),
458         ::testing::make_tuple(0xbe86666660000000, 0xbe88000000000000),
459         ::testing::make_tuple(0xbe88666660000000, 0xbe88000000000000),
460         ::testing::make_tuple(0xbe8a666660000000, 0xbe88000000000000),
461         ::testing::make_tuple(0xbe8c666660000000, 0xbe90000000000000),
462         ::testing::make_tuple(0xbe8e666660000000, 0xbe90000000000000),
463         ::testing::make_tuple(0xbe90666660000000, 0xbe90000000000000),
464         ::testing::make_tuple(0xbe92666660000000, 0xbe94000000000000),
465         ::testing::make_tuple(0xbe94666660000000, 0xbe94000000000000),
466         ::testing::make_tuple(0xbe96666660000000, 0xbe98000000000000),
467         ::testing::make_tuple(0xbe98666660000000, 0xbe98000000000000),
468         ::testing::make_tuple(0xbe9a666660000000, 0xbe9c000000000000),
469         ::testing::make_tuple(0xbe9c666660000000, 0xbe9c000000000000),
470         ::testing::make_tuple(0xbe9e666660000000, 0xbea0000000000000),
471         ::testing::make_tuple(0xbea0666660000000, 0xbea0000000000000),
472         ::testing::make_tuple(0xbea2666660000000, 0xbea2000000000000),
473         ::testing::make_tuple(0xbea4666660000000, 0xbea4000000000000),
474         ::testing::make_tuple(0xbea6666660000000, 0xbea6000000000000),
475         ::testing::make_tuple(0xbea8666660000000, 0xbea8000000000000),
476         ::testing::make_tuple(0xbeaa666660000000, 0xbeaa000000000000),
477         ::testing::make_tuple(0xbeac666660000000, 0xbeac000000000000),
478         ::testing::make_tuple(0xbeae666660000000, 0xbeae000000000000),
479         ::testing::make_tuple(0xbeb0666660000000, 0xbeb0000000000000),
480         ::testing::make_tuple(0xbeb2666660000000, 0xbeb2000000000000),
481         ::testing::make_tuple(0xbeb4666660000000, 0xbeb4000000000000),
482         ::testing::make_tuple(0xbeb6666660000000, 0xbeb6000000000000),
483         ::testing::make_tuple(0xbeb8666660000000, 0xbeb8000000000000),
484         ::testing::make_tuple(0xbeba666660000000, 0xbeba000000000000),
485         ::testing::make_tuple(0xbebc666660000000, 0xbebc000000000000),
486         ::testing::make_tuple(0xbebe666660000000, 0xbebe000000000000),
487         ::testing::make_tuple(0xbec0666660000000, 0xbec0800000000000),
488         ::testing::make_tuple(0xbec2666660000000, 0xbec2800000000000),
489         ::testing::make_tuple(0xbec4666660000000, 0xbec4800000000000),
490         ::testing::make_tuple(0xbec6666660000000, 0xbec6800000000000),
491         ::testing::make_tuple(0xbec8666660000000, 0xbec8800000000000)));
492