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

Function test_conversion

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

Source from the content-addressed store, hash-verified

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

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