MCPcopy Create free account
hub / github.com/PX4/eigen / test_conversion

Function test_conversion

test/half_float.cpp:21–95  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

19using Eigen::half;
20
21void test_conversion()
22{
23 using Eigen::half_impl::__half;
24
25 // Conversion from float.
26 VERIFY_IS_EQUAL(half(1.0f).x, 0x3c00);
27 VERIFY_IS_EQUAL(half(0.5f).x, 0x3800);
28 VERIFY_IS_EQUAL(half(0.33333f).x, 0x3555);
29 VERIFY_IS_EQUAL(half(0.0f).x, 0x0000);
30 VERIFY_IS_EQUAL(half(-0.0f).x, 0x8000);
31 VERIFY_IS_EQUAL(half(65504.0f).x, 0x7bff);
32 VERIFY_IS_EQUAL(half(65536.0f).x, 0x7c00); // Becomes infinity.
33
34 // Denormals.
35 VERIFY_IS_EQUAL(half(-5.96046e-08f).x, 0x8001);
36 VERIFY_IS_EQUAL(half(5.96046e-08f).x, 0x0001);
37 VERIFY_IS_EQUAL(half(1.19209e-07f).x, 0x0002);
38
39 // Verify round-to-nearest-even behavior.
40 float val1 = float(half(__half(0x3c00)));
41 float val2 = float(half(__half(0x3c01)));
42 float val3 = float(half(__half(0x3c02)));
43 VERIFY_IS_EQUAL(half(0.5f * (val1 + val2)).x, 0x3c00);
44 VERIFY_IS_EQUAL(half(0.5f * (val2 + val3)).x, 0x3c02);
45
46 // Conversion from int.
47 VERIFY_IS_EQUAL(half(-1).x, 0xbc00);
48 VERIFY_IS_EQUAL(half(0).x, 0x0000);
49 VERIFY_IS_EQUAL(half(1).x, 0x3c00);
50 VERIFY_IS_EQUAL(half(2).x, 0x4000);
51 VERIFY_IS_EQUAL(half(3).x, 0x4200);
52
53 // Conversion from bool.
54 VERIFY_IS_EQUAL(half(false).x, 0x0000);
55 VERIFY_IS_EQUAL(half(true).x, 0x3c00);
56
57 // Conversion to float.
58 VERIFY_IS_EQUAL(float(half(__half(0x0000))), 0.0f);
59 VERIFY_IS_EQUAL(float(half(__half(0x3c00))), 1.0f);
60
61 // Denormals.
62 VERIFY_IS_APPROX(float(half(__half(0x8001))), -5.96046e-08f);
63 VERIFY_IS_APPROX(float(half(__half(0x0001))), 5.96046e-08f);
64 VERIFY_IS_APPROX(float(half(__half(0x0002))), 1.19209e-07f);
65
66 // NaNs and infinities.
67 VERIFY(!(numext::isinf)(float(half(65504.0f)))); // Largest finite number.
68 VERIFY(!(numext::isnan)(float(half(0.0f))));
69 VERIFY((numext::isinf)(float(half(__half(0xfc00)))));
70 VERIFY((numext::isnan)(float(half(__half(0xfc01)))));
71 VERIFY((numext::isinf)(float(half(__half(0x7c00)))));
72 VERIFY((numext::isnan)(float(half(__half(0x7c01)))));
73
74#if !EIGEN_COMP_MSVC
75 // Visual Studio errors out on divisions by 0
76 VERIFY((numext::isnan)(float(half(0.0 / 0.0))));
77 VERIFY((numext::isinf)(float(half(1.0 / 0.0))));
78 VERIFY((numext::isinf)(float(half(-1.0 / 0.0))));

Callers 1

test_half_floatFunction · 0.85

Calls 2

__halfClass · 0.85
halfClass · 0.70

Tested by

no test coverage detected