Skip to content

Commit 990b1ce

Browse files
committed
tests for cxcm::copysign() and cxcm::signbit()
1 parent 96f3a7c commit 990b1ce

File tree

2 files changed

+141
-3
lines changed

2 files changed

+141
-3
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ Returns ```1.0 / sqrt(value)```. Results are undefined if ```value <= 0```.
144144

145145
## Status
146146

147-
Current version: `v0.9.1`
147+
Current version: `v0.9.2`
148148

149149
Not sure yet how much more to try and make ```constexpr```. This library is meant to support the needs of other libraries, so I suppose things will be added as needed.
150150

@@ -174,8 +174,8 @@ This project uses [doctest](https://github.com/onqtam/doctest) for testing, and
174174
[doctest] doctest version is "2.4.11"
175175
[doctest] run with "--help" for options
176176
===============================================================================
177-
[doctest] test cases: 33 | 33 passed | 0 failed | 0 skipped
178-
[doctest] assertions: 746 | 746 passed | 0 failed |
177+
[doctest] test cases: 37 | 37 passed | 0 failed | 0 skipped
178+
[doctest] assertions: 802 | 802 passed | 0 failed |
179179
[doctest] Status: SUCCESS!
180180
```
181181

cxcm_test.cxx

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -564,6 +564,75 @@ TEST_SUITE("constexpr_math for long double")
564564
TEST_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")
10701139
TEST_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

Comments
 (0)