MCPcopy Create free account
hub / github.com/avaxman/Directional / test_conversion

Function test_conversion

external/eigen/test/bfloat16_float.cpp:46–168  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

44}
45
46void test_conversion()
47{
48 using Eigen::bfloat16_impl::__bfloat16_raw;
49
50 // Round-trip casts
51 VERIFY_IS_EQUAL(
52 numext::bit_cast<bfloat16>(numext::bit_cast<numext::uint16_t>(bfloat16(1.0f))),
53 bfloat16(1.0f));
54 VERIFY_IS_EQUAL(
55 numext::bit_cast<bfloat16>(numext::bit_cast<numext::uint16_t>(bfloat16(0.5f))),
56 bfloat16(0.5f));
57 VERIFY_IS_EQUAL(
58 numext::bit_cast<bfloat16>(numext::bit_cast<numext::uint16_t>(bfloat16(-0.33333f))),
59 bfloat16(-0.33333f));
60 VERIFY_IS_EQUAL(
61 numext::bit_cast<bfloat16>(numext::bit_cast<numext::uint16_t>(bfloat16(0.0f))),
62 bfloat16(0.0f));
63
64 // Conversion from float.
65 VERIFY_BFLOAT16_BITS_EQUAL(bfloat16(1.0f), 0x3f80);
66 VERIFY_BFLOAT16_BITS_EQUAL(bfloat16(0.5f), 0x3f00);
67 VERIFY_BFLOAT16_BITS_EQUAL(bfloat16(0.33333f), 0x3eab);
68 VERIFY_BFLOAT16_BITS_EQUAL(bfloat16(3.38e38f), 0x7f7e);
69 VERIFY_BFLOAT16_BITS_EQUAL(bfloat16(3.40e38f), 0x7f80); // Becomes infinity.
70
71 // Verify round-to-nearest-even behavior.
72 float val1 = static_cast<float>(bfloat16(__bfloat16_raw(0x3c00)));
73 float val2 = static_cast<float>(bfloat16(__bfloat16_raw(0x3c01)));
74 float val3 = static_cast<float>(bfloat16(__bfloat16_raw(0x3c02)));
75 VERIFY_BFLOAT16_BITS_EQUAL(bfloat16(0.5f * (val1 + val2)), 0x3c00);
76 VERIFY_BFLOAT16_BITS_EQUAL(bfloat16(0.5f * (val2 + val3)), 0x3c02);
77
78 // Conversion from int.
79 VERIFY_BFLOAT16_BITS_EQUAL(bfloat16(-1), 0xbf80);
80 VERIFY_BFLOAT16_BITS_EQUAL(bfloat16(0), 0x0000);
81 VERIFY_BFLOAT16_BITS_EQUAL(bfloat16(1), 0x3f80);
82 VERIFY_BFLOAT16_BITS_EQUAL(bfloat16(2), 0x4000);
83 VERIFY_BFLOAT16_BITS_EQUAL(bfloat16(3), 0x4040);
84 VERIFY_BFLOAT16_BITS_EQUAL(bfloat16(12), 0x4140);
85
86 // Conversion from bool.
87 VERIFY_BFLOAT16_BITS_EQUAL(bfloat16(false), 0x0000);
88 VERIFY_BFLOAT16_BITS_EQUAL(bfloat16(true), 0x3f80);
89
90 // Conversion to bool
91 VERIFY_IS_EQUAL(static_cast<bool>(bfloat16(3)), true);
92 VERIFY_IS_EQUAL(static_cast<bool>(bfloat16(0.33333f)), true);
93 VERIFY_IS_EQUAL(bfloat16(-0.0), false);
94 VERIFY_IS_EQUAL(static_cast<bool>(bfloat16(0.0)), false);
95
96 // Explicit conversion to float.
97 VERIFY_IS_EQUAL(static_cast<float>(bfloat16(__bfloat16_raw(0x0000))), 0.0f);
98 VERIFY_IS_EQUAL(static_cast<float>(bfloat16(__bfloat16_raw(0x3f80))), 1.0f);
99
100 // Implicit conversion to float
101 VERIFY_IS_EQUAL(bfloat16(__bfloat16_raw(0x0000)), 0.0f);
102 VERIFY_IS_EQUAL(bfloat16(__bfloat16_raw(0x3f80)), 1.0f);
103

Callers 1

EIGEN_DECLARE_TESTFunction · 0.70

Calls 6

__bfloat16_rawClass · 0.85
BinaryToFloatFunction · 0.85
bfloat16Class · 0.70
absFunction · 0.70
aFunction · 0.50
cFunction · 0.50

Tested by

no test coverage detected