MCPcopy Create free account
hub / github.com/Derious/cuMPC / test_numtraits

Function test_numtraits

dependence/eigen-3.4.0/test/bfloat16_float.cpp:172–208  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

170}
171
172void test_numtraits()
173{
174 std::cout << "epsilon = " << NumTraits<bfloat16>::epsilon() << " (0x" << std::hex << numext::bit_cast<numext::uint16_t>(NumTraits<bfloat16>::epsilon()) << ")" << std::endl;
175 std::cout << "highest = " << NumTraits<bfloat16>::highest() << " (0x" << std::hex << numext::bit_cast<numext::uint16_t>(NumTraits<bfloat16>::highest()) << ")" << std::endl;
176 std::cout << "lowest = " << NumTraits<bfloat16>::lowest() << " (0x" << std::hex << numext::bit_cast<numext::uint16_t>(NumTraits<bfloat16>::lowest()) << ")" << std::endl;
177 std::cout << "min = " << (std::numeric_limits<bfloat16>::min)() << " (0x" << std::hex << numext::bit_cast<numext::uint16_t>((std::numeric_limits<bfloat16>::min)()) << ")" << std::endl;
178 std::cout << "denorm min = " << (std::numeric_limits<bfloat16>::denorm_min)() << " (0x" << std::hex << numext::bit_cast<numext::uint16_t>((std::numeric_limits<bfloat16>::denorm_min)()) << ")" << std::endl;
179 std::cout << "infinity = " << NumTraits<bfloat16>::infinity() << " (0x" << std::hex << numext::bit_cast<numext::uint16_t>(NumTraits<bfloat16>::infinity()) << ")" << std::endl;
180 std::cout << "quiet nan = " << NumTraits<bfloat16>::quiet_NaN() << " (0x" << std::hex << numext::bit_cast<numext::uint16_t>(NumTraits<bfloat16>::quiet_NaN()) << ")" << std::endl;
181 std::cout << "signaling nan = " << std::numeric_limits<bfloat16>::signaling_NaN() << " (0x" << std::hex << numext::bit_cast<numext::uint16_t>(std::numeric_limits<bfloat16>::signaling_NaN()) << ")" << std::endl;
182
183 VERIFY(NumTraits<bfloat16>::IsSigned);
184
185 VERIFY_IS_EQUAL(
186 numext::bit_cast<numext::uint16_t>(std::numeric_limits<bfloat16>::infinity()),
187 numext::bit_cast<numext::uint16_t>(bfloat16(std::numeric_limits<float>::infinity())) );
188 // There is no guarantee that casting a 32-bit NaN to bfloat16 has a precise
189 // bit pattern. We test that it is in fact a NaN, then test the signaling
190 // bit (msb of significand is 1 for quiet, 0 for signaling).
191 const numext::uint16_t BFLOAT16_QUIET_BIT = 0x0040;
192 VERIFY(
193 (numext::isnan)(std::numeric_limits<bfloat16>::quiet_NaN())
194 && (numext::isnan)(bfloat16(std::numeric_limits<float>::quiet_NaN()))
195 && ((numext::bit_cast<numext::uint16_t>(std::numeric_limits<bfloat16>::quiet_NaN()) & BFLOAT16_QUIET_BIT) > 0)
196 && ((numext::bit_cast<numext::uint16_t>(bfloat16(std::numeric_limits<float>::quiet_NaN())) & BFLOAT16_QUIET_BIT) > 0) );
197 // After a cast to bfloat16, a signaling NaN may become non-signaling. Thus,
198 // we check that both are NaN, and that only the `numeric_limits` version is
199 // signaling.
200 VERIFY(
201 (numext::isnan)(std::numeric_limits<bfloat16>::signaling_NaN())
202 && (numext::isnan)(bfloat16(std::numeric_limits<float>::signaling_NaN()))
203 && ((numext::bit_cast<numext::uint16_t>(std::numeric_limits<bfloat16>::signaling_NaN()) & BFLOAT16_QUIET_BIT) == 0) );
204
205 VERIFY( (std::numeric_limits<bfloat16>::min)() > bfloat16(0.f) );
206 VERIFY( (std::numeric_limits<bfloat16>::denorm_min)() > bfloat16(0.f) );
207 VERIFY_IS_EQUAL( (std::numeric_limits<bfloat16>::denorm_min)()/bfloat16(2), bfloat16(0.f) );
208}
209
210void test_arithmetic()
211{

Callers 1

EIGEN_DECLARE_TESTFunction · 0.70

Calls 1

bfloat16Class · 0.70

Tested by

no test coverage detected