<html><head><meta http-equiv="Content-Type" content="text/html charset=iso-8859-1"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">You are right. I actually meant to remove that printf before commit (it was for debugging). = /<br><div><div>On Jun 26, 2013, at 1:00 AM, Patrik Hägglund H <<a href="mailto:patrik.h.hagglund@ericsson.com">patrik.h.hagglund@ericsson.com</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div style="letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;">Note that the conversion specifier %a is a C++11 (C99) feature. I get the following warning (and I always use -Werror) when compiling with gcc:<br><br>/var/tmp/hudson/workspace/llvm-master/unittests/ADT/APFloatTest.cpp: In member function 'virtual void {anonymous}::APFloatTest_add_Test::TestBody()':<br>/var/tmp/hudson/workspace/llvm-master/unittests/ADT/APFloatTest.cpp:1783:55: error: ISO C++ does not support the '%a' gnu_printf format [-Werror=format]<br>/var/tmp/hudson/workspace/llvm-master/unittests/ADT/APFloatTest.cpp:1783:55: error: ISO C++ does not support the '%a' gnu_printf format [-Werror=format]<br>/var/tmp/hudson/workspace/llvm-master/unittests/ADT/APFloatTest.cpp:1783:55: error: ISO C++ does not support the '%a' gnu_printf format [-Werror=format]<br>/var/tmp/hudson/workspace/llvm-master/unittests/ADT/APFloatTest.cpp:1783:55: error: ISO C++ does not support the '%a' gnu_printf format [-Werror=format]<br><br>/Patrik Hägglund<br><br>-----Original Message-----<br>From:<span class="Apple-converted-space"> </span><a href="mailto:llvm-commits-bounces@cs.uiuc.edu">llvm-commits-bounces@cs.uiuc.edu</a><span class="Apple-converted-space"> </span>[<a href="mailto:llvm-commits-bounces@cs.uiuc.edu">mailto:llvm-commits-bounces@cs.uiuc.edu</a>] On Behalf Of Michael Gottesman<br>Sent: den 24 juni 2013 11:58<br>To:<span class="Apple-converted-space"> </span><a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>Subject: [llvm] r184714 - [APFloat] Added a large unittest for APFloat.add that checks that special values are computed correctly.<br><br>Author: mgottesman<br>Date: Mon Jun 24 04:58:07 2013<br>New Revision: 184714<br><br>URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project?rev=184714&view=rev">http://llvm.org/viewvc/llvm-project?rev=184714&view=rev</a><br>Log:<br>[APFloat] Added a large unittest for APFloat.add that checks that special values are computed correctly.<br><br>Modified:<br>   llvm/trunk/unittests/ADT/APFloatTest.cpp<br><br>Modified: llvm/trunk/unittests/ADT/APFloatTest.cpp<br>URL:<span class="Apple-converted-space"> </span><a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ADT/APFloatTest.cpp?rev=184714&r1=184713&r2=184714&view=diff">http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/ADT/APFloatTest.cpp?rev=184714&r1=184713&r2=184714&view=diff</a><br>==============================================================================<br>--- llvm/trunk/unittests/ADT/APFloatTest.cpp (original)<br>+++ llvm/trunk/unittests/ADT/APFloatTest.cpp Mon Jun 24 04:58:07 2013<br>@@ -1486,4 +1486,306 @@ TEST(APFloatTest, isFiniteNonZero) {<br>  EXPECT_FALSE(APFloat::getSNaN(APFloat::IEEEsingle, true).isFiniteNonZero());<span class="Apple-converted-space"> </span><br>}<br><br>+TEST(APFloatTest, add) {<br>+  // Test Special Cases against each other and normal values.<br>+<br>+  // TODOS/NOTES:<br>+  // 1. Since we perform only default exception handling all operations with<br>+  // signaling NaNs should have a result that is a quiet NaN. Currently they<br>+  // return sNaN.<br>+  // 2. It seems that add(-x, NaN) = -NaN but add(NaN, -x) = NaN. This is an<br>+  // inconsistency that should be looked into. IEEE-754R specifies that the<br>+  // interpretation of the sign of NaN is unspecified. We should always have NaN<br>+  // be positive since that is one less thing for the compiler to deal with.<br>+<br>+  APFloat PInf = APFloat::getInf(APFloat::IEEEsingle, false);<br>+  APFloat MInf = APFloat::getInf(APFloat::IEEEsingle, true);<br>+  APFloat PZero = APFloat::getZero(APFloat::IEEEsingle, false);<br>+  APFloat MZero = APFloat::getZero(APFloat::IEEEsingle, true);<br>+  APFloat QNaN = APFloat::getNaN(APFloat::IEEEsingle, false);<br>+  APFloat SNaN = APFloat::getSNaN(APFloat::IEEEsingle, false);<br>+  APFloat PNormalValue = APFloat(APFloat::IEEEsingle, "0x1p+0");<br>+  APFloat MNormalValue = APFloat(APFloat::IEEEsingle, "-0x1p+0");<br>+  APFloat PLargestValue = APFloat::getLargest(APFloat::IEEEsingle, false);<br>+  APFloat MLargestValue = APFloat::getLargest(APFloat::IEEEsingle, true);<br>+  APFloat PSmallestValue = APFloat::getSmallest(APFloat::IEEEsingle, false);<br>+  APFloat MSmallestValue = APFloat::getSmallest(APFloat::IEEEsingle, true);<br>+  APFloat PSmallestNormalized =<br>+    APFloat::getSmallestNormalized(APFloat::IEEEsingle, false);<br>+  APFloat MSmallestNormalized =<br>+    APFloat::getSmallestNormalized(APFloat::IEEEsingle, true);<br>+<br>+  const int OverflowStatus = APFloat::opOverflow | APFloat::opInexact;<br>+<br>+  const unsigned NumTests = 169;<br>+  struct {<br>+    APFloat x;<br>+    APFloat y;<br>+    const char *result;<br>+    int status;<br>+    int category;<br>+  } SpecialCaseTests[NumTests] = {<br>+    { PInf, PInf, "inf", APFloat::opOK, APFloat::fcInfinity },<br>+    { PInf, MInf, "nan", APFloat::opInvalidOp, APFloat::fcNaN },<br>+    { PInf, PZero, "inf", APFloat::opOK, APFloat::fcInfinity },<br>+    { PInf, MZero, "inf", APFloat::opOK, APFloat::fcInfinity },<br>+    { PInf, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },<br>+#if 0<br>+    // See Note 1.<br>+    { PInf, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },<br>+#endif<br>+    { PInf, PNormalValue, "inf", APFloat::opOK, APFloat::fcInfinity },<br>+    { PInf, MNormalValue, "inf", APFloat::opOK, APFloat::fcInfinity },<br>+    { PInf, PLargestValue, "inf", APFloat::opOK, APFloat::fcInfinity },<br>+    { PInf, MLargestValue, "inf", APFloat::opOK, APFloat::fcInfinity },<br>+    { PInf, PSmallestValue, "inf", APFloat::opOK, APFloat::fcInfinity },<br>+    { PInf, MSmallestValue, "inf", APFloat::opOK, APFloat::fcInfinity },<br>+    { PInf, PSmallestNormalized, "inf", APFloat::opOK, APFloat::fcInfinity },<br>+    { PInf, MSmallestNormalized, "inf", APFloat::opOK, APFloat::fcInfinity },<br>+    { MInf, PInf, "nan", APFloat::opInvalidOp, APFloat::fcNaN },<br>+    { MInf, MInf, "-inf", APFloat::opOK, APFloat::fcInfinity },<br>+    { MInf, PZero, "-inf", APFloat::opOK, APFloat::fcInfinity },<br>+    { MInf, MZero, "-inf", APFloat::opOK, APFloat::fcInfinity },<br>+    // See Note 2.<br>+    { MInf, QNaN, "-nan", APFloat::opOK, APFloat::fcNaN },<br>+#if 0<br>+    // See Note 1.<br>+    { MInf, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },<br>+#endif<br>+    { MInf, PNormalValue, "-inf", APFloat::opOK, APFloat::fcInfinity },<br>+    { MInf, MNormalValue, "-inf", APFloat::opOK, APFloat::fcInfinity },<br>+    { MInf, PLargestValue, "-inf", APFloat::opOK, APFloat::fcInfinity },<br>+    { MInf, MLargestValue, "-inf", APFloat::opOK, APFloat::fcInfinity },<br>+    { MInf, PSmallestValue, "-inf", APFloat::opOK, APFloat::fcInfinity },<br>+    { MInf, MSmallestValue, "-inf", APFloat::opOK, APFloat::fcInfinity },<br>+    { MInf, PSmallestNormalized, "-inf", APFloat::opOK, APFloat::fcInfinity },<br>+    { MInf, MSmallestNormalized, "-inf", APFloat::opOK, APFloat::fcInfinity },<br>+    { PZero, PInf, "inf", APFloat::opOK, APFloat::fcInfinity },<br>+    { PZero, MInf, "-inf", APFloat::opOK, APFloat::fcInfinity },<br>+    { PZero, PZero, "0x0p+0", APFloat::opOK, APFloat::fcZero },<br>+    { PZero, MZero, "0x0p+0", APFloat::opOK, APFloat::fcZero },<br>+    { PZero, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },<br>+#if 0<br>+    // See Note 1.<br>+    { PZero, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },<br>+#endif<br>+    { PZero, PNormalValue, "0x1p+0", APFloat::opOK, APFloat::fcNormal },<br>+    { PZero, MNormalValue, "-0x1p+0", APFloat::opOK, APFloat::fcNormal },<br>+    { PZero, PLargestValue, "0x1.fffffep+127", APFloat::opOK, APFloat::fcNormal },<br>+    { PZero, MLargestValue, "-0x1.fffffep+127", APFloat::opOK, APFloat::fcNormal },<br>+    { PZero, PSmallestValue, "0x1p-149", APFloat::opOK, APFloat::fcNormal },<br>+    { PZero, MSmallestValue, "-0x1p-149", APFloat::opOK, APFloat::fcNormal },<br>+    { PZero, PSmallestNormalized, "0x1p-126", APFloat::opOK, APFloat::fcNormal },<br>+    { PZero, MSmallestNormalized, "-0x1p-126", APFloat::opOK, APFloat::fcNormal },<br>+    { MZero, PInf, "inf", APFloat::opOK, APFloat::fcInfinity },<br>+    { MZero, MInf, "-inf", APFloat::opOK, APFloat::fcInfinity },<br>+    { MZero, PZero, "0x0p+0", APFloat::opOK, APFloat::fcZero },<br>+    { MZero, MZero, "-0x0p+0", APFloat::opOK, APFloat::fcZero },<br>+    // See Note 2.<br>+    { MZero, QNaN, "-nan", APFloat::opOK, APFloat::fcNaN },<br>+#if 0<br>+    // See Note 1.<br>+    { MZero, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },<br>+#endif<br>+    { MZero, PNormalValue, "0x1p+0", APFloat::opOK, APFloat::fcNormal },<br>+    { MZero, MNormalValue, "-0x1p+0", APFloat::opOK, APFloat::fcNormal },<br>+    { MZero, PLargestValue, "0x1.fffffep+127", APFloat::opOK, APFloat::fcNormal },<br>+    { MZero, MLargestValue, "-0x1.fffffep+127", APFloat::opOK, APFloat::fcNormal },<br>+    { MZero, PSmallestValue, "0x1p-149", APFloat::opOK, APFloat::fcNormal },<br>+    { MZero, MSmallestValue, "-0x1p-149", APFloat::opOK, APFloat::fcNormal },<br>+    { MZero, PSmallestNormalized, "0x1p-126", APFloat::opOK, APFloat::fcNormal },<br>+    { MZero, MSmallestNormalized, "-0x1p-126", APFloat::opOK, APFloat::fcNormal },<br>+    { QNaN, PInf, "nan", APFloat::opOK, APFloat::fcNaN },<br>+    { QNaN, MInf, "nan", APFloat::opOK, APFloat::fcNaN },<br>+    { QNaN, PZero, "nan", APFloat::opOK, APFloat::fcNaN },<br>+    { QNaN, MZero, "nan", APFloat::opOK, APFloat::fcNaN },<br>+    { QNaN, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },<br>+#if 0<br>+    // See Note 1.<br>+    { QNaN, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },<br>+#endif<br>+    { QNaN, PNormalValue, "nan", APFloat::opOK, APFloat::fcNaN },<br>+    { QNaN, MNormalValue, "nan", APFloat::opOK, APFloat::fcNaN },<br>+    { QNaN, PLargestValue, "nan", APFloat::opOK, APFloat::fcNaN },<br>+    { QNaN, MLargestValue, "nan", APFloat::opOK, APFloat::fcNaN },<br>+    { QNaN, PSmallestValue, "nan", APFloat::opOK, APFloat::fcNaN },<br>+    { QNaN, MSmallestValue, "nan", APFloat::opOK, APFloat::fcNaN },<br>+    { QNaN, PSmallestNormalized, "nan", APFloat::opOK, APFloat::fcNaN },<br>+    { QNaN, MSmallestNormalized, "nan", APFloat::opOK, APFloat::fcNaN },<br>+#if 0<br>+    // See Note 1.<br>+    { SNaN, PInf, "nan", APFloat::opInvalidOp, APFloat::fcNaN },<br>+    { SNaN, MInf, "nan", APFloat::opInvalidOp, APFloat::fcNaN },<br>+    { SNaN, PZero, "nan", APFloat::opInvalidOp, APFloat::fcNaN },<br>+    { SNaN, MZero, "nan", APFloat::opInvalidOp, APFloat::fcNaN },<br>+    { SNaN, QNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },<br>+    { SNaN, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },<br>+    { SNaN, PNormalValue, "nan", APFloat::opInvalidOp, APFloat::fcNaN },<br>+    { SNaN, MNormalValue, "nan", APFloat::opInvalidOp, APFloat::fcNaN },<br>+    { SNaN, PLargestValue, "nan", APFloat::opInvalidOp, APFloat::fcNaN },<br>+    { SNaN, MLargestValue, "nan", APFloat::opInvalidOp, APFloat::fcNaN },<br>+    { SNaN, PSmallestValue, "nan", APFloat::opInvalidOp, APFloat::fcNaN },<br>+    { SNaN, MSmallestValue, "nan", APFloat::opInvalidOp, APFloat::fcNaN },<br>+    { SNaN, PSmallestNormalized, "nan", APFloat::opInvalidOp, APFloat::fcNaN },<br>+    { SNaN, MSmallestNormalized, "nan", APFloat::opInvalidOp, APFloat::fcNaN },<br>+#endif<br>+    { PNormalValue, PInf, "inf", APFloat::opOK, APFloat::fcInfinity },<br>+    { PNormalValue, MInf, "-inf", APFloat::opOK, APFloat::fcInfinity },<br>+    { PNormalValue, PZero, "0x1p+0", APFloat::opOK, APFloat::fcNormal },<br>+    { PNormalValue, MZero, "0x1p+0", APFloat::opOK, APFloat::fcNormal },<br>+    { PNormalValue, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },<br>+#if 0<br>+    // See Note 1.<br>+    { PNormalValue, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },<br>+#endif<br>+    { PNormalValue, PNormalValue, "0x1p+1", APFloat::opOK, APFloat::fcNormal },<br>+    { PNormalValue, MNormalValue, "0x0p+0", APFloat::opOK, APFloat::fcZero },<br>+    { PNormalValue, PLargestValue, "0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },<br>+    { PNormalValue, MLargestValue, "-0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },<br>+    { PNormalValue, PSmallestValue, "0x1p+0", APFloat::opInexact, APFloat::fcNormal },<br>+    { PNormalValue, MSmallestValue, "0x1p+0", APFloat::opInexact, APFloat::fcNormal },<br>+    { PNormalValue, PSmallestNormalized, "0x1p+0", APFloat::opInexact, APFloat::fcNormal },<br>+    { PNormalValue, MSmallestNormalized, "0x1p+0", APFloat::opInexact, APFloat::fcNormal },<br>+    { MNormalValue, PInf, "inf", APFloat::opOK, APFloat::fcInfinity },<br>+    { MNormalValue, MInf, "-inf", APFloat::opOK, APFloat::fcInfinity },<br>+    { MNormalValue, PZero, "-0x1p+0", APFloat::opOK, APFloat::fcNormal },<br>+    { MNormalValue, MZero, "-0x1p+0", APFloat::opOK, APFloat::fcNormal },<br>+    // See Note 2.<br>+    { MNormalValue, QNaN, "-nan", APFloat::opOK, APFloat::fcNaN },<br>+#if 0<br>+    // See Note 1.<br>+    { MNormalValue, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },<br>+#endif<br>+    { MNormalValue, PNormalValue, "0x0p+0", APFloat::opOK, APFloat::fcZero },<br>+    { MNormalValue, MNormalValue, "-0x1p+1", APFloat::opOK, APFloat::fcNormal },<br>+    { MNormalValue, PLargestValue, "0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },<br>+    { MNormalValue, MLargestValue, "-0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },<br>+    { MNormalValue, PSmallestValue, "-0x1p+0", APFloat::opInexact, APFloat::fcNormal },<br>+    { MNormalValue, MSmallestValue, "-0x1p+0", APFloat::opInexact, APFloat::fcNormal },<br>+    { MNormalValue, PSmallestNormalized, "-0x1p+0", APFloat::opInexact, APFloat::fcNormal },<br>+    { MNormalValue, MSmallestNormalized, "-0x1p+0", APFloat::opInexact, APFloat::fcNormal },<br>+    { PLargestValue, PInf, "inf", APFloat::opOK, APFloat::fcInfinity },<br>+    { PLargestValue, MInf, "-inf", APFloat::opOK, APFloat::fcInfinity },<br>+    { PLargestValue, PZero, "0x1.fffffep+127", APFloat::opOK, APFloat::fcNormal },<br>+    { PLargestValue, MZero, "0x1.fffffep+127", APFloat::opOK, APFloat::fcNormal },<br>+    { PLargestValue, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },<br>+#if 0<br>+    // See Note 1.<br>+    { PLargestValue, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },<br>+#endif<br>+    { PLargestValue, PNormalValue, "0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },<br>+    { PLargestValue, MNormalValue, "0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },<br>+    { PLargestValue, PLargestValue, "inf", OverflowStatus, APFloat::fcInfinity },<br>+    { PLargestValue, MLargestValue, "0x0p+0", APFloat::opOK, APFloat::fcZero },<br>+    { PLargestValue, PSmallestValue, "0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },<br>+    { PLargestValue, MSmallestValue, "0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },<br>+    { PLargestValue, PSmallestNormalized, "0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },<br>+    { PLargestValue, MSmallestNormalized, "0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },<br>+    { MLargestValue, PInf, "inf", APFloat::opOK, APFloat::fcInfinity },<br>+    { MLargestValue, MInf, "-inf", APFloat::opOK, APFloat::fcInfinity },<br>+    { MLargestValue, PZero, "-0x1.fffffep+127", APFloat::opOK, APFloat::fcNormal },<br>+    { MLargestValue, MZero, "-0x1.fffffep+127", APFloat::opOK, APFloat::fcNormal },<br>+    // See Note 2.<br>+    { MLargestValue, QNaN, "-nan", APFloat::opOK, APFloat::fcNaN },<br>+#if 0<br>+    // See Note 1.<br>+    { MLargestValue, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },<br>+#endif<br>+    { MLargestValue, PNormalValue, "-0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },<br>+    { MLargestValue, MNormalValue, "-0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },<br>+    { MLargestValue, PLargestValue, "0x0p+0", APFloat::opOK, APFloat::fcZero },<br>+    { MLargestValue, MLargestValue, "-inf", OverflowStatus, APFloat::fcInfinity },<br>+    { MLargestValue, PSmallestValue, "-0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },<br>+    { MLargestValue, MSmallestValue, "-0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },<br>+    { MLargestValue, PSmallestNormalized, "-0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },<br>+    { MLargestValue, MSmallestNormalized, "-0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },<br>+    { PSmallestValue, PInf, "inf", APFloat::opOK, APFloat::fcInfinity },<br>+    { PSmallestValue, MInf, "-inf", APFloat::opOK, APFloat::fcInfinity },<br>+    { PSmallestValue, PZero, "0x1p-149", APFloat::opOK, APFloat::fcNormal },<br>+    { PSmallestValue, MZero, "0x1p-149", APFloat::opOK, APFloat::fcNormal },<br>+    { PSmallestValue, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },<br>+#if 0<br>+    // See Note 1.<br>+    { PSmallestValue, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },<br>+#endif<br>+    { PSmallestValue, PNormalValue, "0x1p+0", APFloat::opInexact, APFloat::fcNormal },<br>+    { PSmallestValue, MNormalValue, "-0x1p+0", APFloat::opInexact, APFloat::fcNormal },<br>+    { PSmallestValue, PLargestValue, "0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },<br>+    { PSmallestValue, MLargestValue, "-0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },<br>+    { PSmallestValue, PSmallestValue, "0x1p-148", APFloat::opOK, APFloat::fcNormal },<br>+    { PSmallestValue, MSmallestValue, "0x0p+0", APFloat::opOK, APFloat::fcZero },<br>+    { PSmallestValue, PSmallestNormalized, "0x1.000002p-126", APFloat::opOK, APFloat::fcNormal },<br>+    { PSmallestValue, MSmallestNormalized, "-0x1.fffffcp-127", APFloat::opOK, APFloat::fcNormal },<br>+    { MSmallestValue, PInf, "inf", APFloat::opOK, APFloat::fcInfinity },<br>+    { MSmallestValue, MInf, "-inf", APFloat::opOK, APFloat::fcInfinity },<br>+    { MSmallestValue, PZero, "-0x1p-149", APFloat::opOK, APFloat::fcNormal },<br>+    { MSmallestValue, MZero, "-0x1p-149", APFloat::opOK, APFloat::fcNormal },<br>+    // See Note 2.<br>+    { MSmallestValue, QNaN, "-nan", APFloat::opOK, APFloat::fcNaN },<br>+#if 0<br>+    // See Note 1.<br>+    { MSmallestValue, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },<br>+#endif<br>+    { MSmallestValue, PNormalValue, "0x1p+0", APFloat::opInexact, APFloat::fcNormal },<br>+    { MSmallestValue, MNormalValue, "-0x1p+0", APFloat::opInexact, APFloat::fcNormal },<br>+    { MSmallestValue, PLargestValue, "0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },<br>+    { MSmallestValue, MLargestValue, "-0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },<br>+    { MSmallestValue, PSmallestValue, "0x0p+0", APFloat::opOK, APFloat::fcZero },<br>+    { MSmallestValue, MSmallestValue, "-0x1p-148", APFloat::opOK, APFloat::fcNormal },<br>+    { MSmallestValue, PSmallestNormalized, "0x1.fffffcp-127", APFloat::opOK, APFloat::fcNormal },<br>+    { MSmallestValue, MSmallestNormalized, "-0x1.000002p-126", APFloat::opOK, APFloat::fcNormal },<br>+    { PSmallestNormalized, PInf, "inf", APFloat::opOK, APFloat::fcInfinity },<br>+    { PSmallestNormalized, MInf, "-inf", APFloat::opOK, APFloat::fcInfinity },<br>+    { PSmallestNormalized, PZero, "0x1p-126", APFloat::opOK, APFloat::fcNormal },<br>+    { PSmallestNormalized, MZero, "0x1p-126", APFloat::opOK, APFloat::fcNormal },<br>+    { PSmallestNormalized, QNaN, "nan", APFloat::opOK, APFloat::fcNaN },<br>+#if 0<br>+// See Note 1.<br>+    { PSmallestNormalized, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },<br>+#endif<br>+    { PSmallestNormalized, PNormalValue, "0x1p+0", APFloat::opInexact, APFloat::fcNormal },<br>+    { PSmallestNormalized, MNormalValue, "-0x1p+0", APFloat::opInexact, APFloat::fcNormal },<br>+    { PSmallestNormalized, PLargestValue, "0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },<br>+    { PSmallestNormalized, MLargestValue, "-0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },<br>+    { PSmallestNormalized, PSmallestValue, "0x1.000002p-126", APFloat::opOK, APFloat::fcNormal },<br>+    { PSmallestNormalized, MSmallestValue, "0x1.fffffcp-127", APFloat::opOK, APFloat::fcNormal },<br>+    { PSmallestNormalized, PSmallestNormalized, "0x1p-125", APFloat::opOK, APFloat::fcNormal },<br>+    { PSmallestNormalized, MSmallestNormalized, "0x0p+0", APFloat::opOK, APFloat::fcZero },<br>+    { MSmallestNormalized, PInf, "inf", APFloat::opOK, APFloat::fcInfinity },<br>+    { MSmallestNormalized, MInf, "-inf", APFloat::opOK, APFloat::fcInfinity },<br>+    { MSmallestNormalized, PZero, "-0x1p-126", APFloat::opOK, APFloat::fcNormal },<br>+    { MSmallestNormalized, MZero, "-0x1p-126", APFloat::opOK, APFloat::fcNormal },<br>+    // See Note 2.<br>+    { MSmallestNormalized, QNaN, "-nan", APFloat::opOK, APFloat::fcNaN },<br>+#if 0<br>+    // See Note 1.<br>+    { MSmallestNormalized, SNaN, "nan", APFloat::opInvalidOp, APFloat::fcNaN },<br>+#endif<br>+    { MSmallestNormalized, PNormalValue, "0x1p+0", APFloat::opInexact, APFloat::fcNormal },<br>+    { MSmallestNormalized, MNormalValue, "-0x1p+0", APFloat::opInexact, APFloat::fcNormal },<br>+    { MSmallestNormalized, PLargestValue, "0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },<br>+    { MSmallestNormalized, MLargestValue, "-0x1.fffffep+127", APFloat::opInexact, APFloat::fcNormal },<br>+    { MSmallestNormalized, PSmallestValue, "-0x1.fffffcp-127", APFloat::opOK, APFloat::fcNormal },<br>+    { MSmallestNormalized, MSmallestValue, "-0x1.000002p-126", APFloat::opOK, APFloat::fcNormal },<br>+    { MSmallestNormalized, PSmallestNormalized, "0x0p+0", APFloat::opOK, APFloat::fcZero },<br>+    { MSmallestNormalized, MSmallestNormalized, "-0x1p-125", APFloat::opOK, APFloat::fcNormal }<br>+  };<br>+<br>+  for (size_t i = 0; i < NumTests; ++i) {<br>+    APFloat x(SpecialCaseTests[i].x);<br>+    APFloat y(SpecialCaseTests[i].y);<br>+    APFloat::opStatus status = x.add(y, APFloat::rmNearestTiesToEven);<br>+<br>+    APFloat result(APFloat::IEEEsingle, SpecialCaseTests[i].result);<br>+<br>+    printf("%a, %a, %a, %a\n", SpecialCaseTests[i].x.convertToFloat(),<br>+           SpecialCaseTests[i].y.convertToFloat(),<br>+           x.convertToFloat(), result.convertToFloat());<br>+<br>+    EXPECT_TRUE(result.bitwiseIsEqual(x));<br>+    EXPECT_TRUE((int)status == SpecialCaseTests[i].status);<br>+    EXPECT_TRUE((int)x.getCategory() == SpecialCaseTests[i].category);<br>+  }<br>+}<br>+<br>}<br><br><br>_______________________________________________<br>llvm-commits mailing list<br><a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br><a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a></div></blockquote></div><br></body></html>