@@ -10184,111 +10184,30 @@ TEST(APFloatTest, FrexpQuietSNaN) {
1018410184
1018510185TEST (APFloatTest, getPromoted) {
1018610186 // Strengthening promotions are allowed.
10187- bool LosesInfo = false ;
1018810187 APFloat ValidPromotionTest (1 .0f );
10189- APFloat FloatVal = ValidPromotionTest.getPromoted (APFloat::IEEEsingle ());
1019010188 APFloat DoubleVal = ValidPromotionTest.getPromoted (APFloat::IEEEdouble ());
10191- APFloat QuadVal = ValidPromotionTest.getPromoted (APFloat::IEEEquad ());
10192- APFloat X87DoubleVal =
10193- ValidPromotionTest.getPromoted (APFloat::x87DoubleExtended ());
10194- APFloat PPCDoubleDoubleVal =
10195- ValidPromotionTest.getPromoted (APFloat::PPCDoubleDoubleLegacy ());
1019610189
1019710190 // Trivial promotions to the same semantics are allowed.
10198- FloatVal.getPromoted (FloatVal.getSemantics ());
1019910191 DoubleVal.getPromoted (DoubleVal.getSemantics ());
10200- QuadVal.getPromoted (QuadVal.getSemantics ());
10201- X87DoubleVal.getPromoted (X87DoubleVal.getSemantics ());
10202- PPCDoubleDoubleVal.getPromoted (PPCDoubleDoubleVal.getSemantics ());
1020310192
10204- // Promotions have the expected semantics.
10205- EXPECT_EQ (&FloatVal.getSemantics (), &APFloat::IEEEsingle ());
10193+ // Promotions have the expected semantics and preserve the initial value.
1020610194 EXPECT_EQ (&DoubleVal.getSemantics (), &APFloat::IEEEdouble ());
10207- EXPECT_EQ (&QuadVal.getSemantics (), &APFloat::IEEEquad ());
10208- EXPECT_EQ (&X87DoubleVal.getSemantics (), &APFloat::x87DoubleExtended ());
10209- EXPECT_EQ (&PPCDoubleDoubleVal.getSemantics (),
10210- &APFloat::PPCDoubleDoubleLegacy ());
10211-
10212- // Promotions preserve the initial value.
10213- QuadVal.convert (APFloat::IEEEdouble (), APFloat::rmNearestTiesToEven,
10214- &LosesInfo);
10215- EXPECT_FALSE (LosesInfo);
10216- X87DoubleVal.convert (APFloat::IEEEdouble (), APFloat::rmNearestTiesToEven,
10217- &LosesInfo);
10218- EXPECT_FALSE (LosesInfo);
10219- PPCDoubleDoubleVal.convert (APFloat::IEEEdouble (),
10220- APFloat::rmNearestTiesToEven, &LosesInfo);
10221- EXPECT_FALSE (LosesInfo);
10222- EXPECT_EQ (1.0 , FloatVal.convertToFloat ());
1022310195 EXPECT_EQ (1.0 , DoubleVal.convertToDouble ());
10224- EXPECT_EQ (1.0 , QuadVal.convertToDouble ());
10225- EXPECT_EQ (1.0 , X87DoubleVal.convertToDouble ());
10226- EXPECT_EQ (1.0 , PPCDoubleDoubleVal.convertToDouble ());
1022710196
10197+ #ifdef GTEST_HAS_DEATH_TEST
10198+ #ifndef NDEBUG
1022810199 // All invalid promotions are swiftly killed.
10229- APFloat InvalidPromotionTest (1 .0f );
10230- EXPECT_DEATH (InvalidPromotionTest.getPromoted (APFloat::IEEEhalf ()),
10231- " Target semantics will lose information" );
10232- EXPECT_DEATH (InvalidPromotionTest.getPromoted (APFloat::BFloat ()),
10233- " Target semantics will lose information." );
10234-
10235- APFloat InvalidPromotionDoubleTest =
10236- InvalidPromotionTest.getPromoted (APFloat::IEEEdouble ());
10237- EXPECT_DEATH (InvalidPromotionDoubleTest.getPromoted (APFloat::BFloat ()),
10238- " Target semantics will lose information." );
10239- EXPECT_DEATH (InvalidPromotionDoubleTest.getPromoted (APFloat::IEEEsingle ()),
10240- " Target semantics will lose information" );
10241- EXPECT_DEATH (InvalidPromotionDoubleTest.getPromoted (APFloat::IEEEhalf ()),
10242- " Target semantics will lose information" );
10243-
10244- APFloat InvalidPromotionQuadTest =
10245- InvalidPromotionTest.getPromoted (APFloat::IEEEquad ());
10246- EXPECT_DEATH (InvalidPromotionQuadTest.getPromoted (APFloat::BFloat ()),
10247- " Target semantics will lose information." );
10248- EXPECT_DEATH (InvalidPromotionQuadTest.getPromoted (APFloat::IEEEsingle ()),
10249- " Target semantics will lose information" );
10250- EXPECT_DEATH (InvalidPromotionQuadTest.getPromoted (APFloat::IEEEhalf ()),
10251- " Target semantics will lose information" );
10252- EXPECT_DEATH (InvalidPromotionQuadTest.getPromoted (APFloat::IEEEdouble ()),
10253- " Target semantics will lose information" );
10254- EXPECT_DEATH (
10255- InvalidPromotionQuadTest.getPromoted (APFloat::x87DoubleExtended ()),
10256- " Target semantics will lose information" );
10257- EXPECT_DEATH (
10258- InvalidPromotionQuadTest.getPromoted (APFloat::PPCDoubleDoubleLegacy ()),
10259- " Target semantics will lose information" );
10260-
10261- APFloat InvalidPromotionX87Test =
10262- InvalidPromotionTest.getPromoted (APFloat::x87DoubleExtended ());
10263- EXPECT_DEATH (InvalidPromotionX87Test.getPromoted (APFloat::BFloat ()),
10264- " Target semantics will lose information." );
10265- EXPECT_DEATH (InvalidPromotionX87Test.getPromoted (APFloat::IEEEsingle ()),
10266- " Target semantics will lose information" );
10267- EXPECT_DEATH (InvalidPromotionX87Test.getPromoted (APFloat::IEEEhalf ()),
10200+ APFloat InvalidPromotionTest =
10201+ ValidPromotionTest.getPromoted (APFloat::IEEEquad ());
10202+ EXPECT_DEATH (InvalidPromotionTest.getPromoted (APFloat::IEEEdouble ()),
1026810203 " Target semantics will lose information" );
10269- EXPECT_DEATH (InvalidPromotionX87Test .getPromoted (APFloat::IEEEdouble ()),
10204+ EXPECT_DEATH (InvalidPromotionTest .getPromoted (APFloat::x87DoubleExtended ()),
1027010205 " Target semantics will lose information" );
1027110206 EXPECT_DEATH (
10272- InvalidPromotionX87Test .getPromoted (APFloat::PPCDoubleDoubleLegacy ()),
10207+ InvalidPromotionTest .getPromoted (APFloat::PPCDoubleDoubleLegacy ()),
1027310208 " Target semantics will lose information" );
10274-
10275- APFloat InvalidPromotionPPCDoubleDoubleTest =
10276- InvalidPromotionTest.getPromoted (APFloat::PPCDoubleDoubleLegacy ());
10277- EXPECT_DEATH (
10278- InvalidPromotionPPCDoubleDoubleTest.getPromoted (APFloat::BFloat ()),
10279- " Target semantics will lose information." );
10280- EXPECT_DEATH (
10281- InvalidPromotionPPCDoubleDoubleTest.getPromoted (APFloat::IEEEsingle ()),
10282- " Target semantics will lose information" );
10283- EXPECT_DEATH (
10284- InvalidPromotionPPCDoubleDoubleTest.getPromoted (APFloat::IEEEhalf ()),
10285- " Target semantics will lose information" );
10286- EXPECT_DEATH (
10287- InvalidPromotionPPCDoubleDoubleTest.getPromoted (APFloat::IEEEdouble ()),
10288- " Target semantics will lose information" );
10289- EXPECT_DEATH (InvalidPromotionPPCDoubleDoubleTest.getPromoted (
10290- APFloat::x87DoubleExtended ()),
10291- " Target semantics will lose information" );
10209+ #endif
10210+ #endif
1029210211}
1029310212
1029410213} // namespace
0 commit comments