Home | History | Annotate | Download | only in ADT

Lines Matching refs:APFloat

1 //===- llvm/unittest/ADT/APFloat.cpp - APFloat unit tests ---------------------===//
10 #include "llvm/ADT/APFloat.h"
22 llvm::APFloat F(0.0);
23 F.convertFromString(Str, llvm::APFloat::rmNearestTiesToEven);
29 llvm::APFloat F(d);
41 EXPECT_FALSE(APFloat::getQNaN(APFloat::IEEEsingle, false).isSignaling());
42 EXPECT_FALSE(APFloat::getQNaN(APFloat::IEEEsingle, true).isSignaling());
43 EXPECT_FALSE(APFloat::getQNaN(APFloat::IEEEsingle, false, &payload).isSignaling());
44 EXPECT_FALSE(APFloat::getQNaN(APFloat::IEEEsingle, true, &payload).isSignaling());
45 EXPECT_TRUE(APFloat::getSNaN(APFloat::IEEEsingle, false).isSignaling());
46 EXPECT_TRUE(APFloat::getSNaN(APFloat::IEEEsingle, true).isSignaling());
47 EXPECT_TRUE(APFloat::getSNaN(APFloat::IEEEsingle, false, &payload).isSignaling());
48 EXPECT_TRUE(APFloat::getSNaN(APFloat::IEEEsingle, true, &payload).isSignaling());
53 APFloat test(APFloat::IEEEquad, APFloat::uninitialized);
54 APFloat expected(APFloat::IEEEquad, APFloat::uninitialized);
72 test = APFloat::getInf(APFloat::IEEEquad, false);
73 expected = APFloat::getInf(APFloat::IEEEquad, false);
74 EXPECT_EQ(test.next(false), APFloat::opOK);
80 test = APFloat::getInf(APFloat::IEEEquad, false);
81 expected = APFloat::getLargest(APFloat::IEEEquad, false);
82 EXPECT_EQ(test.next(true), APFloat::opOK);
87 test = APFloat::getInf(APFloat::IEEEquad, true);
88 expected = APFloat::getLargest(APFloat::IEEEquad, true);
89 EXPECT_EQ(test.next(false), APFloat::opOK);
94 test = APFloat::getInf(APFloat::IEEEquad, true);
95 expected = APFloat::getInf(APFloat::IEEEquad, true);
96 EXPECT_EQ(test.next(true), APFloat::opOK);
101 test = APFloat::getLargest(APFloat::IEEEquad, false);
102 expected = APFloat::getInf(APFloat::IEEEquad, false);
103 EXPECT_EQ(test.next(false), APFloat::opOK);
110 test = APFloat::getLargest(APFloat::IEEEquad, false);
111 expected = APFloat(APFloat::IEEEquad,
113 EXPECT_EQ(test.next(true), APFloat::opOK);
118 test = APFloat::getLargest(APFloat::IEEEquad, true);
119 expected = APFloat(APFloat::IEEEquad,
121 EXPECT_EQ(test.next(false), APFloat::opOK);
125 test = APFloat::getLargest(APFloat::IEEEquad, true);
126 expected = APFloat::getInf(APFloat::IEEEquad, true);
127 EXPECT_EQ(test.next(true), APFloat::opOK);
132 test = APFloat(APFloat::IEEEquad, "0x0.0000000000000000000000000001p-16382");
133 expected = APFloat(APFloat::IEEEquad,
135 EXPECT_EQ(test.next(false), APFloat::opOK);
139 test = APFloat(APFloat::IEEEquad, "0x0.0000000000000000000000000001p-16382");
140 expected = APFloat::getZero(APFloat::IEEEquad, false);
141 EXPECT_EQ(test.next(true), APFloat::opOK);
146 test = APFloat(APFloat::IEEEquad, "-0x0.0000000000000000000000000001p-16382");
147 expected = APFloat::getZero(APFloat::IEEEquad, true);
148 EXPECT_EQ(test.next(false), APFloat::opOK);
153 test = APFloat(APFloat::IEEEquad, "-0x0.0000000000000000000000000001p-16382");
154 expected = APFloat(APFloat::IEEEquad,
156 EXPECT_EQ(test.next(true), APFloat::opOK);
160 test = APFloat::getQNaN(APFloat::IEEEquad, false);
161 expected = APFloat::getQNaN(APFloat::IEEEquad, false);
162 EXPECT_EQ(test.next(false), APFloat::opOK);
166 test = APFloat::getQNaN(APFloat::IEEEquad, false);
167 expected = APFloat::getQNaN(APFloat::IEEEquad, false);
168 EXPECT_EQ(test.next(true), APFloat::opOK);
172 test = APFloat::getSNaN(APFloat::IEEEquad, false);
173 expected = APFloat::getQNaN(APFloat::IEEEquad, false);
174 EXPECT_EQ(test.next(false), APFloat::opInvalidOp);
178 test = APFloat::getSNaN(APFloat::IEEEquad, false);
179 expected = APFloat::getQNaN(APFloat::IEEEquad, false);
180 EXPECT_EQ(test.next(true), APFloat::opInvalidOp);
184 test = APFloat::getZero(APFloat::IEEEquad, false);
185 expected = APFloat::getSmallest(APFloat::IEEEquad, false);
186 EXPECT_EQ(test.next(false), APFloat::opOK);
190 test = APFloat::getZero(APFloat::IEEEquad, false);
191 expected = APFloat::getSmallest(APFloat::IEEEquad, true);
192 EXPECT_EQ(test.next(true), APFloat::opOK);
196 test = APFloat::getZero(APFloat::IEEEquad, true);
197 expected = APFloat::getSmallest(APFloat::IEEEquad, false);
198 EXPECT_EQ(test.next(false), APFloat::opOK);
202 test = APFloat::getZero(APFloat::IEEEquad, true);
203 expected = APFloat::getSmallest(APFloat::IEEEquad, true);
204 EXPECT_EQ(test.next(true), APFloat::opOK);
216 test = APFloat(APFloat::IEEEquad, "0x0.ffffffffffffffffffffffffffffp-16382");
217 expected = APFloat(APFloat::IEEEquad,
219 EXPECT_EQ(test.next(false), APFloat::opOK);
224 test = APFloat(APFloat::IEEEquad,
226 expected = APFloat(APFloat::IEEEquad,
228 EXPECT_EQ(test.next(true), APFloat::opOK);
233 test = APFloat(APFloat::IEEEquad,
235 expected = APFloat(APFloat::IEEEquad,
237 EXPECT_EQ(test.next(false), APFloat::opOK);
242 test = APFloat(APFloat::IEEEquad,
244 expected = APFloat(APFloat::IEEEquad,
246 EXPECT_EQ(test.next(true), APFloat::opOK);
257 test = APFloat(APFloat::IEEEquad, "-0x1p+1");
258 expected = APFloat(APFloat::IEEEquad,
260 EXPECT_EQ(test.next(false), APFloat::opOK);
264 test = APFloat(APFloat::IEEEquad, "0x1p+1");
265 expected = APFloat(APFloat::IEEEquad, "0x1.ffffffffffffffffffffffffffffp+0");
266 EXPECT_EQ(test.next(true), APFloat::opOK);
270 test = APFloat(APFloat::IEEEquad, "0x1.ffffffffffffffffffffffffffffp+0");
271 expected = APFloat(APFloat::IEEEquad, "0x1p+1");
272 EXPECT_EQ(test.next(false), APFloat::opOK);
276 test = APFloat(APFloat::IEEEquad, "-0x1.ffffffffffffffffffffffffffffp+0");
277 expected = APFloat(APFloat::IEEEquad, "-0x1p+1");
278 EXPECT_EQ(test.next(true), APFloat::opOK);
293 test = APFloat(APFloat::IEEEquad, "-0x0.ffffffffffffffffffffffffffffp-16382");
294 expected = APFloat(APFloat::IEEEquad,
296 EXPECT_EQ(test.next(false), APFloat::opOK);
302 test = APFloat(APFloat::IEEEquad, "0x0.ffffffffffffffffffffffffffffp-16382");
303 expected = APFloat(APFloat::IEEEquad,
305 EXPECT_EQ(test.next(true), APFloat::opOK);
311 test = APFloat(APFloat::IEEEquad, "0x1.0000000000000000000000000000p-16382");
312 expected = APFloat(APFloat::IEEEquad,
314 EXPECT_EQ(test.next(false), APFloat::opOK);
320 test = APFloat(APFloat::IEEEquad, "-0x1.0000000000000000000000000000p-16382");
321 expected = APFloat(APFloat::IEEEquad,
323 EXPECT_EQ(test.next(true), APFloat::opOK);
338 test = APFloat(APFloat::IEEEquad, "-0x1p-16381");
339 expected = APFloat(APFloat::IEEEquad,
341 EXPECT_EQ(test.next(false), APFloat::opOK);
346 test = APFloat(APFloat::IEEEquad, "-0x1.ffffffffffffffffffffffffffffp-16382");
347 expected = APFloat(APFloat::IEEEquad, "-0x1p-16381");
348 EXPECT_EQ(test.next(true), APFloat::opOK);
352 test = APFloat(APFloat::IEEEquad, "0x1.ffffffffffffffffffffffffffffp-16382");
353 expected = APFloat(APFloat::IEEEquad, "0x1p-16381");
354 EXPECT_EQ(test.next(false), APFloat::opOK);
358 test = APFloat(APFloat::IEEEquad, "0x1p-16381");
359 expected = APFloat(APFloat::IEEEquad,
361 EXPECT_EQ(test.next(true), APFloat::opOK);
376 test = APFloat(APFloat::IEEEquad,
378 expected = APFloat(APFloat::IEEEquad,
380 EXPECT_EQ(test.next(false), APFloat::opOK);
386 test = APFloat(APFloat::IEEEquad,
388 expected = APFloat(APFloat::IEEEquad,
390 EXPECT_EQ(test.next(true), APFloat::opOK);
396 test = APFloat(APFloat::IEEEquad,
398 expected = APFloat(APFloat::IEEEquad,
400 EXPECT_EQ(test.next(false), APFloat::opOK);
406 test = APFloat(APFloat::IEEEquad,
408 expected = APFloat(APFloat::IEEEquad,
410 EXPECT_EQ(test.next(true), APFloat::opOK);
416 test = APFloat(APFloat::IEEEquad,
418 expected = APFloat(APFloat::IEEEquad,
420 EXPECT_EQ(test.next(false), APFloat::opOK);
426 test = APFloat(APFloat::IEEEquad,
428 expected = APFloat(APFloat::IEEEquad,
430 EXPECT_EQ(test.next(true), APFloat::opOK);
436 test = APFloat(APFloat::IEEEquad,
438 expected = APFloat(APFloat::IEEEquad,
440 EXPECT_EQ(test.next(false), APFloat::opOK);
446 test = APFloat(APFloat::IEEEquad,
448 expected = APFloat(APFloat::IEEEquad,
450 EXPECT_EQ(test.next(true), APFloat::opOK);
457 APFloat::roundingMode rdmd = APFloat::rmNearestTiesToEven;
460 APFloat f1(14.5f);
461 APFloat f2(-14.5f);
462 APFloat f3(225.0f);
463 f1.fusedMultiplyAdd(f2, f3, APFloat::rmNearestTiesToEven);
468 APFloat Val2(2.0f);
469 APFloat f1((float)1.17549435e-38F);
470 APFloat f2((float)1.17549435e-38F);
473 APFloat f3(12.0f);
474 f1.fusedMultiplyAdd(f2, f3, APFloat::rmNearestTiesToEven);
480 APFloat::roundingMode rdmd = APFloat::rmNearestTiesToEven;
485 EXPECT_FALSE(APFloat(APFloat::IEEEsingle, MinNormalStr).isDenormal());
486 EXPECT_FALSE(APFloat(APFloat::IEEEsingle, 0.0).isDenormal());
488 APFloat Val2(APFloat::IEEEsingle, 2.0e0);
489 APFloat T(APFloat::IEEEsingle, MinNormalStr);
497 EXPECT_FALSE(APFloat(APFloat::IEEEdouble, MinNormalStr).isDenormal());
498 EXPECT_FALSE(APFloat(APFloat::IEEEdouble, 0.0).isDenormal());
500 APFloat Val2(APFloat::IEEEdouble, 2.0e0);
501 APFloat T(APFloat::IEEEdouble, MinNormalStr);
509 EXPECT_FALSE(APFloat(APFloat::x87DoubleExtended, MinNormalStr).isDenormal());
510 EXPECT_FALSE(APFloat(APFloat::x87DoubleExtended, 0.0).isDenormal());
512 APFloat Val2(APFloat::x87DoubleExtended, 2.0e0);
513 APFloat T(APFloat::x87DoubleExtended, MinNormalStr);
521 EXPECT_FALSE(APFloat(APFloat::IEEEquad, MinNormalStr).isDenormal());
522 EXPECT_FALSE(APFloat(APFloat::IEEEquad, 0.0).isDenormal());
524 APFloat Val2(APFloat::IEEEquad, 2.0e0);
525 APFloat T(APFloat::IEEEquad, MinNormalStr);
532 EXPECT_EQ(0.0f, APFloat(0.0f).convertToFloat());
533 EXPECT_EQ(-0.0f, APFloat(-0.0f).convertToFloat());
534 EXPECT_TRUE(APFloat(-0.0f).isNegative());
536 EXPECT_EQ(0.0, APFloat(0.0).convertToDouble());
537 EXPECT_EQ(-0.0, APFloat(-0.0).convertToDouble());
538 EXPECT_TRUE(APFloat(-0.0).isNegative());
544 APFloat Val(APFloat::IEEEdouble);
546 llvm::APFloat::rmNearestTiesToEven);
549 llvm::APFloat::rmNearestTiesToEven);
552 llvm::APFloat::rmNearestTiesToEven);
555 llvm::APFloat::rmNearestTiesToEven);
558 llvm::APFloat::rmNearestTiesToEven);
561 llvm::APFloat::rmNearestTiesToEven);
567 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, "0").convertToDouble());
568 EXPECT_EQ(+0.0, APFloat(APFloat::IEEEdouble, "+0").convertToDouble());
569 EXPECT_EQ(-0.0, APFloat(APFloat::IEEEdouble, "-0").convertToDouble());
571 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, "0.").convertToDouble());
572 EXPECT_EQ(+0.0, APFloat(APFloat::IEEEdouble, "+0.").convertToDouble());
573 EXPECT_EQ(-0.0, APFloat(APFloat::IEEEdouble, "-0.").convertToDouble());
575 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, ".0").convertToDouble());
576 EXPECT_EQ(+0.0, APFloat(APFloat::IEEEdouble, "+.0").convertToDouble());
577 EXPECT_EQ(-0.0, APFloat(APFloat::IEEEdouble, "-.0").convertToDouble());
579 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, "0.0").convertToDouble());
580 EXPECT_EQ(+0.0, APFloat(APFloat::IEEEdouble, "+0.0").convertToDouble());
581 EXPECT_EQ(-0.0, APFloat(APFloat::IEEEdouble, "-0.0").convertToDouble());
583 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, "00000.").convertToDouble());
584 EXPECT_EQ(+0.0, APFloat(APFloat::IEEEdouble, "+00000.").convertToDouble());
585 EXPECT_EQ(-0.0, APFloat(APFloat::IEEEdouble, "-00000.").convertToDouble());
587 EXPECT_EQ(0.0, APFloat(APFloat::IEEEdouble, ".00000").convertToDouble());
588 EXPECT_EQ(+0.0, APFloat(APFloat::IEEEdouble, "+.00000").convertToDouble());
589 EXPECT_EQ(-0.0, APFloat(APFloat::IEEEdouble, "-.00000").convertToDouble());
591 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, "0000.00000").convertToDouble());
592 EXPECT_EQ(+0.0, APFloat(APFloat::IEEEdouble, "+0000.00000").convertToDouble());
593 EXPECT_EQ(-0.0, APFloat(APFloat::IEEEdouble, "-0000.00000").convertToDouble());
597 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, "0e1").convertToDouble());
598 EXPECT_EQ(+0.0, APFloat(APFloat::IEEEdouble, "+0e1").convertToDouble());
599 EXPECT_EQ(-0.0, APFloat(APFloat::IEEEdouble, "-0e1").convertToDouble());
601 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, "0e+1").convertToDouble());
602 EXPECT_EQ(+0.0, APFloat(APFloat::IEEEdouble, "+0e+1").convertToDouble());
603 EXPECT_EQ(-0.0, APFloat(APFloat::IEEEdouble, "-0e+1").convertToDouble());
605 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, "0e-1").convertToDouble());
606 EXPECT_EQ(+0.0, APFloat(APFloat::IEEEdouble, "+0e-1").convertToDouble());
607 EXPECT_EQ(-0.0, APFloat(APFloat::IEEEdouble, "-0e-1").convertToDouble());
610 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, "0.e1").convertToDouble());
611 EXPECT_EQ(+0.0, APFloat(APFloat::IEEEdouble, "+0.e1").convertToDouble());
612 EXPECT_EQ(-0.0, APFloat(APFloat::IEEEdouble, "-0.e1").convertToDouble());
614 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, "0.e+1").convertToDouble());
615 EXPECT_EQ(+0.0, APFloat(APFloat::IEEEdouble, "+0.e+1").convertToDouble());
616 EXPECT_EQ(-0.0, APFloat(APFloat::IEEEdouble, "-0.e+1").convertToDouble());
618 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, "0.e-1").convertToDouble());
619 EXPECT_EQ(+0.0, APFloat(APFloat::IEEEdouble, "+0.e-1").convertToDouble());
620 EXPECT_EQ(-0.0, APFloat(APFloat::IEEEdouble, "-0.e-1").convertToDouble());
622 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, ".0e1").convertToDouble());
623 EXPECT_EQ(+0.0, APFloat(APFloat::IEEEdouble, "+.0e1").convertToDouble());
624 EXPECT_EQ(-0.0, APFloat(APFloat::IEEEdouble, "-.0e1").convertToDouble());
626 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, ".0e+1").convertToDouble());
627 EXPECT_EQ(+0.0, APFloat(APFloat::IEEEdouble, "+.0e+1").convertToDouble());
628 EXPECT_EQ(-0.0, APFloat(APFloat::IEEEdouble, "-.0e+1").convertToDouble());
630 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, ".0e-1").convertToDouble());
631 EXPECT_EQ(+0.0, APFloat(APFloat::IEEEdouble, "+.0e-1").convertToDouble());
632 EXPECT_EQ(-0.0, APFloat(APFloat::IEEEdouble, "-.0e-1").convertToDouble());
635 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, "0.0e1").convertToDouble());
636 EXPECT_EQ(+0.0, APFloat(APFloat::IEEEdouble, "+0.0e1").convertToDouble());
637 EXPECT_EQ(-0.0, APFloat(APFloat::IEEEdouble, "-0.0e1").convertToDouble());
639 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, "0.0e+1").convertToDouble());
640 EXPECT_EQ(+0.0, APFloat(APFloat::IEEEdouble, "+0.0e+1").convertToDouble());
641 EXPECT_EQ(-0.0, APFloat(APFloat::IEEEdouble, "-0.0e+1").convertToDouble());
643 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, "0.0e-1").convertToDouble());
644 EXPECT_EQ(+0.0, APFloat(APFloat::IEEEdouble, "+0.0e-1").convertToDouble());
645 EXPECT_EQ(-0.0, APFloat(APFloat::IEEEdouble, "-0.0e-1").convertToDouble());
648 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, "000.0000e1").convertToDouble());
649 EXPECT_EQ(+0.0, APFloat(APFloat::IEEEdouble, "+000.0000e+1").convertToDouble());
650 EXPECT_EQ(-0.0, APFloat(APFloat::IEEEdouble, "-000.0000e+1").convertToDouble());
654 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, "0e1234").convertToDouble());
655 EXPECT_EQ(+0.0, APFloat(APFloat::IEEEdouble, "+0e1234").convertToDouble());
656 EXPECT_EQ(-0.0, APFloat(APFloat::IEEEdouble, "-0e1234").convertToDouble());
658 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, "0e+1234").convertToDouble());
659 EXPECT_EQ(+0.0, APFloat(APFloat::IEEEdouble, "+0e+1234").convertToDouble());
660 EXPECT_EQ(-0.0, APFloat(APFloat::IEEEdouble, "-0e+1234").convertToDouble());
662 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, "0e-1234").convertToDouble());
663 EXPECT_EQ(+0.0, APFloat(APFloat::IEEEdouble, "+0e-1234").convertToDouble());
664 EXPECT_EQ(-0.0, APFloat(APFloat::IEEEdouble, "-0e-1234").convertToDouble());
666 EXPECT_EQ(0.0, APFloat(APFloat::IEEEdouble, "000.0000e1234").convertToDouble());
667 EXPECT_EQ(0.0, APFloat(APFloat::IEEEdouble, "000.0000e-1234").convertToDouble());
669 EXPECT_EQ(0.0, APFloat(APFloat::IEEEdouble, StringRef("0e1234\02", 6)).convertToDouble());
673 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, "0x0p1").convertToDouble());
674 EXPECT_EQ(+0.0, APFloat(APFloat::IEEEdouble, "+0x0p1").convertToDouble());
675 EXPECT_EQ(-0.0, APFloat(APFloat::IEEEdouble, "-0x0p1").convertToDouble());
677 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, "0x0p+1").convertToDouble());
678 EXPECT_EQ(+0.0, APFloat(APFloat::IEEEdouble, "+0x0p+1").convertToDouble());
679 EXPECT_EQ(-0.0, APFloat(APFloat::IEEEdouble, "-0x0p+1").convertToDouble());
681 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, "0x0p-1").convertToDouble());
682 EXPECT_EQ(+0.0, APFloat(APFloat::IEEEdouble, "+0x0p-1").convertToDouble());
683 EXPECT_EQ(-0.0, APFloat(APFloat::IEEEdouble, "-0x0p-1").convertToDouble());
686 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, "0x0.p1").convertToDouble());
687 EXPECT_EQ(+0.0, APFloat(APFloat::IEEEdouble, "+0x0.p1").convertToDouble());
688 EXPECT_EQ(-0.0, APFloat(APFloat::IEEEdouble, "-0x0.p1").convertToDouble());
690 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, "0x0.p+1").convertToDouble());
691 EXPECT_EQ(+0.0, APFloat(APFloat::IEEEdouble, "+0x0.p+1").convertToDouble());
692 EXPECT_EQ(-0.0, APFloat(APFloat::IEEEdouble, "-0x0.p+1").convertToDouble());
694 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, "0x0.p-1").convertToDouble());
695 EXPECT_EQ(+0.0, APFloat(APFloat::IEEEdouble, "+0x0.p-1").convertToDouble());
696 EXPECT_EQ(-0.0, APFloat(APFloat::IEEEdouble, "-0x0.p-1").convertToDouble());
699 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, "0x.0p1").convertToDouble());
700 EXPECT_EQ(+0.0, APFloat(APFloat::IEEEdouble, "+0x.0p1").convertToDouble());
701 EXPECT_EQ(-0.0, APFloat(APFloat::IEEEdouble, "-0x.0p1").convertToDouble());
703 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, "0x.0p+1").convertToDouble());
704 EXPECT_EQ(+0.0, APFloat(APFloat::IEEEdouble, "+0x.0p+1").convertToDouble());
705 EXPECT_EQ(-0.0, APFloat(APFloat::IEEEdouble, "-0x.0p+1").convertToDouble());
707 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, "0x.0p-1").convertToDouble());
708 EXPECT_EQ(+0.0, APFloat(APFloat::IEEEdouble, "+0x.0p-1").convertToDouble());
709 EXPECT_EQ(-0.0, APFloat(APFloat::IEEEdouble, "-0x.0p-1").convertToDouble());
712 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, "0x0.0p1").convertToDouble());
713 EXPECT_EQ(+0.0, APFloat(APFloat::IEEEdouble, "+0x0.0p1").convertToDouble());
714 EXPECT_EQ(-0.0, APFloat(APFloat::IEEEdouble, "-0x0.0p1").convertToDouble());
716 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, "0x0.0p+1").convertToDouble());
717 EXPECT_EQ(+0.0, APFloat(APFloat::IEEEdouble, "+0x0.0p+1").convertToDouble());
718 EXPECT_EQ(-0.0, APFloat(APFloat::IEEEdouble, "-0x0.0p+1").convertToDouble());
720 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, "0x0.0p-1").convertToDouble());
721 EXPECT_EQ(+0.0, APFloat(APFloat::IEEEdouble, "+0x0.0p-1").convertToDouble());
722 EXPECT_EQ(-0.0, APFloat(APFloat::IEEEdouble, "-0x0.0p-1").convertToDouble());
725 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, "0x00000.p1").convertToDouble());
726 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, "0x0000.00000p1").convertToDouble());
727 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, "0x.00000p1").convertToDouble());
728 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, "0x0.p1").convertToDouble());
729 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, "0x0p1234").convertToDouble());
730 EXPECT_EQ(-0.0, APFloat(APFloat::IEEEdouble, "-0x0p1234").convertToDouble());
731 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, "0x00000.p1234").convertToDouble());
732 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, "0x0000.00000p1234").convertToDouble());
733 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, "0x.00000p1234").convertToDouble());
734 EXPECT_EQ( 0.0, APFloat(APFloat::IEEEdouble, "0x0.p1234").convertToDouble());
738 EXPECT_EQ(1.0, APFloat(APFloat::IEEEdouble, "1").convertToDouble());
739 EXPECT_EQ(2.0, APFloat(APFloat::IEEEdouble, "2.").convertToDouble());
740 EXPECT_EQ(0.5, APFloat(APFloat::IEEEdouble, ".5").convertToDouble());
741 EXPECT_EQ(1.0, APFloat(APFloat::IEEEdouble, "1.0").convertToDouble());
742 EXPECT_EQ(-2.0, APFloat(APFloat
743 EXPECT_EQ(-4.0, APFloat(APFloat::IEEEdouble, "-4.").convertToDouble());
744 EXPECT_EQ(-0.5, APFloat(APFloat::IEEEdouble, "-.5").convertToDouble());
745 EXPECT_EQ(-1.5, APFloat(APFloat::IEEEdouble, "-1.5").convertToDouble());
746 EXPECT_EQ(1.25e12, APFloat(APFloat::IEEEdouble, "1.25e12").convertToDouble());
747 EXPECT_EQ(1.25e+12, APFloat(APFloat::IEEEdouble, "1.25e+12").convertToDouble());
748 EXPECT_EQ(1.25e-12, APFloat(APFloat::IEEEdouble, "1.25e-12").convertToDouble());
749 EXPECT_EQ(1024.0, APFloat(APFloat::IEEEdouble, "1024.").convertToDouble());
750 EXPECT_EQ(1024.05, APFloat(APFloat::IEEEdouble, "1024.05000").convertToDouble());
751 EXPECT_EQ(0.05, APFloat(APFloat::IEEEdouble, ".05000").convertToDouble());
752 EXPECT_EQ(2.0, APFloat(APFloat::IEEEdouble, "2.").convertToDouble());
753 EXPECT_EQ(2.0e2, APFloat(APFloat::IEEEdouble, "2.e2").convertToDouble());
754 EXPECT_EQ(2.0e+2, APFloat(APFloat::IEEEdouble, "2.e+2").convertToDouble());
755 EXPECT_EQ(2.0e-2, APFloat(APFloat::IEEEdouble, "2.e-2").convertToDouble());
756 EXPECT_EQ(2.05e2, APFloat(APFloat::IEEEdouble, "002.05000e2").convertToDouble());
757 EXPECT_EQ(2.05e+2, APFloat(APFloat::IEEEdouble, "002.05000e+2").convertToDouble());
758 EXPECT_EQ(2.05e-2, APFloat(APFloat::IEEEdouble, "002.05000e-2").convertToDouble());
759 EXPECT_EQ(2.05e12, APFloat(APFloat::IEEEdouble, "002.05000e12").convertToDouble());
760 EXPECT_EQ(2.05e+12, APFloat(APFloat::IEEEdouble, "002.05000e+12").convertToDouble());
761 EXPECT_EQ(2.05e-12, APFloat(APFloat::IEEEdouble, "002.05000e-12").convertToDouble());
764 // calculations in APFloat.cpp
765 EXPECT_TRUE(APFloat(APFloat::IEEEdouble, "99e99999").isInfinity());
766 EXPECT_TRUE(APFloat(APFloat::IEEEdouble, "-99e99999").isInfinity());
767 EXPECT_TRUE(APFloat(APFloat::IEEEdouble, "1e-99999").isPosZero());
768 EXPECT_TRUE(APFloat(APFloat::IEEEdouble, "-1e-99999").isNegZero());
774 EXPECT_EQ( 1.0, APFloat(APFloat::IEEEdouble, "0x1p0").convertToDouble());
775 EXPECT_EQ(+1.0, APFloat(APFloat::IEEEdouble, "+0x1p0").convertToDouble());
776 EXPECT_EQ(-1.0, APFloat(APFloat::IEEEdouble, "-0x1p0").convertToDouble());
778 EXPECT_EQ( 1.0, APFloat(APFloat::IEEEdouble, "0x1p+0").convertToDouble());
779 EXPECT_EQ(+1.0, APFloat(APFloat::IEEEdouble, "+0x1p+0").convertToDouble());
780 EXPECT_EQ(-1.0, APFloat(APFloat::IEEEdouble, "-0x1p+0").convertToDouble());
782 EXPECT_EQ( 1.0, APFloat(APFloat::IEEEdouble, "0x1p-0").convertToDouble());
783 EXPECT_EQ(+1.0, APFloat(APFloat::IEEEdouble, "+0x1p-0").convertToDouble());
784 EXPECT_EQ(-1.0, APFloat(APFloat::IEEEdouble, "-0x1p-0").convertToDouble());
787 EXPECT_EQ( 2.0, APFloat(APFloat::IEEEdouble, "0x1p1").convertToDouble());
788 EXPECT_EQ(+2.0, APFloat(APFloat::IEEEdouble, "+0x1p1").convertToDouble());
789 EXPECT_EQ(-2.0, APFloat(APFloat::IEEEdouble, "-0x1p1").convertToDouble());
791 EXPECT_EQ( 2.0, APFloat(APFloat::IEEEdouble, "0x1p+1").convertToDouble());
792 EXPECT_EQ(+2.0, APFloat(APFloat::IEEEdouble, "+0x1p+1").convertToDouble());
793 EXPECT_EQ(-2.0, APFloat(APFloat::IEEEdouble, "-0x1p+1").convertToDouble());
795 EXPECT_EQ( 0.5, APFloat(APFloat::IEEEdouble, "0x1p-1").convertToDouble());
796 EXPECT_EQ(+0.5, APFloat(APFloat::IEEEdouble, "+0x1p-1").convertToDouble());
797 EXPECT_EQ(-0.5, APFloat(APFloat::IEEEdouble, "-0x1p-1").convertToDouble());
800 EXPECT_EQ( 3.0, APFloat(APFloat::IEEEdouble, "0x1.8p1").convertToDouble());
801 EXPECT_EQ(+3.0, APFloat(APFloat::IEEEdouble, "+0x1.8p1").convertToDouble());
802 EXPECT_EQ(-3.0, APFloat(APFloat::IEEEdouble, "-0x1.8p1").convertToDouble());
804 EXPECT_EQ( 3.0, APFloat(APFloat::IEEEdouble, "0x1.8p+1").convertToDouble());
805 EXPECT_EQ(+3.0, APFloat(APFloat::IEEEdouble, "+0x1.8p+1").convertToDouble());
806 EXPECT_EQ(-3.0, APFloat(APFloat::IEEEdouble, "-0x1.8p+1").convertToDouble());
808 EXPECT_EQ( 0.75, APFloat(APFloat::IEEEdouble, "0x1.8p-1").convertToDouble());
809 EXPECT_EQ(+0.75, APFloat(APFloat::IEEEdouble, "+0x1.8p-1").convertToDouble());
810 EXPECT_EQ(-0.75, APFloat(APFloat::IEEEdouble, "-0x1.8p-1").convertToDouble());
813 EXPECT_EQ( 8192.0, APFloat(APFloat::IEEEdouble, "0x1000.000p1").convertToDouble());
814 EXPECT_EQ(+8192.0, APFloat(APFloat::IEEEdouble, "+0x1000.000p1").convertToDouble());
815 EXPECT_EQ(-8192.0, APFloat(APFloat::IEEEdouble, "-0x1000.000p1").convertToDouble());
817 EXPECT_EQ( 8192.0, APFloat(APFloat::IEEEdouble, "0x1000.000p+1").convertToDouble());
818 EXPECT_EQ(+8192.0, APFloat(APFloat::IEEEdouble, "+0x1000.000p+1").convertToDouble());
819 EXPECT_EQ(-8192.0, APFloat(APFloat::IEEEdouble, "-0x1000.000p+1").convertToDouble());
821 EXPECT_EQ( 2048.0, APFloat(APFloat::IEEEdouble, "0x1000.000p-1").convertToDouble());
822 EXPECT_EQ(+2048.0, APFloat(APFloat::IEEEdouble, "+0x1000.000p-1").convertToDouble());
823 EXPECT_EQ(-2048.0, APFloat(APFloat::IEEEdouble, "-0x1000.000p-1").convertToDouble());
826 EXPECT_EQ( 8192.0, APFloat(APFloat::IEEEdouble, "0x1000p1").convertToDouble());
827 EXPECT_EQ(+8192.0, APFloat(APFloat::IEEEdouble, "+0x1000p1").convertToDouble());
828 EXPECT_EQ(-8192.0, APFloat(APFloat::IEEEdouble, "-0x1000p1").convertToDouble());
830 EXPECT_EQ( 8192.0, APFloat(APFloat::IEEEdouble, "0x1000p+1").convertToDouble());
831 EXPECT_EQ(+8192.0, APFloat(APFloat::IEEEdouble, "+0x1000p+1").convertToDouble());
832 EXPECT_EQ(-8192.0, APFloat(APFloat::IEEEdouble, "-0x1000p+1").convertToDouble());
834 EXPECT_EQ( 2048.0, APFloat(APFloat::IEEEdouble, "0x1000p-1").convertToDouble());
835 EXPECT_EQ(+2048.0, APFloat(APFloat::IEEEdouble, "+0x1000p-1").convertToDouble());
836 EXPECT_EQ(-2048.0, APFloat(APFloat::IEEEdouble, "-0x1000p-1").convertToDouble());
839 EXPECT_EQ( 16384.0, APFloat(APFloat::IEEEdouble, "0x10p10").convertToDouble());
840 EXPECT_EQ(+16384.0, APFloat(APFloat::IEEEdouble, "+0x10p10").convertToDouble());
841 EXPECT_EQ(-16384.0, APFloat(APFloat::IEEEdouble, "-0x10p10").convertToDouble());
843 EXPECT_EQ( 16384.0, APFloat(APFloat::IEEEdouble, "0x10p+10").convertToDouble());
844 EXPECT_EQ(+16384.0, APFloat(APFloat::IEEEdouble, "+0x10p+10").convertToDouble());
845 EXPECT_EQ(-16384.0, APFloat(APFloat::IEEEdouble, "-0x10p+10").convertToDouble());
847 EXPECT_EQ( 0.015625, APFloat(APFloat::IEEEdouble, "0x10p-10").convertToDouble());
848 EXPECT_EQ(+0.015625, APFloat(APFloat::IEEEdouble, "+0x10p-10").convertToDouble());
849 EXPECT_EQ(-0.015625, APFloat(APFloat::IEEEdouble, "-0x10p-10").convertToDouble());
851 EXPECT_EQ(1.0625, APFloat(APFloat::IEEEdouble, "0x1.1p0").convertToDouble());
852 EXPECT_EQ(1.0, APFloat(APFloat::IEEEdouble, "0x1p0").convertToDouble());
880 EXPECT_EQ(APFloat::opOK,
881 APFloat(APFloat::IEEEdouble, "10")
882 .convertToInteger(result, APFloat::rmTowardZero, &isExact));
886 EXPECT_EQ(APFloat::opInvalidOp,
887 APFloat(APFloat::IEEEdouble, "-10")
888 .convertToInteger(result, APFloat::rmTowardZero, &isExact));
892 EXPECT_EQ(APFloat::opInvalidOp,
893 APFloat(APFloat::IEEEdouble, "32")
894 .convertToInteger(result, APFloat::rmTowardZero, &isExact));
898 EXPECT_EQ(APFloat::opInexact,
899 APFloat(APFloat::IEEEdouble, "7.9")
900 .convertToInteger(result, APFloat::rmTowardZero, &isExact));
905 EXPECT_EQ(APFloat::opOK,
906 APFloat(APFloat::IEEEdouble, "-10")
907 .convertToInteger(result, APFloat::rmTowardZero, &isExact));
911 EXPECT_EQ(APFloat::opInvalidOp,
912 APFloat(APFloat::IEEEdouble, "-17")
913 .convertToInteger(result, APFloat::rmTowardZero, &isExact));
917 EXPECT_EQ(APFloat::opInvalidOp,
918 APFloat(APFloat::IEEEdouble, "16")
919 .convertToInteger(result, APFloat::rmTowardZero, &isExact));
928 return APFloat::getSNaN(Sem, Negative, &apfill).bitcastToAPInt();
930 return APFloat::getQNaN(Sem, Negative, &apfill).bitcastToAPInt();
934 ASSERT_EQ(0x7fc00000, nanbits(APFloat::IEEEsingle, false, false, 0));
935 ASSERT_EQ(0xffc00000, nanbits(APFloat::IEEEsingle, false, true, 0));
936 ASSERT_EQ(0x7fc0ae72, nanbits(APFloat::IEEEsingle, false, false, 0xae72));
937 ASSERT_EQ(0x7fffae72, nanbits(APFloat::IEEEsingle, false, false, 0xffffae72));
938 ASSERT_EQ(0x7fa00000, nanbits(APFloat::IEEEsingle, true, false, 0));
939 ASSERT_EQ(0xffa00000, nanbits(APFloat::IEEEsingle, true, true, 0));
940 ASSERT_EQ(0x7f80ae72, nanbits(APFloat::IEEEsingle, true, false, 0xae72));
941 ASSERT_EQ(0x7fbfae72, nanbits(APFloat::IEEEsingle, true, false, 0xffffae72));
943 ASSERT_EQ(0x7ff8000000000000ULL, nanbits(APFloat::IEEEdouble, false, false, 0));
944 ASSERT_EQ(0xfff8000000000000ULL, nanbits(APFloat::IEEEdouble, false, true, 0));
945 ASSERT_EQ(0x7ff800000000ae72ULL, nanbits(APFloat::IEEEdouble, false, false, 0xae72));
946 ASSERT_EQ(0x7fffffffffffae72ULL, nanbits(APFloat::IEEEdouble, false, false, 0xffffffffffffae72ULL));
947 ASSERT_EQ(0x7ff4000000000000ULL, nanbits(APFloat::IEEEdouble, true, false, 0));
948 ASSERT_EQ(0xfff4000000000000ULL, nanbits(APFloat::IEEEdouble, true, true, 0));
949 ASSERT_EQ(0x7ff000000000ae72ULL, nanbits(APFloat::IEEEdouble, true, false, 0xae72));
950 ASSERT_EQ(0x7ff7ffffffffae72ULL, nanbits(APFloat::IEEEdouble, true, false, 0xffffffffffffae72ULL));
956 EXPECT_DEATH(APFloat(APFloat::IEEEsingle, 0.0f).convertToDouble(), "Float semantics are not IEEEdouble");
957 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, 0.0 ).convertToFloat(), "Float semantics are not IEEEsingle");
961 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, ""), "Invalid string length");
962 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "+"), "String has no digits");
963 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "-"), "String has no digits");
965 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, StringRef("\0", 1)), "Invalid character in significand");
966 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, StringRef("1\0", 2)), "Invalid character in significand");
967 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, StringRef("1\02", 3)), "Invalid character in significand");
968 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, StringRef("1\02e1", 5)), "Invalid character in significand");
969 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, StringRef("1e\0", 3)), "Invalid character in exponent");
970 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, StringRef("1e1\0", 4)), "Invalid character in exponent");
971 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, StringRef("1e1\02", 5)), "Invalid character in exponent");
973 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "1.0f"), "Invalid character in significand");
975 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, ".."), "String contains multiple dots");
976 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "..0"), "String contains multiple dots");
977 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "1.0.0"), "String contains multiple dots");
981 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "."), "Significand has no digits");
982 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "+."), "Significand has no digits");
983 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "-."), "Significand has no digits");
986 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "e"), "Significand has no digits");
987 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "+e"), "Significand has no digits");
988 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "-e"), "Significand has no digits");
990 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "e1"), "Significand has no digits");
991 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "+e1"), "Significand has no digits");
992 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "-e1"), "Significand has no digits");
994 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, ".e1"), "Significand has no digits");
995 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "+.e1"), "Significand has no digits");
996 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "-.e1"), "Significand has no digits");
999 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, ".e"), "Significand has no digits");
1000 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "+.e"), "Significand has no digits");
1001 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "-.e"), "Significand has no digits");
1005 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "1e"), "Exponent has no digits");
1006 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "+1e"), "Exponent has no digits");
1007 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "-1e"), "Exponent has no digits");
1009 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "1.e"), "Exponent has no digits");
1010 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "+1.e"), "Exponent has no digits");
1011 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "-1.e"), "Exponent has no digits");
1013 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, ".1e"), "Exponent has no digits");
1014 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "+.1e"), "Exponent has no digits");
1015 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "-.1e"), "Exponent has no digits");
1017 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "1.1e"), "Exponent has no digits");
1018 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "+1.1e"), "Exponent has no digits");
1019 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "-1.1e"), "Exponent has no digits");
1022 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "1e+"), "Exponent has no digits");
1023 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "1e-"), "Exponent has no digits");
1025 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, ".1e"), "Exponent has no digits");
1026 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, ".1e+"), "Exponent has no digits");
1027 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, ".1e-"), "Exponent has no digits");
1029 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "1.0e"), "Exponent has no digits");
1030 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "1.0e+"), "Exponent has no digits");
1031 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "1.0e-"), "Exponent has no digits");
1035 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "0x"), "Invalid string");
1036 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "+0x"), "Invalid string");
1037 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "-0x"), "Invalid string");
1039 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "0x0"), "Hex strings require an exponent");
1040 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "+0x0"), "Hex strings require an exponent");
1041 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "-0x0"), "Hex strings require an exponent");
1043 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "0x0."), "Hex strings require an exponent");
1044 EXPECT_DEATH(APFloatAPFloat::IEEEdouble, "+0x0."), "Hex strings require an exponent");
1045 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "-0x0."), "Hex strings require an exponent");
1047 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "0x.0"), "Hex strings require an exponent");
1048 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "+0x.0"), "Hex strings require an exponent");
1049 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "-0x.0"), "Hex strings require an exponent");
1051 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "0x0.0"), "Hex strings require an exponent");
1052 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "+0x0.0"), "Hex strings require an exponent");
1053 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "-0x0.0"), "Hex strings require an exponent");
1055 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, StringRef("0x\0", 3)), "Invalid character in significand");
1056 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, StringRef("0x1\0", 4)), "Invalid character in significand");
1057 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, StringRef("0x1\02", 5)), "Invalid character in significand");
1058 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, StringRef("0x1\02p1", 7)), "Invalid character in significand");
1059 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, StringRef("0x1p\0", 5)), "Invalid character in exponent");
1060 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, StringRef("0x1p1\0", 6)), "Invalid character in exponent");
1061 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, StringRef("0x1p1\02", 7)), "Invalid character in exponent");
1063 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "0x1p0f"), "Invalid character in exponent");
1065 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "0x..p1"), "String contains multiple dots");
1066 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "0x..0p1"), "String contains multiple dots");
1067 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "0x1.0.0p1"), "String contains multiple dots");
1071 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "0x."), "Significand has no digits");
1072 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "+0x."), "Significand has no digits");
1073 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "-0x."), "Significand has no digits");
1075 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "0xp"), "Significand has no digits");
1076 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "+0xp"), "Significand has no digits");
1077 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "-0xp"), "Significand has no digits");
1079 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "0xp+"), "Significand has no digits");
1080 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "+0xp+"), "Significand has no digits");
1081 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "-0xp+"), "Significand has no digits");
1083 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "0xp-"), "Significand has no digits");
1084 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "+0xp-"), "Significand has no digits");
1085 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "-0xp-"), "Significand has no digits");
1088 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "0x.p"), "Significand has no digits");
1089 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "+0x.p"), "Significand has no digits");
1090 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "-0x.p"), "Significand has no digits");
1092 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "0x.p+"), "Significand has no digits");
1093 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "+0x.p+"), "Significand has no digits");
1094 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "-0x.p+"), "Significand has no digits");
1096 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "0x.p-"), "Significand has no digits");
1097 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "+0x.p-"), "Significand has no digits");
1098 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "-0x.p-"), "Significand has no digits");
1102 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "0x1p"), "Exponent has no digits");
1103 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "+0x1p"), "Exponent has no digits");
1104 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "-0x1p"), "Exponent has no digits");
1106 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "0x1p+"), "Exponent has no digits");
1107 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "+0x1p+"), "Exponent has no digits");
1108 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "-0x1p+"), "Exponent has no digits");
1110 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "0x1p-"), "Exponent has no digits");
1111 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "+0x1p-"), "Exponent has no digits");
1112 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "-0x1p-"), "Exponent has no digits");
1115 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "0x1.p"), "Exponent has no digits");
1116 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "+0x1.p"), "Exponent has no digits");
1117 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "-0x1.p"), "Exponent has no digits");
1119 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "0x1.p+"), "Exponent has no digits");
1120 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "+0x1.p+"), "Exponent has no digits");
1121 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "-0x1.p+"), "Exponent has no digits");
1123 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "0x1.p-"), "Exponent has no digits");
1124 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "+0x1.p-"), "Exponent has no digits");
1125 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "-0x1.p-"), "Exponent has no digits");
1128 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "0x.1p"), "Exponent has no digits");
1129 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "+0x.1p"), "Exponent has no digits");
1130 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "-0x.1p"), "Exponent has no digits");
1132 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "0x.1p+"), "Exponent has no digits");
1133 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "+0x.1p+"), "Exponent has no digits");
1134 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "-0x.1p+"), "Exponent has no digits");
1136 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "0x.1p-"), "Exponent has no digits");
1137 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "+0x.1p-"), "Exponent has no digits");
1138 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "-0x.1p-"), "Exponent has no digits");
1141 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "0x1.1p"), "Exponent has no digits");
1142 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "+0x1.1p"), "Exponent has no digits");
1143 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "-0x1.1p"), "Exponent has no digits");
1145 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "0x1.1p+"), "Exponent has no digits");
1146 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "+0x1.1p+"), "Exponent has no digits");
1147 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "-0x1.1p+"), "Exponent has no digits");
1149 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "0x1.1p-"), "Exponent has no digits");
1150 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "+0x1.1p-"), "Exponent has no digits");
1151 EXPECT_DEATH(APFloat(APFloat::IEEEdouble, "-0x1.1p-"), "Exponent has no digits");
1157 APFloat inv(0.0f);
1160 EXPECT_TRUE(APFloat(2.0).getExactInverse(&inv));
1161 EXPECT_TRUE(inv.bitwiseIsEqual(APFloat(0.5)));
1162 EXPECT_TRUE(APFloat(2.0f).getExactInverse(&inv));
1163 EXPECT_TRUE(inv.bitwiseIsEqual(APFloat(0.5f)));
1164 EXPECT_TRUE(APFloat(APFloat::IEEEquad, "2.0").getExactInverse(&inv));
1165 EXPECT_TRUE(inv.bitwiseIsEqual(APFloat(APFloat::IEEEquad, "0.5")));
1166 EXPECT_TRUE(APFloat(APFloat::PPCDoubleDouble, "2.0").getExactInverse(&inv));
1167 EXPECT_TRUE(inv.bitwiseIsEqual(APFloat(APFloat::PPCDoubleDouble, "0.5")));
1168 EXPECT_TRUE(APFloat(APFloat::x87DoubleExtended, "2.0").getExactInverse(&inv));
1169 EXPECT_TRUE(inv.bitwiseIsEqual(APFloat(APFloat::x87DoubleExtended, "0.5")));
1172 EXPECT_TRUE(APFloat(1.17549435e-38f).getExactInverse(&inv));
1173 EXPECT_TRUE(inv.bitwiseIsEqual(APFloat(8.5070592e+37f)));
1176 EXPECT_FALSE(APFloat(1.7014118e38f).getExactInverse(nullptr));
1178 EXPECT_FALSE(APFloat(0.0).getExactInverse(nullptr));
1180 EXPECT_FALSE(APFloat(1.40129846e-45f).getExactInverse(nullptr));
1184 APFloat T(-0.5), S(3.14), R(APFloat::getLargest(APFloat::IEEEdouble)), P(0.0);
1187 P.roundToIntegral(APFloat::rmTowardZero);
1190 P.roundToIntegral(APFloat::rmTowardNegative);
1193 P.roundToIntegral(APFloat::rmTowardPositive);
1196 P.roundToIntegral(APFloat::rmNearestTiesToEven);
1200 P.roundToIntegral(APFloat::rmTowardZero);
1203 P.roundToIntegral(APFloat::rmTowardNegative);
1206 P.roundToIntegral(APFloat::rmTowardPositive);
1209 P.roundToIntegral(APFloat::rmNearestTiesToEven);
1213 P.roundToIntegral(APFloat::rmTowardZero);
1216 P.roundToIntegral(APFloat::rmTowardNegative);
1219 P.roundToIntegral(APFloat::rmTowardPositive);
1222 P.roundToIntegral(APFloat::rmNearestTiesToEven);
1225 P = APFloat::getZero(APFloat::IEEEdouble);
1226 P.roundToIntegral(APFloat::rmTowardZero);
1228 P = APFloat::getZero(APFloat::IEEEdouble, true);
1229 P.roundToIntegral(APFloat::rmTowardZero);
1231 P = APFloat::getNaN(APFloat::IEEEdouble);
1232 P.roundToIntegral(APFloat::rmTowardZero);
1234 P = APFloat::getInf(APFloat::IEEEdouble);
1235 P.roundToIntegral(APFloat::rmTowardZero);
1237 P = APFloat::getInf(APFloat::IEEEdouble, true);
1238 P.roundToIntegral(APFloat::rmTowardZero);
1244 EXPECT_EQ(3.402823466e+38f, APFloat::getLargest(APFloat::IEEEsingle).convertToFloat());
1245 EXPECT_EQ(1.7976931348623158e+308, APFloat::getLargest(APFloat::IEEEdouble).convertToDouble());
1249 APFloat test = APFloat::getSmallest(APFloat::IEEEsingle, false);
1250 APFloat expected = APFloat(APFloat::IEEEsingle, "0x0.000002p-126");
1256 test = APFloat::getSmallest(APFloat::IEEEsingle, true);
1257 expected = APFloat(APFloat::IEEEsingle, "-0x0.000002p-126");
1263 test = APFloat::getSmallest(APFloat::IEEEquad, false);
1264 expected = APFloat(APFloat::IEEEquad, "0x0.0000000000000000000000000001p-16382");
1270 test = APFloat::getSmallest(APFloat::IEEEquad, true);
1271 expected = APFloat(APFloat::IEEEquad, "-0x0.0000000000000000000000000001p-16382");
1279 APFloat test = APFloat::getSmallestNormalized(APFloat::IEEEsingle, false);
1280 APFloat expected = APFloat(APFloat::IEEEsingle, "0x1p-126");
1286 test = APFloat::getSmallestNormalized(APFloat::IEEEsingle, true);
1287 expected = APFloat(APFloat::IEEEsingle, "-0x1p-126");
1293 test = APFloat::getSmallestNormalized(APFloat::IEEEquad, false);
1294 expected = APFloat(APFloat::IEEEquad, "0x1p-16382");
1300 test = APFloat::getSmallestNormalized(APFloat::IEEEquad, true);
1301 expected = APFloat(APFloat::IEEEquad, "-0x1p-16382");
1315 { &APFloat::IEEEhalf, false, {0, 0}, 1},
1316 { &APFloat::IEEEhalf, true, {0x8000ULL, 0}, 1},
1317 { &APFloat::IEEEsingle, false, {0, 0}, 1},
1318 { &APFloat::IEEEsingle, true, {0x80000000ULL, 0}, 1},
1319 { &APFloat::IEEEdouble, false, {0, 0}, 1},
1320 { &APFloat::IEEEdouble, true, {0x8000000000000000ULL, 0}, 1},
1321 { &APFloat::IEEEquad, false, {0, 0}, 2},
1322 { &APFloat::IEEEquad, true, {0, 0x8000000000000000ULL}, 2},
1323 { &APFloat::PPCDoubleDouble, false, {0, 0}, 2},
1324 { &APFloat::PPCDoubleDouble, true, {0x8000000000000000ULL, 0}, 2},
1325 { &APFloat::x87DoubleExtended, false, {0, 0}, 2},
1326 { &APFloat::x87DoubleExtended, true, {0, 0x8000ULL}, 2},
1330 APFloat test = APFloat::getZero(*GetZeroTest[i].semantics,
1333 APFloat expected = APFloat(*GetZeroTest[i].semantics,
1347 APFloat test(APFloat::IEEEdouble, "1.0");
1348 test.convert(APFloat::IEEEsingle, APFloat::rmNearestTiesToEven, &losesInfo);
1352 test = APFloat(APFloat::x87DoubleExtended, "0x1p-53");
1353 test.add(APFloat(APFloat::x87DoubleExtended, "1.0"), APFloat::rmNearestTiesToEven);
1354 test.convert(APFloat::IEEEdouble, APFloat::rmNearestTiesToEven, &losesInfo);
1358 test = APFloat(APFloat::IEEEquad, "0x1p-53");
1359 test.add(APFloat(APFloat::IEEEquad, "1.0"), APFloat::rmNearestTiesToEven);
1360 test.convert(APFloat::IEEEdouble, APFloat::rmNearestTiesToEven, &losesInfo);
1364 test = APFloat(APFloat::x87DoubleExtended, "0xf.fffffffp+28");
1365 test.convert(APFloat::IEEEdouble, APFloat::rmNearestTiesToEven, &losesInfo);
1369 test = APFloat::getSNaN(APFloat::IEEEsingle);
1370 APFloat X87SNaN = APFloat::getSNaN(APFloat::x87DoubleExtended);
1371 test.convert(APFloat::x87DoubleExtended, APFloat::rmNearestTiesToEven,
1376 test = APFloat::getQNaN(APFloat::IEEEsingle);
1377 APFloat X87QNaN = APFloat::getQNaN(APFloat::x87DoubleExtended);
1378 test.convert(APFloat::x87DoubleExtended, APFloat::rmNearestTiesToEven,
1383 test = APFloat::getSNaN(APFloat::x87DoubleExtended);
1384 test.convert(APFloat::x87DoubleExtended, APFloat::rmNearestTiesToEven,
1389 test = APFloat::getQNaN(APFloat::x87DoubleExtended);
1390 test.convert(APFloat::x87DoubleExtended, APFloat::rmNearestTiesToEven,
1397 APFloat test(APFloat::PPCDoubleDouble, "1.0");
1401 test.divide(APFloat(APFloatAPFloat::rmNearestTiesToEven);
1406 test = APFloat(APFloat::PPCDoubleDouble, "1.79769313486231580793728971405301e+308");
1411 test = APFloat(APFloat::PPCDoubleDouble, "2.00416836000897277799610805135016e-292");
1415 test = APFloat(APFloat::PPCDoubleDouble, "1.0");
1416 test.add(APFloat(APFloat::PPCDoubleDouble, "0x1p-105"), APFloat::rmNearestTiesToEven);
1420 test = APFloat(APFloat::PPCDoubleDouble, "1.0");
1421 test.add(APFloat(APFloat::PPCDoubleDouble, "0x1p-106"), APFloat::rmNearestTiesToEven);
1433 APFloat t(APFloat::IEEEsingle, "0x1p+0");
1435 t = APFloat(APFloat::IEEEsingle, "-0x1p+0");
1438 EXPECT_FALSE(APFloat::getInf(APFloat::IEEEsingle, false).isNegative());
1439 EXPECT_TRUE(APFloat::getInf(APFloat::IEEEsingle, true).isNegative());
1441 EXPECT_FALSE(APFloat::getZero(APFloat::IEEEsingle, false).isNegative());
1442 EXPECT_TRUE(APFloat::getZero(APFloat::IEEEsingle, true).isNegative());
1444 EXPECT_FALSE(APFloat::getNaN(APFloat::IEEEsingle, false).isNegative());
1445 EXPECT_TRUE(APFloat::getNaN(APFloat::IEEEsingle, true).isNegative());
1447 EXPECT_FALSE(APFloat::getSNaN(APFloat::IEEEsingle, false).isNegative());
1448 EXPECT_TRUE(APFloat::getSNaN(APFloat::IEEEsingle, true).isNegative());
1452 APFloat t(APFloat::IEEEsingle, "0x1p+0");
1455 EXPECT_FALSE(APFloat::getInf(APFloat::IEEEsingle, false).isNormal());
1456 EXPECT_FALSE(APFloat::getZero(APFloat::IEEEsingle, false).isNormal());
1457 EXPECT_FALSE(APFloat::getNaN(APFloat::IEEEsingle, false).isNormal());
1458 EXPECT_FALSE(APFloat::getSNaN(APFloat::IEEEsingle, false).isNormal());
1459 EXPECT_FALSE(APFloat(APFloat::IEEEsingle, "0x1p-149").isNormal());
1463 APFloat t(APFloat::IEEEsingle, "0x1p+0");
1465 EXPECT_FALSE(APFloat::getInf(APFloat::IEEEsingle, false).isFinite());
1466 EXPECT_TRUE(APFloat::getZero(APFloat::IEEEsingle, false).isFinite());
1467 EXPECT_FALSE(APFloat::getNaN(APFloat::IEEEsingle, false).isFinite());
1468 EXPECT_FALSE(APFloat::getSNaN(APFloat::IEEEsingle, false).isFinite());
1469 EXPECT_TRUE(APFloat(APFloat::IEEEsingle, "0x1p-149").isFinite());
1473 APFloat t(APFloat::IEEEsingle, "0x1p+0");
1475 EXPECT_TRUE(APFloat::getInf(APFloat::IEEEsingle, false).isInfinity());
1476 EXPECT_FALSE(APFloat::getZero(APFloat::IEEEsingle, false).isInfinity());
1477 EXPECT_FALSE(APFloat::getNaN(APFloat::IEEEsingle, false).isInfinity());
1478 EXPECT_FALSE(APFloat::getSNaN(APFloat::IEEEsingle, false).isInfinity());
1479 EXPECT_FALSE(APFloat(APFloat::IEEEsingle, "0x1p-149").isInfinity());
1483 APFloat t(APFloat::IEEEsingle, "0x1p+0");
1485 EXPECT_FALSE(APFloat::getInf(APFloat::IEEEsingle, false).isNaN());
1486 EXPECT_FALSE(APFloat::getZero(APFloat::IEEEsingle, false).isNaN());
1487 EXPECT_TRUE(APFloat::getNaN(APFloat::IEEEsingle, false).isNaN());
1488 EXPECT_TRUE(APFloat::getSNaN(APFloat::IEEEsingle, false).isNaN());
1489 EXPECT_FALSE(APFloat(APFloat::IEEEsingle, "0x1p-149").isNaN());
1494 EXPECT_TRUE(APFloat(APFloat::IEEEsingle, "0x1p+0").isFiniteNonZero());
1495 EXPECT_TRUE(APFloat(APFloat::IEEEsingle, "-0x1p+0").isFiniteNonZero());
1498 EXPECT_TRUE(APFloat(APFloat::IEEEsingle, "0x1p-149").isFiniteNonZero());
1499 EXPECT_TRUE(APFloat(APFloat::IEEEsingle, "-0x1p-149").isFiniteNonZero());
1502 EXPECT_FALSE(APFloat::getInf(APFloat::IEEEsingle, false).isFiniteNonZero());
1503 EXPECT_FALSE(APFloat::getInf(APFloat::IEEEsingle, true).isFiniteNonZero());
1506 EXPECT_FALSE(APFloat::getZero(APFloat::IEEEsingle, false).isFiniteNonZero());
1507 EXPECT_FALSE(APFloat::getZero(APFloat::IEEEsingle, true).isFiniteNonZero());
1511 EXPECT_FALSE(APFloat::getNaN(APFloat::IEEEsingle, false).isFiniteNonZero());
1512 EXPECT_FALSE(APFloat::getNaN(APFloat::IEEEsingle, true).isFiniteNonZero());
1516 EXPECT_FALSE(APFloat::getSNaN(APFloat::IEEEsingle, false).isFiniteNonZero());
1517 EXPECT_FALSE(APFloat::getSNaN(APFloat::IEEEsingle, true).isFiniteNonZero());
1528 APFloat PInf = APFloat::getInf(APFloat::IEEEsingle, false);
1529 APFloat MInf = APFloat::getInf(APFloat::IEEEsingle, true);
1530 APFloat PZero = APFloat::getZero(APFloat::IEEEsingle, false);
1531 APFloat MZero = APFloat::getZero(APFloat::IEEEsingle, true);
1532 APFloat QNaN = APFloat::getNaN(APFloat::IEEEsingle, false);
1533 APFloat SNaN = APFloat::getSNaN(APFloat::IEEEsingle, false);
1534 APFloat PNormalValue = APFloat(APFloat::IEEEsingle, "0x1p+0");
1535 APFloat MNormalValue = APFloat(APFloat::IEEEsingle, "-0x1p+0");
1536 APFloat PLargestValue = APFloat::getLargest(APFloat::IEEEsingle, false);
1537 APFloat MLargestValue = APFloat::getLargest(APFloat::IEEEsingle, true);
1538 APFloat PSmallestValue = APFloat::getSmallest(APFloat::IEEEsingle, false);
1539 APFloat MSmallestValue = APFloat::getSmallest(APFloat::IEEEsingle, true);
1540 APFloat PSmallestNormalized =
1541 APFloat::getSmallestNormalized(APFloat::IEEEsingle, false);
1542 APFloat MSmallestNormalized =
1543 APFloat::getSmallestNormalized(APFloat::IEEEsingle, true);
1545 const int OverflowStatus = APFloat::opOverflow | APFloat::opInexact;
1549 APFloat x;
1550 APFloat y;
1555 { PInf, PInf, "inf", APFloat::opOK, APFloat::fcInfinity },
1556 { PInf, MInf, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1557 { PInf, PZero, "inf", APFloat::opOK, APFloat::fcInfinity },
1558 { PInf, MZero, "inf", APFloat::opOK, APFloat::fcInfinity },
1559 { PInf, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },
1562 { PInf, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1564 { PInf, PNormalValue, "inf", APFloat::opOK, APFloat::fcInfinity },
1565 { PInf, MNormalValue, "inf", APFloat::opOK, APFloat::fcInfinity },
1566 { PInf, PLargestValue, "inf", APFloat::opOK, APFloat::fcInfinity },
1567 { PInf, MLargestValue, "inf", APFloat::opOK, APFloat::fcInfinity },
1568 { PInf, PSmallestValue, "inf", APFloat::opOK, APFloat::fcInfinity },
1569 { PInf, MSmallestValue, "inf", APFloat::opOK, APFloat::fcInfinity },
1570 { PInf, PSmallestNormalized, "inf", APFloat::opOK, APFloat::fcInfinity },
1571 { PInf, MSmallestNormalized, "inf", APFloat::opOK, APFloat::fcInfinity },
1572 { MInf, PInf, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1573 { MInf, MInf, "-inf", APFloat::opOK, APFloat::fcInfinity },
1574 { MInf, PZero, "-inf", APFloat::opOK, APFloat::fcInfinity },
1575 { MInf, MZero, "-inf", APFloat::opOK, APFloat::fcInfinity },
1576 { MInf, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },
1579 { MInf, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1581 { MInf, PNormalValue, "-inf", APFloat::opOK, APFloat::fcInfinity },
1582 { MInf, MNormalValue, "-inf", APFloat::opOK, APFloat::fcInfinity },
1583 { MInf, PLargestValue, "-inf", APFloat::opOK, APFloat::fcInfinity },
1584 { MInf, MLargestValue, "-inf", APFloat::opOK, APFloat::fcInfinity },
1585 { MInf, PSmallestValue, "-inf", APFloat::opOK, APFloat::fcInfinity },
1586 { MInf, MSmallestValue, "-inf", APFloat::opOK, APFloat::fcInfinity },
1587 { MInf, PSmallestNormalized, "-inf", APFloat::opOK, APFloat::fcInfinity },
1588 { MInf, MSmallestNormalized, "-inf", APFloat::opOK, APFloat::fcInfinity },
1589 { PZero, PInf, "inf", APFloat::opOK, APFloat::fcInfinity },
1590 { PZero, MInf, "-inf", APFloat::opOK, APFloat::fcInfinity },
1591 { PZero, PZero, "0x0p+0", APFloat::opOK, APFloat::fcZero },
1592 { PZero, MZero, "0x0p+0", APFloat::opOK, APFloat::fcZero },
1593 { PZero, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },
1596 { PZero, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1598 { PZero, PNormalValue, "0x1p+0", APFloat::opOK, APFloat::fcNormal },
1599 { PZero, MNormalValue, "-0x1p+0", APFloat::opOK, APFloat::fcNormal },
1600 { PZero, PLargestValue, "0x1.fffffep+127", APFloat::opOK, APFloat::fcNormal },
1601 { PZero, MLargestValue, "-0x1.fffffep+127", APFloat::opOK, APFloat::fcNormal },
1602 { PZero, PSmallestValue, "0x1p-149", APFloat::opOK, APFloat::fcNormal },
1603 { PZero, MSmallestValue, "-0x1p-149", APFloat::opOK, APFloat::fcNormal },
1604 { PZero, PSmallestNormalized, "0x1p-126", APFloat::opOK, APFloat::fcNormal },
1605 { PZero, MSmallestNormalized, "-0x1p-126", APFloat::opOK, APFloat::fcNormal },
1606 { MZero, PInf, "inf", APFloat::opOK, APFloat::fcInfinity },
1607 { MZero, MInf, "-inf", APFloat::opOK, APFloat::fcInfinity },
1608 { MZero, PZero, "0x0p+0", APFloat::opOK, APFloat::fcZero },
1609 { MZero, MZero, "-0x0p+0", APFloat::opOK, APFloat::fcZero },
1610 { MZero, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },
1613 { MZero, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1615 { MZero, PNormalValue, "0x1p+0", APFloat::opOK, APFloat::fcNormal },
1616 { MZero, MNormalValue, "-0x1p+0", APFloat::opOK, APFloat::fcNormal },
1617 { MZero, PLargestValue, "0x1.fffffep+127", APFloat::opOK, APFloat::fcNormal },
1618 { MZero, MLargestValue, "-0x1.fffffep+127", APFloat::opOK, APFloat::fcNormal },
1619 { MZero, PSmallestValue, "0x1p-149", APFloat::opOK, APFloat::fcNormal },
1620 { MZero, MSmallestValue, "-0x1p-149", APFloat::opOK, APFloat::fcNormal },
1621 { MZero, PSmallestNormalized, "0x1p-126", APFloat::opOK, APFloat::fcNormal },
1622 { MZero, MSmallestNormalized, "-0x1p-126", APFloat::opOK, APFloat::fcNormal },
1623 { QNaN, PInf, "nan", APFloat::opOK, APFloat::fcNaN },
1624 { QNaN, MInf, "nan", APFloat::opOK, APFloat::fcNaN },
1625 { QNaN, PZero, "nan", APFloat::opOK, APFloat::fcNaN },
1626 { QNaN, MZero, "nan", APFloat::opOK, APFloat::fcNaN },
1627 { QNaN, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },
1630 { QNaN, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1632 { QNaN, PNormalValue, "nan", APFloat::opOK, APFloat::fcNaN },
1633 { QNaN, MNormalValue, "nan", APFloat::opOK, APFloat::fcNaN },
1634 { QNaN, PLargestValue, "nan", APFloat::opOK, APFloat::fcNaN },
1635 { QNaN, MLargestValue, "nan", APFloat::opOK, APFloat::fcNaN },
1636 { QNaN, PSmallestValue, "nan", APFloat::opOK, APFloat::fcNaN },
1637 { QNaN, MSmallestValue, "nan", APFloat::opOK, APFloat::fcNaN },
1638 { QNaN, PSmallestNormalized, "nan", APFloat::opOK, APFloat::fcNaN },
1639 { QNaN, MSmallestNormalized, "nan", APFloat::opOK, APFloat::fcNaN },
1642 { SNaN, PInf, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1643 { SNaN, MInf, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1644 { SNaN, PZero, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1645 { SNaN, MZero, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1646 { SNaN, QNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1647 { SNaN, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1648 { SNaN, PNormalValue, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1649 { SNaN, MNormalValue, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1650 { SNaN, PLargestValue, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1651 { SNaN, MLargestValue, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1652 { SNaN, PSmallestValue, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1653 { SNaN, MSmallestValue, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1654 { SNaN, PSmallestNormalized, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1655 { SNaN, MSmallestNormalized, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1657 { PNormalValue, PInf, "inf", APFloat::opOK, APFloat::fcInfinity },
1658 { PNormalValue, MInf, "-inf", APFloat::opOK, APFloat::fcInfinity },
1659 { PNormalValue, PZero, "0x1p+0", APFloat::opOK, APFloat::fcNormal },
1660 { PNormalValue, MZero, "0x1p+0", APFloat::opOK, APFloat::fcNormal },
1661 { PNormalValue, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },
1664 { PNormalValue, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1666 { PNormalValue, PNormalValue, "0x1p+1", APFloat::opOK, APFloat::fcNormal },
1667 { PNormalValue, MNormalValue, "0x0p+0", APFloat::opOK, APFloat::fcZero },
1668 { PNormalValue, PLargestValue, "0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
1669 { PNormalValue, MLargestValue, "-0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
1670 { PNormalValue, PSmallestValue, "0x1p+0", APFloat::opInexact, APFloat::fcNormal },
1671 { PNormalValue, MSmallestValue, "0x1p+0", APFloat::opInexact, APFloat::fcNormal },
1672 { PNormalValue, PSmallestNormalized, "0x1p+0", APFloat::opInexact, APFloat::fcNormal },
1673 { PNormalValue, MSmallestNormalized, "0x1p+0", APFloat::opInexact, APFloat::fcNormal },
1674 { MNormalValue, PInf, "inf", APFloat::opOK, APFloat::fcInfinity },
1675 { MNormalValue, MInf, "-inf", APFloat::opOK, APFloat::fcInfinity },
1676 { MNormalValue, PZero, "-0x1p+0", APFloat::opOK, APFloat::fcNormal },
1677 { MNormalValue, MZero, "-0x1p+0", APFloat::opOK, APFloat::fcNormal },
1678 { MNormalValue, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },
1681 { MNormalValue, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1683 { MNormalValue, PNormalValue, "0x0p+0", APFloat::opOK, APFloat::fcZero },
1684 { MNormalValue, MNormalValue, "-0x1p+1", APFloat::opOK, APFloat::fcNormal },
1685 { MNormalValue, PLargestValue, "0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
1686 { MNormalValue, MLargestValue, "-0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
1687 { MNormalValue, PSmallestValue, "-0x1p+0", APFloat::opInexact, APFloat::fcNormal },
1688 { MNormalValue, MSmallestValue, "-0x1p+0", APFloat::opInexact, APFloat::fcNormal },
1689 { MNormalValue, PSmallestNormalized, "-0x1p+0", APFloat::opInexact, APFloat::fcNormal },
1690 { MNormalValue, MSmallestNormalized, "-0x1p+0", APFloat::opInexact, APFloat::fcNormal },
1691 { PLargestValue, PInf, "inf", APFloat::opOK, APFloat::fcInfinity },
1692 { PLargestValue, MInf, "-inf", APFloat::opOK, APFloat::fcInfinity },
1693 { PLargestValue, PZero, "0x1.fffffep+127", APFloat::opOK, APFloat::fcNormal },
1694 { PLargestValue, MZero, "0x1.fffffep+127", APFloat::opOK, APFloat::fcNormal },
1695 { PLargestValue, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },
1698 { PLargestValue, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1700 { PLargestValue, PNormalValue, "0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
1701 { PLargestValue, MNormalValue, "0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
1702 { PLargestValue, PLargestValue, "inf", OverflowStatus, APFloat::fcInfinity },
1703 { PLargestValue, MLargestValue, "0x0p+0", APFloat::opOK, APFloat::fcZero },
1704 { PLargestValue, PSmallestValue, "0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
1705 { PLargestValue, MSmallestValue, "0x1.fffffep+127", APFloatAPFloat::fcNormal },
1706 { PLargestValue, PSmallestNormalized, "0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
1707 { PLargestValue, MSmallestNormalized, "0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
1708 { MLargestValue, PInf, "inf", APFloat::opOK, APFloat::fcInfinity },
1709 { MLargestValue, MInf, "-inf", APFloat::opOK, APFloat::fcInfinity },
1710 { MLargestValue, PZero, "-0x1.fffffep+127", APFloat::opOK, APFloat::fcNormal },
1711 { MLargestValue, MZero, "-0x1.fffffep+127", APFloat::opOK, APFloat::fcNormal },
1712 { MLargestValue, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },
1715 { MLargestValue, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1717 { MLargestValue, PNormalValue, "-0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
1718 { MLargestValue, MNormalValue, "-0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
1719 { MLargestValue, PLargestValue, "0x0p+0", APFloat::opOK, APFloat::fcZero },
1720 { MLargestValue, MLargestValue, "-inf", OverflowStatus, APFloat::fcInfinity },
1721 { MLargestValue, PSmallestValue, "-0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
1722 { MLargestValue, MSmallestValue, "-0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
1723 { MLargestValue, PSmallestNormalized, "-0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
1724 { MLargestValue, MSmallestNormalized, "-0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
1725 { PSmallestValue, PInf, "inf", APFloat::opOK, APFloat::fcInfinity },
1726 { PSmallestValue, MInf, "-inf", APFloat::opOK, APFloat::fcInfinity },
1727 { PSmallestValue, PZero, "0x1p-149", APFloat::opOK, APFloat::fcNormal },
1728 { PSmallestValue, MZero, "0x1p-149", APFloat::opOK, APFloat::fcNormal },
1729 { PSmallestValue, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },
1732 { PSmallestValue, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1734 { PSmallestValue, PNormalValue, "0x1p+0", APFloat::opInexact, APFloat::fcNormal },
1735 { PSmallestValue, MNormalValue, "-0x1p+0", APFloat::opInexact, APFloat::fcNormal },
1736 { PSmallestValue, PLargestValue, "0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
1737 { PSmallestValue, MLargestValue, "-0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
1738 { PSmallestValue, PSmallestValue, "0x1p-148", APFloat::opOK, APFloat::fcNormal },
1739 { PSmallestValue, MSmallestValue, "0x0p+0", APFloat::opOK, APFloat::fcZero },
1740 { PSmallestValue, PSmallestNormalized, "0x1.000002p-126", APFloat::opOK, APFloat::fcNormal },
1741 { PSmallestValue, MSmallestNormalized, "-0x1.fffffcp-127", APFloat::opOK, APFloat::fcNormal },
1742 { MSmallestValue, PInf, "inf", APFloat::opOK, APFloat::fcInfinity },
1743 { MSmallestValue, MInf, "-inf", APFloat::opOK, APFloat::fcInfinity },
1744 { MSmallestValue, PZero, "-0x1p-149", APFloat::opOK, APFloat::fcNormal },
1745 { MSmallestValue, MZero, "-0x1p-149", APFloat::opOK, APFloat::fcNormal },
1746 { MSmallestValue, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },
1749 { MSmallestValue, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1751 { MSmallestValue, PNormalValue, "0x1p+0", APFloat::opInexact, APFloat::fcNormal },
1752 { MSmallestValue, MNormalValue, "-0x1p+0", APFloat::opInexact, APFloat::fcNormal },
1753 { MSmallestValue, PLargestValue, "0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
1754 { MSmallestValue, MLargestValue, "-0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
1755 { MSmallestValue, PSmallestValue, "0x0p+0", APFloat::opOK, APFloat::fcZero },
1756 { MSmallestValue, MSmallestValue, "-0x1p-148", APFloat::opOK, APFloat::fcNormal },
1757 { MSmallestValue, PSmallestNormalized, "0x1.fffffcp-127", APFloat::opOK, APFloat::fcNormal },
1758 { MSmallestValue, MSmallestNormalized, "-0x1.000002p-126", APFloat::opOK, APFloat::fcNormal },
1759 { PSmallestNormalized, PInf, "inf", APFloat::opOK, APFloat::fcInfinity },
1760 { PSmallestNormalized, MInf, "-inf", APFloat::opOK, APFloat::fcInfinity },
1761 { PSmallestNormalized, PZero, "0x1p-126", APFloat::opOK, APFloat::fcNormal },
1762 { PSmallestNormalized, MZero, "0x1p-126", APFloat::opOK, APFloat::fcNormal },
1763 { PSmallestNormalized, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },
1766 { PSmallestNormalized, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1768 { PSmallestNormalized, PNormalValue, "0x1p+0", APFloat::opInexact, APFloat::fcNormal },
1769 { PSmallestNormalized, MNormalValue, "-0x1p+0", APFloat::opInexact, APFloat::fcNormal },
1770 { PSmallestNormalized, PLargestValue, "0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
1771 { PSmallestNormalized, MLargestValue, "-0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
1772 { PSmallestNormalized, PSmallestValue, "0x1.000002p-126", APFloat::opOK, APFloat::fcNormal },
1773 { PSmallestNormalized, MSmallestValue, "0x1.fffffcp-127", APFloat::opOK, APFloat::fcNormal },
1774 { PSmallestNormalized, PSmallestNormalized, "0x1p-125", APFloat::opOK, APFloat::fcNormal },
1775 { PSmallestNormalized, MSmallestNormalized, "0x0p+0", APFloat::opOK, APFloat::fcZero },
1776 { MSmallestNormalized, PInf, "inf", APFloat::opOK, APFloat::fcInfinity },
1777 { MSmallestNormalized, MInf, "-inf", APFloat::opOK, APFloat::fcInfinity },
1778 { MSmallestNormalized, PZero, "-0x1p-126", APFloat::opOK, APFloat::fcNormal },
1779 { MSmallestNormalized, MZero, "-0x1p-126", APFloat::opOK, APFloat::fcNormal },
1780 { MSmallestNormalized, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },
1783 { MSmallestNormalized, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1785 { MSmallestNormalized, PNormalValue, "0x1p+0", APFloat::opInexact, APFloat::fcNormal },
1786 { MSmallestNormalized, MNormalValue, "-0x1p+0", APFloat::opInexact, APFloat::fcNormal },
1787 { MSmallestNormalized, PLargestValue, "0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
1788 { MSmallestNormalized, MLargestValue, "-0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
1789 { MSmallestNormalized, PSmallestValue, "-0x1.fffffcp-127", APFloat::opOK, APFloat::fcNormal },
1790 { MSmallestNormalized, MSmallestValue, "-0x1.000002p-126", APFloat::opOK, APFloat::fcNormal },
1791 { MSmallestNormalized, PSmallestNormalized, "0x0p+0", APFloat::opOK, APFloat::fcZero },
1792 { MSmallestNormalized, MSmallestNormalized, "-0x1p-125", APFloat::opOK, APFloat::fcNormal }
1796 APFloat x(SpecialCaseTests[i].x);
1797 APFloat y(SpecialCaseTests[i].y);
1798 APFloat::opStatus status = x.add(y, APFloat::rmNearestTiesToEven);
1800 APFloat result(APFloat::IEEEsingle, SpecialCaseTests[i].result);
1816 APFloat PInf = APFloat::getInf(APFloat::IEEEsingle, false);
1817 APFloat MInf = APFloat::getInf(APFloat::IEEEsingle, true);
1818 APFloat PZero = APFloat::getZero(APFloat::IEEEsingle, false);
1819 APFloat MZero = APFloat::getZero(APFloat::IEEEsingle, true);
1820 APFloat QNaN = APFloat::getNaN(APFloat::IEEEsingle, false);
1821 APFloat SNaN = APFloat::getSNaN(APFloat::IEEEsingle, false);
1822 APFloat PNormalValue = APFloat(APFloat::IEEEsingle, "0x1p+0");
1823 APFloat MNormalValue = APFloat(APFloat::IEEEsingle, "-0x1p+0");
1824 APFloat PLargestValue = APFloat::getLargest(APFloat::IEEEsingle, false);
1825 APFloat MLargestValue = APFloat::getLargest(APFloat::IEEEsingle, true);
1826 APFloat PSmallestValue = APFloat::getSmallest(APFloat::IEEEsingle, false);
1827 APFloat MSmallestValue = APFloat::getSmallest(APFloat::IEEEsingle, true);
1828 APFloat PSmallestNormalized =
1829 APFloat::getSmallestNormalized(APFloat::IEEEsingle, false);
1830 APFloat MSmallestNormalized =
1831 APFloat::getSmallestNormalized(APFloat::IEEEsingle, true);
1833 const int OverflowStatus = APFloat::opOverflow | APFloat::opInexact;
1837 APFloat x;
1838 APFloat y;
1843 { PInf, PInf, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1844 { PInf, MInf, "inf", APFloat::opOK, APFloat::fcInfinity },
1845 { PInf, PZero, "inf", APFloat::opOK, APFloat::fcInfinity },
1846 { PInf, MZero, "inf", APFloat::opOK, APFloat::fcInfinity },
1847 { PInf, QNaN, "-nan", APFloat::opOK, APFloat::fcNaN },
1850 { PInf, SNaN, "-nan", APFloat::opInvalidOp, APFloat::fcNaN },
1852 { PInf, PNormalValue, "inf", APFloat::opOK, APFloat::fcInfinity },
1853 { PInf, MNormalValue, "inf", APFloat::opOK, APFloat::fcInfinity },
1854 { PInf, PLargestValue, "inf", APFloat::opOK, APFloat::fcInfinity },
1855 { PInf, MLargestValue, "inf", APFloat::opOK, APFloat::fcInfinity },
1856 { PInf, PSmallestValue, "inf", APFloat::opOK, APFloat::fcInfinity },
1857 { PInf, MSmallestValue, "inf", APFloat::opOK, APFloat::fcInfinity },
1858 { PInf, PSmallestNormalized, "inf", APFloat::opOK, APFloat::fcInfinity },
1859 { PInf, MSmallestNormalized, "inf", APFloat::opOK, APFloat::fcInfinity },
1860 { MInf, PInf, "-inf", APFloat::opOK, APFloat::fcInfinity },
1861 { MInf, MInf, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1862 { MInf, PZero, "-inf", APFloat::opOK, APFloat::fcInfinity },
1863 { MInf, MZero, "-inf", APFloat::opOK, APFloat::fcInfinity },
1864 { MInf, QNaN, "-nan", APFloat::opOK, APFloat::fcNaN },
1867 { MInf, SNaN, "-nan", APFloat::opInvalidOp, APFloat::fcNaN },
1869 { MInf, PNormalValue, "-inf", APFloat::opOK, APFloat::fcInfinity },
1870 { MInf, MNormalValue, "-inf", APFloat::opOK, APFloat::fcInfinity },
1871 { MInf, PLargestValue, "-inf", APFloat::opOK, APFloat::fcInfinity },
1872 { MInf, MLargestValue, "-inf", APFloat::opOK, APFloat::fcInfinity },
1873 { MInf, PSmallestValue, "-inf", APFloat::opOK, APFloat::fcInfinity },
1874 { MInf, MSmallestValue, "-inf", APFloat::opOK, APFloat::fcInfinity },
1875 { MInf, PSmallestNormalized, "-inf", APFloat::opOK, APFloat::fcInfinity },
1876 { MInf, MSmallestNormalized, "-inf", APFloat::opOK, APFloat::fcInfinity },
1877 { PZero, PInf, "-inf", APFloat::opOK, APFloat::fcInfinity },
1878 { PZero, MInf, "inf", APFloat::opOK, APFloat::fcInfinity },
1879 { PZero, PZero, "0x0p+0", APFloat::opOK, APFloat::fcZero },
1880 { PZero, MZero, "0x0p+0", APFloat::opOK, APFloat::fcZero },
1881 { PZero, QNaN, "-nan", APFloat::opOK, APFloat::fcNaN },
1884 { PZero, SNaN, "-nan", APFloat::opInvalidOp, APFloat::fcNaN },
1886 { PZero, PNormalValue, "-0x1p+0", APFloat::opOK, APFloat::fcNormal },
1887 { PZero, MNormalValue, "0x1p+0", APFloat::opOK, APFloat::fcNormal },
1888 { PZero, PLargestValue, "-0x1.fffffep+127", APFloat::opOK, APFloat::fcNormal },
1889 { PZero, MLargestValue, "0x1.fffffep+127", APFloat::opOK, APFloat::fcNormal },
1890 { PZero, PSmallestValue, "-0x1p-149", APFloat::opOK, APFloat::fcNormal },
1891 { PZero, MSmallestValue, "0x1p-149", APFloat::opOK, APFloat::fcNormal },
1892 { PZero, PSmallestNormalized, "-0x1p-126", APFloat::opOK, APFloat::fcNormal },
1893 { PZero, MSmallestNormalized, "0x1p-126", APFloat::opOK, APFloat::fcNormal },
1894 { MZero, PInf, "-inf", APFloat::opOK, APFloat::fcInfinity },
1895 { MZero, MInf, "inf", APFloat::opOK, APFloat::fcInfinity },
1896 { MZero, PZero, "-0x0p+0", APFloat::opOK, APFloat::fcZero },
1897 { MZero, MZero, "0x0p+0", APFloat::opOK, APFloat::fcZero },
1898 { MZero, QNaN, "-nan", APFloat::opOK, APFloat::fcNaN },
1901 { MZero, SNaN, "-nan", APFloat::opInvalidOp, APFloat::fcNaN },
1903 { MZero, PNormalValue, "-0x1p+0", APFloat::opOK, APFloat::fcNormal },
1904 { MZero, MNormalValue, "0x1p+0", APFloat::opOK, APFloat::fcNormal },
1905 { MZero, PLargestValue, "-0x1.fffffep+127", APFloat::opOK, APFloat::fcNormal },
1906 { MZero, MLargestValue, "0x1.fffffep+127", APFloat::opOK, APFloat::fcNormal },
1907 { MZero, PSmallestValue, "-0x1p-149", APFloat::opOK, APFloat::fcNormal },
1908 { MZero, MSmallestValue, "0x1p-149", APFloat::opOK, APFloat::fcNormal },
1909 { MZero, PSmallestNormalized, "-0x1p-126", APFloat::opOK, APFloat::fcNormal },
1910 { MZero, MSmallestNormalized, "0x1p-126", APFloat::opOK, APFloat::fcNormal },
1911 { QNaN, PInf, "nan", APFloat::opOK, APFloat::fcNaN },
1912 { QNaN, MInf, "nan", APFloat::opOK, APFloat::fcNaN },
1913 { QNaN, PZero, "nan", APFloat::opOK, APFloat::fcNaN },
1914 { QNaN, MZero, "nan", APFloat::opOK, APFloat::fcNaN },
1915 { QNaN, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },
1918 { QNaN, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1920 { QNaN, PNormalValue, "nan", APFloat::opOK, APFloat::fcNaN },
1921 { QNaN, MNormalValue, "nan", APFloat::opOK, APFloat::fcNaN },
1922 { QNaN, PLargestValue, "nan", APFloat::opOK, APFloat::fcNaN },
1923 { QNaN, MLargestValue, "nan", APFloat::opOK, APFloat::fcNaN },
1924 { QNaN, PSmallestValue, "nan", APFloat::opOK, APFloat::fcNaN },
1925 { QNaN, MSmallestValue, "nan", APFloat::opOK, APFloat::fcNaN },
1926 { QNaN, PSmallestNormalized, "nan", APFloat::opOK, APFloat::fcNaN },
1927 { QNaN, MSmallestNormalized, "nan", APFloat::opOK, APFloat::fcNaN },
1930 { SNaN, PInf, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1931 { SNaN, MInf, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1932 { SNaN, PZero, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1933 { SNaN, MZero, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1934 { SNaN, QNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1935 { SNaN, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1936 { SNaN, PNormalValue, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1937 { SNaN, MNormalValue, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1938 { SNaN, PLargestValue, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1939 { SNaN, MLargestValue, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1940 { SNaN, PSmallestValue, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1941 { SNaN, MSmallestValue, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1942 { SNaN, PSmallestNormalized, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1943 { SNaN, MSmallestNormalized, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
1945 { PNormalValue, PInf, "-inf", APFloat::opOK, APFloat::fcInfinity },
1946 { PNormalValue, MInf, "inf", APFloat::opOK, APFloat::fcInfinity },
1947 { PNormalValue, PZero, "0x1p+0", APFloat::opOK, APFloat::fcNormal },
1948 { PNormalValue, MZero, "0x1p+0", APFloat::opOK, APFloat::fcNormal },
1949 { PNormalValue, QNaN, "-nan", APFloat::opOK, APFloat::fcNaN },
1952 { PNormalValue, SNaN, "-nan", APFloat::opInvalidOp, APFloat::fcNaN },
1954 { PNormalValue, PNormalValue, "0x0p+0", APFloat::opOK, APFloat::fcZero },
1955 { PNormalValue, MNormalValue, "0x1p+1", APFloat::opOK, APFloat::fcNormal },
1956 { PNormalValue, PLargestValue, "-0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
1957 { PNormalValue, MLargestValue, "0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
1958 { PNormalValue, PSmallestValue, "0x1p+0", APFloat::opInexact, APFloat::fcNormal },
1959 { PNormalValue, MSmallestValue, "0x1p+0", APFloat::opInexact, APFloat::fcNormal },
1960 { PNormalValue, PSmallestNormalized, "0x1p+0", APFloat::opInexact, APFloat::fcNormal },
1961 { PNormalValue, MSmallestNormalized, "0x1p+0", APFloat::opInexact, APFloat::fcNormal },
1962 { MNormalValue, PInf, "-inf", APFloat::opOK, APFloat::fcInfinity },
1963 { MNormalValue, MInf, "inf", APFloat::opOK, APFloat::fcInfinity },
1964 { MNormalValue, PZero, "-0x1p+0", APFloat::opOK, APFloat::fcNormal },
1965 { MNormalValue, MZero, "-0x1p+0", APFloat::opOK, APFloat::fcNormal },
1966 { MNormalValue, QNaN, "-nan", APFloat::opOK, APFloat::fcNaN },
1969 { MNormalValue, SNaN, "-nan", APFloat::opInvalidOp, APFloat::fcNaN },
1971 { MNormalValue, PNormalValue, "-0x1p+1", APFloat::opOK, APFloat::fcNormal },
1972 { MNormalValue, MNormalValue, "0x0p+0", APFloat::opOK, APFloat::fcZero },
1973 { MNormalValue, PLargestValue, "-0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
1974 APFloat::opInexact, APFloat::fcNormal },
1975 { MNormalValue, PSmallestValue, "-0x1p+0", APFloat::opInexact, APFloat::fcNormal },
1976 { MNormalValue, MSmallestValue, "-0x1p+0", APFloat::opInexact, APFloat::fcNormal },
1977 { MNormalValue, PSmallestNormalized, "-0x1p+0", APFloat::opInexact, APFloat::fcNormal },
1978 { MNormalValue, MSmallestNormalized, "-0x1p+0", APFloat::opInexact, APFloat::fcNormal },
1979 { PLargestValue, PInf, "-inf", APFloat::opOK, APFloat::fcInfinity },
1980 { PLargestValue, MInf, "inf", APFloat::opOK, APFloat::fcInfinity },
1981 { PLargestValue, PZero, "0x1.fffffep+127", APFloat::opOK, APFloat::fcNormal },
1982 { PLargestValue, MZero, "0x1.fffffep+127", APFloat::opOK, APFloat::fcNormal },
1983 { PLargestValue, QNaN, "-nan", APFloat::opOK, APFloat::fcNaN },
1986 { PLargestValue, SNaN, "-nan", APFloat::opInvalidOp, APFloat::fcNaN },
1988 { PLargestValue, PNormalValue, "0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
1989 { PLargestValue, MNormalValue, "0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
1990 { PLargestValue, PLargestValue, "0x0p+0", APFloat::opOK, APFloat::fcZero },
1991 { PLargestValue, MLargestValue, "inf", OverflowStatus, APFloat::fcInfinity },
1992 { PLargestValue, PSmallestValue, "0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
1993 { PLargestValue, MSmallestValue, "0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
1994 { PLargestValue, PSmallestNormalized, "0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
1995 { PLargestValue, MSmallestNormalized, "0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
1996 { MLargestValue, PInf, "-inf", APFloat::opOK, APFloat::fcInfinity },
1997 { MLargestValue, MInf, "inf", APFloat::opOK, APFloat::fcInfinity },
1998 { MLargestValue, PZero, "-0x1.fffffep+127", APFloat::opOK, APFloat::fcNormal },
1999 { MLargestValue, MZero, "-0x1.fffffep+127", APFloat::opOK, APFloat::fcNormal },
2000 { MLargestValue, QNaN, "-nan", APFloat::opOK, APFloat::fcNaN },
2003 { MLargestValue, SNaN, "-nan", APFloat::opInvalidOp, APFloat::fcNaN },
2005 { MLargestValue, PNormalValue, "-0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
2006 { MLargestValue, MNormalValue, "-0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
2007 { MLargestValue, PLargestValue, "-inf", OverflowStatus, APFloat::fcInfinity },
2008 { MLargestValue, MLargestValue, "0x0p+0", APFloat::opOK, APFloat::fcZero },
2009 { MLargestValue, PSmallestValue, "-0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
2010 { MLargestValue, MSmallestValue, "-0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
2011 { MLargestValue, PSmallestNormalized, "-0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
2012 { MLargestValue, MSmallestNormalized, "-0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
2013 { PSmallestValue, PInf, "-inf", APFloat::opOK, APFloat::fcInfinity },
2014 { PSmallestValue, MInf, "inf", APFloat::opOK, APFloat::fcInfinity },
2015 { PSmallestValue, PZero, "0x1p-149", APFloat::opOK, APFloat::fcNormal },
2016 { PSmallestValue, MZero, "0x1p-149", APFloat::opOK, APFloat::fcNormal },
2017 { PSmallestValue, QNaN, "-nan", APFloat::opOK, APFloat::fcNaN },
2020 { PSmallestValue, SNaN, "-nan", APFloat::opInvalidOp, APFloat::fcNaN },
2022 { PSmallestValue, PNormalValue, "-0x1p+0", APFloat::opInexact, APFloat::fcNormal },
2023 { PSmallestValue, MNormalValue, "0x1p+0", APFloat::opInexact, APFloat::fcNormal },
2024 { PSmallestValue, PLargestValue, "-0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
2025 { PSmallestValue, MLargestValue, "0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
2026 { PSmallestValue, PSmallestValue, "0x0p+0", APFloat::opOK, APFloat::fcZero },
2027 { PSmallestValue, MSmallestValue, "0x1p-148", APFloat::opOK, APFloat::fcNormal },
2028 { PSmallestValue, PSmallestNormalized, "-0x1.fffffcp-127", APFloat::opOK, APFloat::fcNormal },
2029 { PSmallestValue, MSmallestNormalized, "0x1.000002p-126", APFloat::opOK, APFloat::fcNormal },
2030 { MSmallestValue, PInf, "-inf", APFloat::opOK, APFloat::fcInfinity },
2031 { MSmallestValue, MInf, "inf", APFloat::opOK, APFloat::fcInfinity },
2032 { MSmallestValue, PZero, "-0x1p-149", APFloat::opOK, APFloat::fcNormal },
2033 { MSmallestValue, MZero, "-0x1p-149", APFloat::opOK, APFloat::fcNormal },
2034 { MSmallestValue, QNaN, "-nan", APFloat::opOK, APFloat::fcNaN },
2037 { MSmallestValue, SNaN, "-nan", APFloat::opInvalidOp, APFloat::fcNaN },
2039 { MSmallestValue, PNormalValue, "-0x1p+0", APFloat::opInexact, APFloat::fcNormal },
2040 { MSmallestValue, MNormalValue, "0x1p+0", APFloat::opInexact, APFloat::fcNormal },
2041 { MSmallestValue, PLargestValue, "-0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
2042 { MSmallestValue, MLargestValue, "0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
2043 { MSmallestValue, PSmallestValue, "-0x1p-148", APFloat::opOK, APFloat::fcNormal },
2044 { MSmallestValue, MSmallestValue, "0x0p+0", APFloat::opOK, APFloat::fcZero },
2045 { MSmallestValue, PSmallestNormalized, "-0x1.000002p-126", APFloat::opOK, APFloat::fcNormal },
2046 { MSmallestValue, MSmallestNormalized, "0x1.fffffcp-127", APFloat::opOK, APFloat::fcNormal },
2047 { PSmallestNormalized, PInf, "-inf", APFloat::opOK, APFloat::fcInfinity },
2048 { PSmallestNormalized, MInf, "inf", APFloat::opOK, APFloat::fcInfinity },
2049 { PSmallestNormalized, PZero, "0x1p-126", APFloat::opOK, APFloat::fcNormal },
2050 { PSmallestNormalized, MZero, "0x1p-126", APFloat::opOK, APFloat::fcNormal },
2051 { PSmallestNormalized, QNaN, "-nan", APFloat::opOK, APFloat::fcNaN },
2054 { PSmallestNormalized, SNaN, "-nan", APFloat::opInvalidOp, APFloat::fcNaN },
2056 { PSmallestNormalized, PNormalValue, "-0x1p+0", APFloat::opInexact, APFloat::fcNormal },
2057 { PSmallestNormalized, MNormalValue, "0x1p+0", APFloat::opInexact, APFloat::fcNormal },
2058 { PSmallestNormalized, PLargestValue, "-0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
2059 { PSmallestNormalized, MLargestValue, "0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
2060 { PSmallestNormalized, PSmallestValue, "0x1.fffffcp-127", APFloat::opOK, APFloat::fcNormal },
2061 { PSmallestNormalized, MSmallestValue, "0x1.000002p-126", APFloat::opOK, APFloat::fcNormal },
2062 { PSmallestNormalized, PSmallestNormalized, "0x0p+0", APFloat::opOK, APFloat::fcZero },
2063 { PSmallestNormalized, MSmallestNormalized, "0x1p-125", APFloat::opOK, APFloat::fcNormal },
2064 { MSmallestNormalized, PInf, "-inf", APFloat::opOK, APFloat::fcInfinity },
2065 { MSmallestNormalized, MInf, "inf", APFloat::opOK, APFloat::fcInfinity },
2066 { MSmallestNormalized, PZero, "-0x1p-126", APFloat::opOK, APFloat::fcNormal },
2067 { MSmallestNormalized, MZero, "-0x1p-126", APFloat::opOK, APFloat::fcNormal },
2068 { MSmallestNormalized, QNaN, "-nan", APFloat::opOK, APFloat::fcNaN },
2071 { MSmallestNormalized, SNaN, "-nan", APFloat::opInvalidOp, APFloat::fcNaN },
2073 { MSmallestNormalized, PNormalValue, "-0x1p+0", APFloat::opInexact, APFloat::fcNormal },
2074 { MSmallestNormalized, MNormalValue, "0x1p+0", APFloat::opInexact, APFloat::fcNormal },
2075 { MSmallestNormalized, PLargestValue, "-0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
2076 { MSmallestNormalized, MLargestValue, "0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },
2077 { MSmallestNormalized, PSmallestValue, "-0x1.000002p-126", APFloat::opOK, APFloat::fcNormal },
2078 { MSmallestNormalized, MSmallestValue, "-0x1.fffffcp-127", APFloat::opOK, APFloat::fcNormal },
2079 { MSmallestNormalized, PSmallestNormalized, "-0x1p-125", APFloat::opOK, APFloat::fcNormal },
2080 { MSmallestNormalized, MSmallestNormalized, "0x0p+0", APFloat::opOK, APFloat::fcZero }
2084 APFloat x(SpecialCaseTests[i].x);
2085 APFloat y(SpecialCaseTests[i].y);
2086 APFloat::opStatus status = x.subtract(y, APFloat::rmNearestTiesToEven);
2088 APFloat result(APFloat::IEEEsingle, SpecialCaseTests[i].result);
2104 APFloat PInf = APFloat::getInf(APFloat::IEEEsingle, false);
2105 APFloat MInf = APFloat::getInf(APFloat::IEEEsingle, true);
2106 APFloat PZero = APFloat::getZero(APFloat::IEEEsingle, false);
2107 APFloat MZero = APFloat::getZero(APFloat::IEEEsingle, true);
2108 APFloat QNaN = APFloat::getNaN(APFloat::IEEEsingle, false);
2109 APFloat SNaN = APFloat::getSNaN(APFloat::IEEEsingle, false);
2110 APFloat PNormalValue = APFloat(APFloat::IEEEsingle, "0x1p+0");
2111 APFloat MNormalValue = APFloat(APFloat::IEEEsingle, "-0x1p+0");
2112 APFloat PLargestValue = APFloat::getLargest(APFloat::IEEEsingle, false);
2113 APFloat MLargestValue = APFloat::getLargest(APFloat::IEEEsingle, true);
2114 APFloat PSmallestValue = APFloat::getSmallest(APFloat::IEEEsingle, false);
2115 APFloat MSmallestValue = APFloat::getSmallest(APFloat::IEEEsingle, true);
2116 APFloat PSmallestNormalized =
2117 APFloat::getSmallestNormalized(APFloat::IEEEsingle, false);
2118 APFloat MSmallestNormalized =
2119 APFloat::getSmallestNormalized(APFloat::IEEEsingle, true);
2121 const int OverflowStatus = APFloat::opOverflow | APFloat::opInexact;
2122 const int UnderflowStatus = APFloat::opUnderflow | APFloat::opInexact;
2126 APFloat x;
2127 APFloat y;
2132 { PInf, PInf, "inf", APFloat::opOK, APFloat::fcInfinity },
2133 { PInf, MInf, "-inf", APFloat::opOK, APFloat::fcInfinity },
2134 { PInf, PZero, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2135 { PInf, MZero, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2136 { PInf, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },
2139 { PInf, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2141 { PInf, PNormalValue, "inf", APFloat::opOK, APFloat::fcInfinity },
2142 { PInf, MNormalValue, "-inf", APFloat::opOK, APFloat::fcInfinity },
2143 { PInf, PLargestValue, "inf", APFloat::opOK, APFloat::fcInfinity },
2144 { PInf, MLargestValue, "-inf", APFloat::opOK, APFloat::fcInfinity },
2145 { PInf, PSmallestValue, "inf", APFloat::opOK, APFloat::fcInfinity },
2146 { PInf, MSmallestValue, "-inf", APFloat::opOK, APFloat::fcInfinity },
2147 { PInf, PSmallestNormalized, "inf", APFloat::opOK, APFloat::fcInfinity },
2148 { PInf, MSmallestNormalized, "-inf", APFloat::opOK, APFloat::fcInfinity },
2149 { MInf, PInf, "-inf", APFloat::opOK, APFloat::fcInfinity },
2150 { MInf, MInf, "inf", APFloat::opOK, APFloat::fcInfinity },
2151 { MInf, PZero, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2152 { MInf, MZero, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2153 { MInf, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },
2156 { MInf, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2158 { MInf, PNormalValue, "-inf", APFloat::opOK, APFloat::fcInfinity },
2159 { MInf, MNormalValue, "inf", APFloat::opOK, APFloat::fcInfinity },
2160 { MInf, PLargestValue, "-inf", APFloat::opOK, APFloat::fcInfinity },
2161 { MInf, MLargestValue, "inf", APFloat::opOK, APFloat::fcInfinity },
2162 { MInf, PSmallestValue, "-inf", APFloat::opOK, APFloat::fcInfinity },
2163 { MInf, MSmallestValue, "inf", APFloat::opOK, APFloat::fcInfinity },
2164 { MInf, PSmallestNormalized, "-inf", APFloat::opOK, APFloat::fcInfinity },
2165 { MInf, MSmallestNormalized, "inf", APFloat::opOK, APFloat::fcInfinity },
2166 { PZero, PInf, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2167 { PZero, MInf, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2168 { PZero, PZero, "0x0p+0", APFloat::opOK, APFloat::fcZero },
2169 { PZero, MZero, "-0x0p+0", APFloat::opOK, APFloat::fcZero },
2170 { PZero, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },
2173 { PZero, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2175 { PZero, PNormalValue, "0x0p+0", APFloat::opOK, APFloat::fcZero },
2176 { PZero, MNormalValue, "-0x0p+0", APFloat::opOK, APFloat::fcZero },
2177 { PZero, PLargestValue, "0x0p+0", APFloat::opOK, APFloat::fcZero },
2178 { PZero, MLargestValue, "-0x0p+0", APFloat::opOK, APFloat::fcZero },
2179 { PZero, PSmallestValue, "0x0p+0", APFloat::opOK, APFloat::fcZero },
2180 { PZero, MSmallestValue, "-0x0p+0", APFloat::opOK, APFloat::fcZero },
2181 { PZero, PSmallestNormalized, "0x0p+0", APFloat::opOK, APFloat::fcZero },
2182 { PZero, MSmallestNormalized, "-0x0p+0", APFloat::opOK, APFloat::fcZero },
2183 { MZero, PInf, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2184 { MZero, MInf, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2185 { MZero, PZero, "-0x0p+0", APFloat::opOK, APFloat::fcZero },
2186 { MZero, MZero, "0x0p+0", APFloat::opOK, APFloat::fcZero },
2187 { MZero, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },
2190 { MZero, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2192 { MZero, PNormalValue, "-0x0p+0", APFloat::opOK, APFloat::fcZero },
2193 { MZero, MNormalValue, "0x0p+0", APFloat::opOK, APFloat::fcZero },
2194 { MZero, PLargestValue, "-0x0p+0", APFloat::opOK, APFloat::fcZero },
2195 { MZero, MLargestValue, "0x0p+0", APFloat::opOK, APFloat::fcZero },
2196 { MZero, PSmallestValue, "-0x0p+0", APFloat::opOK, APFloat::fcZero },
2197 { MZero, MSmallestValue, "0x0p+0", APFloat::opOK, APFloat::fcZero },
2198 { MZero, PSmallestNormalized, "-0x0p+0", APFloat::opOK, APFloat::fcZero },
2199 { MZero, MSmallestNormalized, "0x0p+0", APFloat::opOK, APFloat::fcZero },
2200 { QNaN, PInf, "nan", APFloat::opOK, APFloat::fcNaN },
2201 { QNaN, MInf, "nan", APFloat::opOK, APFloat::fcNaN },
2202 { QNaN, PZero, "nan", APFloat::opOK, APFloat::fcNaN },
2203 { QNaN, MZero, "nan", APFloat::opOK, APFloat::fcNaN },
2204 { QNaN, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },
2207 { QNaN, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2209 { QNaN, PNormalValue, "nan", APFloat::opOK, APFloat::fcNaN },
2210 { QNaN, MNormalValue, "nan", APFloat::opOK, APFloat::fcNaN },
2211 { QNaN, PLargestValue, "nan", APFloat::opOK, APFloat::fcNaN },
2212 { QNaN, MLargestValue, "nan", APFloat::opOK, APFloat::fcNaN },
2213 { QNaN, PSmallestValue, "nan", APFloat::opOK, APFloat::fcNaN },
2214 { QNaN, MSmallestValue, "nan", APFloat::opOK, APFloat::fcNaN },
2215 { QNaN, PSmallestNormalized, "nan", APFloat::opOK, APFloat::fcNaN },
2216 { QNaN, MSmallestNormalized, "nan", APFloat::opOK, APFloat::fcNaN },
2219 { SNaN, PInf, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2220 { SNaN, MInf, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2221 { SNaN, PZero, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2222 { SNaN, MZero, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2223 { SNaN, QNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2224 { SNaN, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2225 { SNaN, PNormalValue, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2226 { SNaN, MNormalValue, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2227 { SNaN, PLargestValue, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2228 { SNaN, MLargestValue, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2229 { SNaN, PSmallestValue, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2230 { SNaN, MSmallestValue, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2231 { SNaN, PSmallestNormalized, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2232 { SNaN, MSmallestNormalized, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2234 { PNormalValue, PInf, "inf", APFloat::opOK, APFloat::fcInfinity },
2235 { PNormalValue, MInf, "-inf", APFloat::opOK, APFloat::fcInfinity },
2236 { PNormalValue, PZero, "0x0p+0", APFloat::opOK, APFloat::fcZero },
2237 { PNormalValue, MZero, "-0x0p+0", APFloat::opOK, APFloat::fcZero },
2238 { PNormalValue, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },
2241 { PNormalValue, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2243 APFloat::opOK, APFloat::fcNormal },
2244 { PNormalValue, MNormalValue, "-0x1p+0", APFloat::opOK, APFloat::fcNormal },
2245 { PNormalValue, PLargestValue, "0x1.fffffep+127", APFloat::opOK, APFloat::fcNormal },
2246 { PNormalValue, MLargestValue, "-0x1.fffffep+127", APFloat::opOK, APFloat::fcNormal },
2247 { PNormalValue, PSmallestValue, "0x1p-149", APFloat::opOK, APFloat::fcNormal },
2248 { PNormalValue, MSmallestValue, "-0x1p-149", APFloat::opOK, APFloat::fcNormal },
2249 { PNormalValue, PSmallestNormalized, "0x1p-126", APFloat::opOK, APFloat::fcNormal },
2250 { PNormalValue, MSmallestNormalized, "-0x1p-126", APFloat::opOK, APFloat::fcNormal },
2251 { MNormalValue, PInf, "-inf", APFloat::opOK, APFloat::fcInfinity },
2252 { MNormalValue, MInf, "inf", APFloat::opOK, APFloat::fcInfinity },
2253 { MNormalValue, PZero, "-0x0p+0", APFloat::opOK, APFloat::fcZero },
2254 { MNormalValue, MZero, "0x0p+0", APFloat::opOK, APFloat::fcZero },
2255 { MNormalValue, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },
2258 { MNormalValue, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2260 { MNormalValue, PNormalValue, "-0x1p+0", APFloat::opOK, APFloat::fcNormal },
2261 { MNormalValue, MNormalValue, "0x1p+0", APFloat::opOK, APFloat::fcNormal },
2262 { MNormalValue, PLargestValue, "-0x1.fffffep+127", APFloat::opOK, APFloat::fcNormal },
2263 { MNormalValue, MLargestValue, "0x1.fffffep+127", APFloat::opOK, APFloat::fcNormal },
2264 { MNormalValue, PSmallestValue, "-0x1p-149", APFloat::opOK, APFloat::fcNormal },
2265 { MNormalValue, MSmallestValue, "0x1p-149", APFloat::opOK, APFloat::fcNormal },
2266 { MNormalValue, PSmallestNormalized, "-0x1p-126", APFloat::opOK, APFloat::fcNormal },
2267 { MNormalValue, MSmallestNormalized, "0x1p-126", APFloat::opOK, APFloat::fcNormal },
2268 { PLargestValue, PInf, "inf", APFloat::opOK, APFloat::fcInfinity },
2269 { PLargestValue, MInf, "-inf", APFloat::opOK, APFloat::fcInfinity },
2270 { PLargestValue, PZero, "0x0p+0", APFloat::opOK, APFloat::fcZero },
2271 { PLargestValue, MZero, "-0x0p+0", APFloat::opOK, APFloat::fcZero },
2272 { PLargestValue, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },
2275 { PLargestValue, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2277 { PLargestValue, PNormalValue, "0x1.fffffep+127", APFloat::opOK, APFloat::fcNormal },
2278 { PLargestValue, MNormalValue, "-0x1.fffffep+127", APFloat::opOK, APFloat::fcNormal },
2279 { PLargestValue, PLargestValue, "inf", OverflowStatus, APFloat::fcInfinity },
2280 { PLargestValue, MLargestValue, "-inf", OverflowStatus, APFloat::fcInfinity },
2281 { PLargestValue, PSmallestValue, "0x1.fffffep-22", APFloat::opOK, APFloat::fcNormal },
2282 { PLargestValue, MSmallestValue, "-0x1.fffffep-22", APFloat::opOK, APFloat::fcNormal },
2283 { PLargestValue, PSmallestNormalized, "0x1.fffffep+1", APFloat::opOK, APFloat::fcNormal },
2284 { PLargestValue, MSmallestNormalized, "-0x1.fffffep+1", APFloat::opOK, APFloat::fcNormal },
2285 { MLargestValue, PInf, "-inf", APFloat::opOK, APFloat::fcInfinity },
2286 { MLargestValue, MInf, "inf", APFloat::opOK, APFloat::fcInfinity },
2287 { MLargestValue, PZero, "-0x0p+0", APFloat::opOK, APFloat::fcZero },
2288 { MLargestValue, MZero, "0x0p+0", APFloat::opOK, APFloat::fcZero },
2289 { MLargestValue, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },
2292 { MLargestValue, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2294 { MLargestValue, PNormalValue, "-0x1.fffffep+127", APFloat::opOK, APFloat::fcNormal },
2295 { MLargestValue, MNormalValue, "0x1.fffffep+127", APFloat::opOK, APFloat::fcNormal },
2296 { MLargestValue, PLargestValue, "-inf", OverflowStatus, APFloat::fcInfinity },
2297 { MLargestValue, MLargestValue, "inf", OverflowStatus, APFloat::fcInfinity },
2298 { MLargestValue, PSmallestValue, "-0x1.fffffep-22", APFloat::opOK, APFloat::fcNormal },
2299 { MLargestValue, MSmallestValue, "0x1.fffffep-22", APFloat::opOK, APFloat::fcNormal },
2300 { MLargestValue, PSmallestNormalized, "-0x1.fffffep+1", APFloat::opOK, APFloat::fcNormal },
2301 { MLargestValue, MSmallestNormalized, "0x1.fffffep+1", APFloat::opOK, APFloat::fcNormal },
2302 { PSmallestValue, PInf, "inf", APFloat::opOK, APFloat::fcInfinity },
2303 { PSmallestValue, MInf, "-inf", APFloat::opOK, APFloat::fcInfinity },
2304 { PSmallestValue, PZero, "0x0p+0", APFloat::opOK, APFloat::fcZero },
2305 { PSmallestValue, MZero, "-0x0p+0", APFloat::opOK, APFloat::fcZero },
2306 { PSmallestValue, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },
2309 { PSmallestValue, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2311 { PSmallestValue, PNormalValue, "0x1p-149", APFloat::opOK, APFloat::fcNormal },
2312 { PSmallestValue, MNormalValue, "-0x1p-149", APFloat::opOK, APFloat::fcNormal },
2313 { PSmallestValue, PLargestValue, "0x1.fffffep-22", APFloat::opOK, APFloat::fcNormal },
2314 { PSmallestValue, MLargestValue, "-0x1.fffffep-22", APFloat::opOK, APFloat::fcNormal },
2315 { PSmallestValue, PSmallestValue, "0x0p+0", UnderflowStatus, APFloat::fcZero },
2316 { PSmallestValue, MSmallestValue, "-0x0p+0", UnderflowStatus, APFloat::fcZero },
2317 { PSmallestValue, PSmallestNormalized, "0x0p+0", UnderflowStatus, APFloat::fcZero },
2318 { PSmallestValue, MSmallestNormalized, "-0x0p+0", UnderflowStatus, APFloat::fcZero },
2319 { MSmallestValue, PInf, "-inf", APFloat::opOK, APFloat::fcInfinity },
2320 { MSmallestValue, MInf, "inf", APFloat::opOK, APFloat::fcInfinity },
2321 { MSmallestValue, PZero, "-0x0p+0", APFloat::opOK, APFloat::fcZero },
2322 { MSmallestValue, MZero, "0x0p+0", APFloat::opOK, APFloat::fcZero },
2323 { MSmallestValue, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },
2326 { MSmallestValue, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2328 { MSmallestValue, PNormalValue, "-0x1p-149", APFloat::opOK, APFloat::fcNormal },
2329 { MSmallestValue, MNormalValue, "0x1p-149", APFloat::opOK, APFloat::fcNormal },
2330 { MSmallestValue, PLargestValue, "-0x1.fffffep-22", APFloat::opOK, APFloat::fcNormal },
2331 { MSmallestValue, MLargestValue, "0x1.fffffep-22", APFloat::opOK, APFloat::fcNormal },
2332 { MSmallestValue, PSmallestValue, "-0x0p+0", UnderflowStatus, APFloat::fcZero },
2333 { MSmallestValue, MSmallestValue, "0x0p+0", UnderflowStatus, APFloat::fcZero },
2334 { MSmallestValue, PSmallestNormalized, "-0x0p+0", UnderflowStatus, APFloat::fcZero },
2335 { MSmallestValue, MSmallestNormalized, "0x0p+0", UnderflowStatus, APFloat::fcZero },
2336 { PSmallestNormalized, PInf, "inf", APFloat::opOK, APFloat::fcInfinity },
2337 { PSmallestNormalized, MInf, "-inf", APFloat::opOK, APFloat::fcInfinity },
2338 { PSmallestNormalized, PZero, "0x0p+0", APFloat::opOK, APFloat::fcZero },
2339 { PSmallestNormalized, MZero, "-0x0p+0", APFloat::opOK, APFloat::fcZero },
2340 { PSmallestNormalized, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },
2343 { PSmallestNormalized, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2345 { PSmallestNormalized, PNormalValue, "0x1p-126", APFloat::opOK, APFloat::fcNormal },
2346 { PSmallestNormalized, MNormalValue, "-0x1p-126", APFloat::opOK, APFloat::fcNormal },
2347 { PSmallestNormalized, PLargestValue, "0x1.fffffep+1", APFloat::opOK, APFloat::fcNormal },
2348 { PSmallestNormalized, MLargestValue, "-0x1.fffffep+1", APFloat::opOK, APFloat::fcNormal },
2349 { PSmallestNormalized, PSmallestValue, "0x0p+0", UnderflowStatus, APFloat::fcZero },
2350 { PSmallestNormalized, MSmallestValue, "-0x0p+0", UnderflowStatus, APFloat::fcZero },
2351 { PSmallestNormalized, PSmallestNormalized, "0x0p+0", UnderflowStatus, APFloat::fcZero },
2352 { PSmallestNormalized, MSmallestNormalized, "-0x0p+0", UnderflowStatus, APFloat::fcZero },
2353 { MSmallestNormalized, PInf, "-inf", APFloat::opOK, APFloat::fcInfinity },
2354 { MSmallestNormalized, MInf, "inf", APFloat::opOK, APFloat::fcInfinity },
2355 { MSmallestNormalized, PZero, "-0x0p+0", APFloat::opOK, APFloat::fcZero },
2356 { MSmallestNormalized, MZero, "0x0p+0", APFloat::opOK, APFloat::fcZero },
2357 { MSmallestNormalized, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },
2360 { MSmallestNormalized, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2362 { MSmallestNormalized, PNormalValue, "-0x1p-126", APFloat::opOK, APFloat::fcNormal },
2363 { MSmallestNormalized, MNormalValue, "0x1p-126", APFloat::opOK, APFloat::fcNormal },
2364 { MSmallestNormalized, PLargestValue, "-0x1.fffffep+1", APFloat::opOK, APFloat::fcNormal },
2365 { MSmallestNormalized, MLargestValue, "0x1.fffffep+1", APFloat::opOK, APFloat::fcNormal },
2366 { MSmallestNormalized, PSmallestValue, "-0x0p+0", UnderflowStatus, APFloat::fcZero },
2367 { MSmallestNormalized, MSmallestValue, "0x0p+0", UnderflowStatus, APFloat::fcZero },
2368 { MSmallestNormalized, PSmallestNormalized, "-0x0p+0", UnderflowStatus, APFloat::fcZero },
2369 { MSmallestNormalized, MSmallestNormalized, "0x0p+0", UnderflowStatus, APFloat::fcZero }
2373 APFloat x(SpecialCaseTests[i].x);
2374 APFloat y(SpecialCaseTests[i].y);
2375 APFloat::opStatus status = x.multiply(y, APFloat::rmNearestTiesToEven);
2377 APFloat result(APFloat::IEEEsingle, SpecialCaseTests[i].result);
2393 APFloat PInf = APFloat::getInf(APFloat::IEEEsingle, false);
2394 APFloat MInf = APFloat::getInf(APFloat::IEEEsingle, true);
2395 APFloat PZero = APFloat::getZero(APFloat::IEEEsingle, false);
2396 APFloat MZero = APFloat::getZero(APFloat::IEEEsingle, true);
2397 APFloat QNaN = APFloat::getNaN(APFloat::IEEEsingle, false);
2398 APFloat SNaN = APFloat::getSNaN(APFloat::IEEEsingle, false);
2399 APFloat PNormalValue = APFloat(APFloat::IEEEsingle, "0x1p+0");
2400 APFloat MNormalValue = APFloat(APFloat::IEEEsingle, "-0x1p+0");
2401 APFloat PLargestValue = APFloat::getLargest(APFloat::IEEEsingle, false);
2402 APFloat MLargestValue = APFloat::getLargest(APFloat::IEEEsingle, true);
2403 APFloat PSmallestValue = APFloat::getSmallest(APFloat::IEEEsingle, false);
2404 APFloat MSmallestValue = APFloat::getSmallest(APFloat::IEEEsingle, true);
2405 APFloat PSmallestNormalized =
2406 APFloat::getSmallestNormalized(APFloat::IEEEsingle, false);
2407 APFloat MSmallestNormalized =
2408 APFloat::getSmallestNormalized(APFloat::IEEEsingle, true);
2410 const int OverflowStatus = APFloat::opOverflow | APFloat::opInexact;
2411 const int UnderflowStatus = APFloat::opUnderflow | APFloat::opInexact;
2415 APFloat x;
2416 APFloat y;
2421 { PInf, PInf, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2422 { PInf, MInf, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2423 { PInf, PZero, "inf", APFloat::opOK, APFloat::fcInfinity },
2424 { PInf, MZero, "-inf", APFloat::opOK, APFloat::fcInfinity },
2425 { PInf, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },
2428 { PInf, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2430 { PInf, PNormalValue, "inf", APFloat::opOK, APFloat::fcInfinity },
2431 { PInf, MNormalValue, "-inf", APFloat::opOK, APFloat::fcInfinity },
2432 { PInf, PLargestValue, "inf", APFloat::opOK, APFloat::fcInfinity },
2433 { PInf, MLargestValue, "-inf", APFloat::opOK, APFloat::fcInfinity },
2434 { PInf, PSmallestValue, "inf", APFloat::opOK, APFloat::fcInfinity },
2435 { PInf, MSmallestValue, "-inf", APFloat::opOK, APFloat::fcInfinity },
2436 { PInf, PSmallestNormalized, "inf", APFloat::opOK, APFloat::fcInfinity },
2437 { PInf, MSmallestNormalized, "-inf", APFloat::opOK, APFloat::fcInfinity },
2438 { MInf, PInf, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2439 { MInf, MInf, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2440 { MInf, PZero, "-inf", APFloat::opOK, APFloat::fcInfinity },
2441 { MInf, MZero, "inf", APFloat::opOK, APFloat::fcInfinity },
2442 { MInf, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },
2445 { MInf, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2447 { MInf, PNormalValue, "-inf", APFloat::opOK, APFloat::fcInfinity },
2448 { MInf, MNormalValue, "inf", APFloat::opOK, APFloat::fcInfinity },
2449 { MInf, PLargestValue, "-inf", APFloat::opOK, APFloat::fcInfinity },
2450 { MInf, MLargestValue, "inf", APFloat::opOK, APFloat::fcInfinity },
2451 { MInf, PSmallestValue, "-inf", APFloat::opOK, APFloat::fcInfinity },
2452 { MInf, MSmallestValue, "inf", APFloat::opOK, APFloat::fcInfinity },
2453 { MInf, PSmallestNormalized, "-inf", APFloat::opOK, APFloat::fcInfinity },
2454 { MInf, MSmallestNormalized, "inf", APFloat::opOK, APFloat::fcInfinity },
2455 { PZero, PInf, "0x0p+0", APFloat::opOK, APFloat::fcZero },
2456 { PZero, MInf, "-0x0p+0", APFloat::opOK, APFloat::fcZero },
2457 { PZero, PZero, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2458 { PZero, MZero, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2459 { PZero, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },
2462 { PZero, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2464 { PZero, PNormalValue, "0x0p+0", APFloat::opOK, APFloat::fcZero },
2465 { PZero, MNormalValue, "-0x0p+0", APFloat::opOK, APFloat::fcZero },
2466 { PZero, PLargestValue, "0x0p+0", APFloat::opOK, APFloat::fcZero },
2467 { PZero, MLargestValue, "-0x0p+0", APFloat::opOK, APFloat::fcZero },
2468 { PZero, PSmallestValue, "0x0p+0", APFloat::opOK, APFloat::fcZero },
2469 { PZero, MSmallestValue, "-0x0p+0", APFloat::opOK, APFloat::fcZero },
2470 { PZero, PSmallestNormalized, "0x0p+0", APFloat::opOK, APFloat::fcZero },
2471 { PZero, MSmallestNormalized, "-0x0p+0", APFloat::opOK, APFloat::fcZero },
2472 { MZero, PInf, "-0x0p+0", APFloat::opOK, APFloat::fcZero },
2473 { MZero, MInf, "0x0p+0", APFloat::opOK, APFloat::fcZero },
2474 { MZero, PZero, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2475 { MZero, MZero, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2476 { MZero, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },
2479 { MZero, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2481 { MZero, PNormalValue, "-0x0p+0", APFloat::opOK, APFloat::fcZero },
2482 { MZero, MNormalValue, "0x0p+0", APFloat::opOK, APFloat::fcZero },
2483 { MZero, PLargestValue, "-0x0p+0", APFloat::opOK, APFloat::fcZero },
2484 { MZero, MLargestValue, "0x0p+0", APFloat::opOK, APFloat::fcZero },
2485 { MZero, PSmallestValue, "-0x0p+0", APFloat::opOK, APFloat::fcZero },
2486 { MZero, MSmallestValue, "0x0p+0", APFloat::opOK, APFloat::fcZero },
2487 { MZero, PSmallestNormalized, "-0x0p+0", APFloat::opOK, APFloat::fcZero },
2488 { MZero, MSmallestNormalized, "0x0p+0", APFloat::opOK, APFloat::fcZero },
2489 { QNaN, PInf, "nan", APFloat::opOK, APFloat::fcNaN },
2490 { QNaN, MInf, "nan", APFloat::opOK, APFloat::fcNaN },
2491 { QNaN, PZero, "nan", APFloat::opOK, APFloat::fcNaN },
2492 { QNaN, MZero, "nan", APFloat::opOK, APFloat::fcNaN },
2493 { QNaN, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },
2496 { QNaN, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2498 { QNaN, PNormalValue, "nan", APFloat::opOK, APFloat::fcNaN },
2499 { QNaN, MNormalValue, "nan", APFloat::opOK, APFloat::fcNaN },
2500 { QNaN, PLargestValue, "nan", APFloat::opOK, APFloat::fcNaN },
2501 { QNaN, MLargestValue, "nan", APFloat::opOK, APFloat::fcNaN },
2502 { QNaN, PSmallestValue, "nan", APFloat::opOK, APFloat::fcNaN },
2503 { QNaN, MSmallestValue, "nan", APFloat::opOK, APFloat::fcNaN },
2504 { QNaN, PSmallestNormalized, "nan", APFloat::opOK, APFloat::fcNaN },
2505 { QNaN, MSmallestNormalized, "nan", APFloat::opOK, APFloat::fcNaN },
2508 { SNaN, PInf, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2509 { SNaN, MInf, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2510 { SNaN, PZero, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2511 { SNaN, MZero, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2512 { SNaN, QNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2513 { SNaN, SNaN, "nan", APFloat::opInvalidOp, APFloat
2514 { SNaN, PNormalValue, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2515 { SNaN, MNormalValue, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2516 { SNaN, PLargestValue, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2517 { SNaN, MLargestValue, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2518 { SNaN, PSmallestValue, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2519 { SNaN, MSmallestValue, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2520 { SNaN, PSmallestNormalized, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2521 { SNaN, MSmallestNormalized, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2523 { PNormalValue, PInf, "0x0p+0", APFloat::opOK, APFloat::fcZero },
2524 { PNormalValue, MInf, "-0x0p+0", APFloat::opOK, APFloat::fcZero },
2525 { PNormalValue, PZero, "inf", APFloat::opDivByZero, APFloat::fcInfinity },
2526 { PNormalValue, MZero, "-inf", APFloat::opDivByZero, APFloat::fcInfinity },
2527 { PNormalValue, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },
2530 { PNormalValue, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2532 { PNormalValue, PNormalValue, "0x1p+0", APFloat::opOK, APFloat::fcNormal },
2533 { PNormalValue, MNormalValue, "-0x1p+0", APFloat::opOK, APFloat::fcNormal },
2534 { PNormalValue, PLargestValue, "0x1p-128", UnderflowStatus, APFloat::fcNormal },
2535 { PNormalValue, MLargestValue, "-0x1p-128", UnderflowStatus, APFloat::fcNormal },
2536 { PNormalValue, PSmallestValue, "inf", OverflowStatus, APFloat::fcInfinity },
2537 { PNormalValue, MSmallestValue, "-inf", OverflowStatus, APFloat::fcInfinity },
2538 { PNormalValue, PSmallestNormalized, "0x1p+126", APFloat::opOK, APFloat::fcNormal },
2539 { PNormalValue, MSmallestNormalized, "-0x1p+126", APFloat::opOK, APFloat::fcNormal },
2540 { MNormalValue, PInf, "-0x0p+0", APFloat::opOK, APFloat::fcZero },
2541 { MNormalValue, MInf, "0x0p+0", APFloat::opOK, APFloat::fcZero },
2542 { MNormalValue, PZero, "-inf", APFloat::opDivByZero, APFloat::fcInfinity },
2543 { MNormalValue, MZero, "inf", APFloat::opDivByZero, APFloat::fcInfinity },
2544 { MNormalValue, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },
2547 { MNormalValue, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2549 { MNormalValue, PNormalValue, "-0x1p+0", APFloat::opOK, APFloat::fcNormal },
2550 { MNormalValue, MNormalValue, "0x1p+0", APFloat::opOK, APFloat::fcNormal },
2551 { MNormalValue, PLargestValue, "-0x1p-128", UnderflowStatus, APFloat::fcNormal },
2552 { MNormalValue, MLargestValue, "0x1p-128", UnderflowStatus, APFloat::fcNormal },
2553 { MNormalValue, PSmallestValue, "-inf", OverflowStatus, APFloat::fcInfinity },
2554 { MNormalValue, MSmallestValue, "inf", OverflowStatus, APFloat::fcInfinity },
2555 { MNormalValue, PSmallestNormalized, "-0x1p+126", APFloat::opOK, APFloat::fcNormal },
2556 { MNormalValue, MSmallestNormalized, "0x1p+126", APFloat::opOK, APFloat::fcNormal },
2557 { PLargestValue, PInf, "0x0p+0", APFloat::opOK, APFloat::fcZero },
2558 { PLargestValue, MInf, "-0x0p+0", APFloat::opOK, APFloat::fcZero },
2559 { PLargestValue, PZero, "inf", APFloat::opDivByZero, APFloat::fcInfinity },
2560 { PLargestValue, MZero, "-inf", APFloat::opDivByZero, APFloat::fcInfinity },
2561 { PLargestValue, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },
2564 { PLargestValue, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2566 { PLargestValue, PNormalValue, "0x1.fffffep+127", APFloat::opOK, APFloat::fcNormal },
2567 { PLargestValue, MNormalValue, "-0x1.fffffep+127", APFloat::opOK, APFloat::fcNormal },
2568 { PLargestValue, PLargestValue, "0x1p+0", APFloat::opOK, APFloat::fcNormal },
2569 { PLargestValue, MLargestValue, "-0x1p+0", APFloat::opOK, APFloat::fcNormal },
2570 { PLargestValue, PSmallestValue, "inf", OverflowStatus, APFloat::fcInfinity },
2571 { PLargestValue, MSmallestValue, "-inf", OverflowStatus, APFloat::fcInfinity },
2572 { PLargestValue, PSmallestNormalized, "inf", OverflowStatus, APFloat::fcInfinity },
2573 { PLargestValue, MSmallestNormalized, "-inf", OverflowStatus, APFloat::fcInfinity },
2574 { MLargestValue, PInf, "-0x0p+0", APFloat::opOK, APFloat::fcZero },
2575 { MLargestValue, MInf, "0x0p+0", APFloat::opOK, APFloat::fcZero },
2576 { MLargestValue, PZero, "-inf", APFloat::opDivByZero, APFloat::fcInfinity },
2577 { MLargestValue, MZero, "inf", APFloat::opDivByZero, APFloat::fcInfinity },
2578 { MLargestValue, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },
2581 { MLargestValue, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2583 { MLargestValue, PNormalValue, "-0x1.fffffep+127", APFloat::opOK, APFloat::fcNormal },
2584 { MLargestValue, MNormalValue, "0x1.fffffep+127", APFloat::opOK, APFloat::fcNormal },
2585 { MLargestValue, PLargestValue, "-0x1p+0", APFloat::opOK, APFloat::fcNormal },
2586 { MLargestValue, MLargestValue, "0x1p+0", APFloat::opOK, APFloat::fcNormal },
2587 { MLargestValue, PSmallestValue, "-inf", OverflowStatus, APFloat::fcInfinity },
2588 { MLargestValue, MSmallestValue, "inf", OverflowStatus, APFloat::fcInfinity },
2589 { MLargestValue, PSmallestNormalized, "-inf", OverflowStatus, APFloat::fcInfinity },
2590 { MLargestValue, MSmallestNormalized, "inf", OverflowStatus, APFloat::fcInfinity },
2591 { PSmallestValue, PInf, "0x0p+0", APFloat::opOK, APFloat::fcZero },
2592 { PSmallestValue, MInf, "-0x0p+0", APFloat::opOK, APFloat::fcZero },
2593 { PSmallestValue, PZero, "inf", APFloat::opDivByZero, APFloat::fcInfinity },
2594 { PSmallestValue, MZero, "-inf", APFloat::opDivByZero, APFloat::fcInfinity },
2595 { PSmallestValue, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },
2598 { PSmallestValue, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2600 { PSmallestValue, PNormalValue, "0x1p-149", APFloat::opOK, APFloat::fcNormal },
2601 { PSmallestValue, MNormalValue, "-0x1p-149", APFloat::opOK, APFloat::fcNormal },
2602 { PSmallestValue, PLargestValue, "0x0p+0", UnderflowStatus, APFloat::fcZero },
2603 { PSmallestValue, MLargestValue, "-0x0p+0", UnderflowStatus, APFloat::fcZero },
2604 { PSmallestValue, PSmallestValue, "0x1p+0", APFloat::opOK, APFloat::fcNormal },
2605 { PSmallestValue, MSmallestValue, "-0x1p+0", APFloat::opOK, APFloat::fcNormal },
2606 { PSmallestValue, PSmallestNormalized, "0x1p-23", APFloat::opOK, APFloat::fcNormal },
2607 { PSmallestValue, MSmallestNormalized, "-0x1p-23", APFloat::opOK, APFloat::fcNormal },
2608 { MSmallestValue, PInf, "-0x0p+0", APFloat::opOK, APFloat::fcZero },
2609 { MSmallestValue, MInf, "0x0p+0", APFloat::opOK, APFloat::fcZero },
2610 { MSmallestValue, PZero, "-inf", APFloat::opDivByZero, APFloat::fcInfinity },
2611 { MSmallestValue, MZero, "inf", APFloat::opDivByZero, APFloat::fcInfinity },
2612 { MSmallestValue, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },
2615 { MSmallestValue, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2617 { MSmallestValue, PNormalValue, "-0x1p-149", APFloat::opOK, APFloat::fcNormal },
2618 { MSmallestValue, MNormalValue, "0x1p-149", APFloat::opOK, APFloat::fcNormal },
2619 { MSmallestValue, PLargestValue, "-0x0p+0", UnderflowStatus, APFloat::fcZero },
2620 { MSmallestValue, MLargestValue, "0x0p+0", UnderflowStatus, APFloat::fcZero },
2621 { MSmallestValue, PSmallestValue, "-0x1p+0", APFloat::opOK, APFloat::fcNormal },
2622 { MSmallestValue, MSmallestValue, "0x1p+0", APFloat::opOK, APFloat::fcNormal },
2623 { MSmallestValue, PSmallestNormalized, "-0x1p-23", APFloat::opOK, APFloat::fcNormal },
2624 { MSmallestValue, MSmallestNormalized, "0x1p-23", APFloat::opOK, APFloat::fcNormal },
2625 { PSmallestNormalized, PInf, "0x0p+0", APFloat::opOK, APFloat::fcZero },
2626 { PSmallestNormalized, MInf, "-0x0p+0", APFloat::opOK, APFloat::fcZero },
2627 { PSmallestNormalized, PZero, "inf", APFloat::opDivByZero, APFloat::fcInfinity },
2628 { PSmallestNormalized, MZero, "-inf", APFloat::opDivByZero, APFloat::fcInfinity },
2629 { PSmallestNormalized, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },
2632 { PSmallestNormalized, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2634 { PSmallestNormalized, PNormalValue, "0x1p-126", APFloat::opOK, APFloat::fcNormal },
2635 { PSmallestNormalized, MNormalValue, "-0x1p-126", APFloat::opOK, APFloat::fcNormal },
2636 { PSmallestNormalized, PLargestValue, "0x0p+0", UnderflowStatus, APFloat::fcZero },
2637 { PSmallestNormalized, MLargestValue, "-0x0p+0", UnderflowStatus, APFloat::fcZero },
2638 { PSmallestNormalized, PSmallestValue, "0x1p+23", APFloat::opOK, APFloat::fcNormal },
2639 { PSmallestNormalized, MSmallestValue, "-0x1p+23", APFloat::opOK, APFloat::fcNormal },
2640 { PSmallestNormalized, PSmallestNormalized, "0x1p+0", APFloat::opOK, APFloat::fcNormal },
2641 { PSmallestNormalized, MSmallestNormalized, "-0x1p+0", APFloat::opOK, APFloat::fcNormal },
2642 { MSmallestNormalized, PInf, "-0x0p+0", APFloat::opOK, APFloat::fcZero },
2643 { MSmallestNormalized, MInf, "0x0p+0", APFloat::opOK, APFloat::fcZero },
2644 { MSmallestNormalized, PZero, "-inf", APFloat::opDivByZero, APFloat::fcInfinity },
2645 { MSmallestNormalized, MZero, "inf", APFloat::opDivByZero, APFloat::fcInfinity },
2646 { MSmallestNormalized, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },
2649 { MSmallestNormalized, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },
2651 { MSmallestNormalized, PNormalValue, "-0x1p-126", APFloat::opOK, APFloat::fcNormal },
2652 { MSmallestNormalized, MNormalValue, "0x1p-126", APFloat::opOK, APFloat::fcNormal },
2653 { MSmallestNormalized, PLargestValue, "-0x0p+0", UnderflowStatus, APFloat::fcZero },
2654 { MSmallestNormalized, MLargestValue, "0x0p+0", UnderflowStatus, APFloat::fcZero },
2655 { MSmallestNormalized, PSmallestValue, "-0x1p+23", APFloat::opOK, APFloat::fcNormal },
2656 { MSmallestNormalized, MSmallestValue, "0x1p+23", APFloat::opOK, APFloat::fcNormal },
2657 { MSmallestNormalized, PSmallestNormalized, "-0x1p+0", APFloat::opOK, APFloat::fcNormal },
2658 { MSmallestNormalized, MSmallestNormalized, "0x1p+0", APFloat::opOK, APFloat::fcNormal },
2662 APFloat x(SpecialCaseTests[i].x);
2663 APFloat y(SpecialCaseTests[i].y);
2664 APFloat::opStatus status = x.divide(y, APFloat::rmNearestTiesToEven);
2666 APFloat result(APFloat::IEEEsingle, SpecialCaseTests[i].result);