Skip to content

Commit

Permalink
correct ambiguity issue with MSVC
Browse files Browse the repository at this point in the history
  • Loading branch information
Rinzii committed Feb 29, 2024
1 parent 6d7a2a0 commit 4de8eb7
Showing 1 changed file with 22 additions and 30 deletions.
52 changes: 22 additions & 30 deletions test/compare/signbit_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,44 +7,36 @@
*/

#include <gtest/gtest.h>

#include <ccmath/detail/compare/signbit.hpp>
#include <cmath>
#include <ccmath/detail/compare/signbit.hpp>
#include <limits>


TEST(CcmathCompareTests, Signbit)
{
EXPECT_EQ(ccm::signbit(1.0), std::signbit(1.0));
EXPECT_EQ(ccm::signbit(-1.0), std::signbit(-1.0));
EXPECT_EQ(ccm::signbit(0.0), std::signbit(0.0));
EXPECT_EQ(ccm::signbit(-0.0), std::signbit(-0.0));
EXPECT_EQ(ccm::signbit(std::numeric_limits<double>::infinity()), std::signbit(std::numeric_limits<double>::infinity()));
EXPECT_EQ(ccm::signbit(-std::numeric_limits<double>::infinity()), std::signbit(-std::numeric_limits<double>::infinity()));
EXPECT_EQ(ccm::signbit(std::numeric_limits<double>::quiet_NaN()), std::signbit(std::numeric_limits<double>::quiet_NaN()));
EXPECT_EQ(ccm::signbit(-std::numeric_limits<double>::quiet_NaN()), std::signbit(-std::numeric_limits<double>::quiet_NaN()));

EXPECT_EQ(ccm::signbit(1.0f), std::signbit(1.0f));
EXPECT_EQ(ccm::signbit(-1.0f), std::signbit(-1.0f));
EXPECT_EQ(ccm::signbit(0.0f), std::signbit(0.0f));
EXPECT_EQ(ccm::signbit(-0.0f), std::signbit(-0.0f));
EXPECT_EQ(ccm::signbit(std::numeric_limits<float>::infinity()), std::signbit(std::numeric_limits<float>::infinity()));
EXPECT_EQ(ccm::signbit(-std::numeric_limits<float>::infinity()), std::signbit(-std::numeric_limits<float>::infinity()));
EXPECT_EQ(ccm::signbit(std::numeric_limits<float>::quiet_NaN()), std::signbit(std::numeric_limits<float>::quiet_NaN()));
EXPECT_EQ(ccm::signbit(-std::numeric_limits<float>::quiet_NaN()), std::signbit(-std::numeric_limits<float>::quiet_NaN()));
// TODO: For some reason MSVC is getting confused with ambiguity between floating point numbers. Look into this later.
EXPECT_EQ(ccm::signbit<float>(1.0), std::signbit(1.0));
EXPECT_EQ(ccm::signbit<float>(-1.0), std::signbit(-1.0));
EXPECT_EQ(ccm::signbit<float>(0.0), std::signbit(0.0));
EXPECT_EQ(ccm::signbit<float>(-0.0), std::signbit(-0.0));
EXPECT_EQ(ccm::signbit<float>(std::numeric_limits<double>::infinity()), std::signbit(std::numeric_limits<double>::infinity()));
EXPECT_EQ(ccm::signbit<float>(-std::numeric_limits<double>::infinity()), std::signbit(-std::numeric_limits<double>::infinity()));
EXPECT_EQ(ccm::signbit<float>(std::numeric_limits<double>::quiet_NaN()), std::signbit(std::numeric_limits<double>::quiet_NaN()));
EXPECT_EQ(ccm::signbit<float>(-std::numeric_limits<double>::quiet_NaN()), std::signbit(-std::numeric_limits<double>::quiet_NaN()));


// Test integers
EXPECT_EQ(ccm::signbit(1), std::signbit(1));
EXPECT_EQ(ccm::signbit(-1), std::signbit(-1));
EXPECT_EQ(ccm::signbit(0), std::signbit(0));
EXPECT_EQ(ccm::signbit(-0), std::signbit(-0));
EXPECT_EQ(ccm::signbit(std::numeric_limits<int>::max()), std::signbit(std::numeric_limits<int>::max()));
EXPECT_EQ(ccm::signbit(std::numeric_limits<int>::min()), std::signbit(std::numeric_limits<int>::min()));
EXPECT_EQ(ccm::signbit(std::numeric_limits<int>::lowest()), std::signbit(std::numeric_limits<int>::lowest()));
EXPECT_EQ(ccm::signbit(std::numeric_limits<int>::infinity()), std::signbit(std::numeric_limits<int>::infinity()));
EXPECT_EQ(ccm::signbit(-std::numeric_limits<int>::infinity()), std::signbit(-std::numeric_limits<int>::infinity()));
EXPECT_EQ(ccm::signbit(std::numeric_limits<int>::quiet_NaN()), std::signbit(std::numeric_limits<int>::quiet_NaN()));
EXPECT_EQ(ccm::signbit(-std::numeric_limits<int>::quiet_NaN()), std::signbit(-std::numeric_limits<int>::quiet_NaN()));
EXPECT_EQ(ccm::signbit<int>(1), std::signbit(1));
EXPECT_EQ(ccm::signbit<int>(-1), std::signbit(-1));
EXPECT_EQ(ccm::signbit<int>(0), std::signbit(0));
EXPECT_EQ(ccm::signbit<int>(-0), std::signbit(-0));
EXPECT_EQ(ccm::signbit<int>(std::numeric_limits<int>::max()), std::signbit(std::numeric_limits<int>::max()));
EXPECT_EQ(ccm::signbit<int>(std::numeric_limits<int>::min()), std::signbit(std::numeric_limits<int>::min()));
EXPECT_EQ(ccm::signbit<int>(std::numeric_limits<int>::lowest()), std::signbit(std::numeric_limits<int>::lowest()));
EXPECT_EQ(ccm::signbit<int>(std::numeric_limits<int>::infinity()), std::signbit(std::numeric_limits<int>::infinity()));
EXPECT_EQ(ccm::signbit<int>(-std::numeric_limits<int>::infinity()), std::signbit(-std::numeric_limits<int>::infinity()));
EXPECT_EQ(ccm::signbit<int>(std::numeric_limits<int>::quiet_NaN()), std::signbit(std::numeric_limits<int>::quiet_NaN()));
EXPECT_EQ(ccm::signbit<int>(-std::numeric_limits<int>::quiet_NaN()), std::signbit(-std::numeric_limits<int>::quiet_NaN()));



Expand Down

0 comments on commit 4de8eb7

Please sign in to comment.