@@ -564,6 +564,75 @@ TEST_SUITE("constexpr_math for long double")
564564TEST_SUITE (" constexpr_math for double" )
565565{
566566
567+ TEST_CASE (" testing fidelity of cxcm::signbit() with std::signbit() for double values" )
568+ {
569+ auto pos_nan = std::numeric_limits<double >::quiet_NaN ();
570+ auto neg_nan = -std::numeric_limits<double >::quiet_NaN ();
571+ auto pos_inf = std::numeric_limits<double >::infinity ();
572+ auto neg_inf = -std::numeric_limits<double >::infinity ();
573+ double pos_zero = 0 ;
574+ double neg_zero = std::copysign (0.0 , -1.0 );
575+ double pos_four = 4 ;
576+ double neg_four = -4 ;
577+
578+ // +/- 0
579+ CHECK (cxcm::signbit (pos_zero) == std::signbit (pos_zero));
580+ CHECK (cxcm::signbit (neg_zero) == std::signbit (neg_zero));
581+
582+ // +/- infinity
583+ CHECK (cxcm::signbit (pos_inf) == std::signbit (pos_inf));
584+ CHECK (cxcm::signbit (neg_inf) == std::signbit (neg_inf));
585+
586+ // NaN
587+ CHECK (cxcm::signbit (pos_nan) == std::signbit (pos_nan));
588+ CHECK (cxcm::signbit (neg_nan) == std::signbit (neg_nan));
589+
590+ // +/- 4
591+ CHECK (cxcm::signbit (pos_four) == std::signbit (pos_four));
592+ CHECK (cxcm::signbit (neg_four) == std::signbit (neg_four));
593+ }
594+
595+ TEST_CASE (" testing fidelity of cxcm::copysign() with std::copysign() for double values" )
596+ {
597+ auto pos_nan = std::numeric_limits<double >::quiet_NaN ();
598+ auto neg_nan = -std::numeric_limits<double >::quiet_NaN ();
599+ auto pos_inf = std::numeric_limits<double >::infinity ();
600+ auto neg_inf = -std::numeric_limits<double >::infinity ();
601+ double pos_zero = 0 ;
602+ double neg_zero = std::copysign (0.0 , -1.0 );
603+ double pos_four = 4 ;
604+ double neg_four = -4 ;
605+
606+ // +/- 0
607+ CHECK (cxcm::copysign (pos_four, pos_zero) == std::copysign (pos_four, pos_zero));
608+ CHECK (cxcm::copysign (neg_four, pos_zero) == std::copysign (neg_four, pos_zero));
609+ CHECK (cxcm::copysign (pos_four, neg_zero) == std::copysign (pos_four, neg_zero));
610+ CHECK (cxcm::copysign (neg_four, neg_zero) == std::copysign (neg_four, neg_zero));
611+
612+ // +/- infinity
613+ CHECK (cxcm::copysign (pos_four, pos_inf) == std::copysign (pos_four, pos_inf));
614+ CHECK (cxcm::copysign (neg_four, pos_inf) == std::copysign (neg_four, pos_inf));
615+ CHECK (cxcm::copysign (pos_four, neg_inf) == std::copysign (pos_four, neg_inf));
616+ CHECK (cxcm::copysign (neg_four, neg_inf) == std::copysign (neg_four, neg_inf));
617+
618+ CHECK (cxcm::copysign (pos_inf, pos_four) == std::copysign (pos_inf, pos_four));
619+ CHECK (cxcm::copysign (pos_inf, neg_four) == std::copysign (pos_inf, neg_four));
620+ CHECK (cxcm::copysign (neg_inf, pos_four) == std::copysign (neg_inf, pos_four));
621+ CHECK (cxcm::copysign (neg_inf, neg_four) == std::copysign (neg_inf, neg_four));
622+
623+ // NaN
624+ CHECK (cxcm::copysign (pos_four, pos_nan) == std::copysign (pos_four, pos_nan));
625+ CHECK (cxcm::copysign (neg_four, pos_nan) == std::copysign (neg_four, pos_nan));
626+ CHECK (cxcm::copysign (pos_four, neg_nan) == std::copysign (pos_four, neg_nan));
627+ CHECK (cxcm::copysign (neg_four, neg_nan) == std::copysign (neg_four, neg_nan));
628+
629+ // +/- 4
630+ CHECK (cxcm::copysign (pos_four, pos_four) == std::copysign (pos_four, pos_four));
631+ CHECK (cxcm::copysign (neg_four, pos_four) == std::copysign (neg_four, pos_four));
632+ CHECK (cxcm::copysign (pos_four, neg_four) == std::copysign (pos_four, neg_four));
633+ CHECK (cxcm::copysign (neg_four, neg_four) == std::copysign (neg_four, neg_four));
634+ }
635+
567636 TEST_CASE (" testing fidelity of cxcm::trunc() with std::trunc() with double values" )
568637 {
569638 // +/- 0
@@ -1070,6 +1139,75 @@ TEST_SUITE("constexpr_math for double")
10701139TEST_SUITE (" constexpr_math for float" )
10711140{
10721141
1142+ TEST_CASE (" testing fidelity of cxcm::signbit() with std::signbit() for float values" )
1143+ {
1144+ auto pos_nan = std::numeric_limits<float >::quiet_NaN ();
1145+ auto neg_nan = -std::numeric_limits<float >::quiet_NaN ();
1146+ auto pos_inf = std::numeric_limits<float >::infinity ();
1147+ auto neg_inf = -std::numeric_limits<float >::infinity ();
1148+ float pos_zero = 0 ;
1149+ float neg_zero = std::copysign (0 .0f , -1 .0f );
1150+ float pos_four = 4 ;
1151+ float neg_four = -4 ;
1152+
1153+ // +/- 0
1154+ CHECK (cxcm::signbit (pos_zero) == std::signbit (pos_zero));
1155+ CHECK (cxcm::signbit (neg_zero) == std::signbit (neg_zero));
1156+
1157+ // +/- infinity
1158+ CHECK (cxcm::signbit (pos_inf) == std::signbit (pos_inf));
1159+ CHECK (cxcm::signbit (neg_inf) == std::signbit (neg_inf));
1160+
1161+ // NaN
1162+ CHECK (cxcm::signbit (pos_nan) == std::signbit (pos_nan));
1163+ CHECK (cxcm::signbit (neg_nan) == std::signbit (neg_nan));
1164+
1165+ // +/- 4
1166+ CHECK (cxcm::signbit (pos_four) == std::signbit (pos_four));
1167+ CHECK (cxcm::signbit (neg_four) == std::signbit (neg_four));
1168+ }
1169+
1170+ TEST_CASE (" testing fidelity of cxcm::copysign() with std::copysign() for float values" )
1171+ {
1172+ auto pos_nan = std::numeric_limits<float >::quiet_NaN ();
1173+ auto neg_nan = -std::numeric_limits<float >::quiet_NaN ();
1174+ auto pos_inf = std::numeric_limits<float >::infinity ();
1175+ auto neg_inf = -std::numeric_limits<float >::infinity ();
1176+ float pos_zero = 0 ;
1177+ float neg_zero = std::copysign (0 .0f , -1 .0f );
1178+ float pos_four = 4 ;
1179+ float neg_four = -4 ;
1180+
1181+ // +/- 0
1182+ CHECK (cxcm::copysign (pos_four, pos_zero) == std::copysign (pos_four, pos_zero));
1183+ CHECK (cxcm::copysign (neg_four, pos_zero) == std::copysign (neg_four, pos_zero));
1184+ CHECK (cxcm::copysign (pos_four, neg_zero) == std::copysign (pos_four, neg_zero));
1185+ CHECK (cxcm::copysign (neg_four, neg_zero) == std::copysign (neg_four, neg_zero));
1186+
1187+ // +/- infinity
1188+ CHECK (cxcm::copysign (pos_four, pos_inf) == std::copysign (pos_four, pos_inf));
1189+ CHECK (cxcm::copysign (neg_four, pos_inf) == std::copysign (neg_four, pos_inf));
1190+ CHECK (cxcm::copysign (pos_four, neg_inf) == std::copysign (pos_four, neg_inf));
1191+ CHECK (cxcm::copysign (neg_four, neg_inf) == std::copysign (neg_four, neg_inf));
1192+
1193+ CHECK (cxcm::copysign (pos_inf, pos_four) == std::copysign (pos_inf, pos_four));
1194+ CHECK (cxcm::copysign (pos_inf, neg_four) == std::copysign (pos_inf, neg_four));
1195+ CHECK (cxcm::copysign (neg_inf, pos_four) == std::copysign (neg_inf, pos_four));
1196+ CHECK (cxcm::copysign (neg_inf, neg_four) == std::copysign (neg_inf, neg_four));
1197+
1198+ // NaN
1199+ CHECK (cxcm::copysign (pos_four, pos_nan) == std::copysign (pos_four, pos_nan));
1200+ CHECK (cxcm::copysign (neg_four, pos_nan) == std::copysign (neg_four, pos_nan));
1201+ CHECK (cxcm::copysign (pos_four, neg_nan) == std::copysign (pos_four, neg_nan));
1202+ CHECK (cxcm::copysign (neg_four, neg_nan) == std::copysign (neg_four, neg_nan));
1203+
1204+ // +/- 4
1205+ CHECK (cxcm::copysign (pos_four, pos_four) == std::copysign (pos_four, pos_four));
1206+ CHECK (cxcm::copysign (neg_four, pos_four) == std::copysign (neg_four, pos_four));
1207+ CHECK (cxcm::copysign (pos_four, neg_four) == std::copysign (pos_four, neg_four));
1208+ CHECK (cxcm::copysign (neg_four, neg_four) == std::copysign (neg_four, neg_four));
1209+ }
1210+
10731211 TEST_CASE (" testing fidelity of cxcm::trunc() with std::trunc() with float values" )
10741212 {
10751213 // +/- 0
0 commit comments