1*5f32b710SXin Li #include <gtest/gtest.h>
2*5f32b710SXin Li
3*5f32b710SXin Li #include <cstdint>
4*5f32b710SXin Li
5*5f32b710SXin Li #include <fp16.h>
6*5f32b710SXin Li
7*5f32b710SXin Li
TEST(FP32_TO_BITS,positive)8*5f32b710SXin Li TEST(FP32_TO_BITS, positive) {
9*5f32b710SXin Li for (uint32_t bits = UINT32_C(0x00000000); bits <= UINT32_C(0x7FFFFFFF); bits++) {
10*5f32b710SXin Li float value;
11*5f32b710SXin Li memcpy(&value, &bits, sizeof(value));
12*5f32b710SXin Li
13*5f32b710SXin Li ASSERT_EQ(bits, fp32_to_bits(value)) <<
14*5f32b710SXin Li std::hex << std::uppercase << std::setfill('0') <<
15*5f32b710SXin Li "BITS = 0x" << std::setw(8) << bits << ", " <<
16*5f32b710SXin Li "BITCAST(VALUE) = 0x" << std::setw(8) << fp32_to_bits(value);
17*5f32b710SXin Li }
18*5f32b710SXin Li }
19*5f32b710SXin Li
TEST(FP32_TO_BITS,negative)20*5f32b710SXin Li TEST(FP32_TO_BITS, negative) {
21*5f32b710SXin Li for (uint32_t bits = UINT32_C(0xFFFFFFFF); bits >= UINT32_C(0x80000000); bits--) {
22*5f32b710SXin Li float value;
23*5f32b710SXin Li memcpy(&value, &bits, sizeof(value));
24*5f32b710SXin Li
25*5f32b710SXin Li ASSERT_EQ(bits, fp32_to_bits(value)) <<
26*5f32b710SXin Li std::hex << std::uppercase << std::setfill('0') <<
27*5f32b710SXin Li "BITS = 0x" << std::setw(8) << bits << ", " <<
28*5f32b710SXin Li "BITCAST(VALUE) = 0x" << std::setw(8) << fp32_to_bits(value);
29*5f32b710SXin Li }
30*5f32b710SXin Li }
31*5f32b710SXin Li
TEST(FP32_FROM_BITS,positive)32*5f32b710SXin Li TEST(FP32_FROM_BITS, positive) {
33*5f32b710SXin Li for (uint32_t bits = UINT32_C(0x00000000); bits <= UINT32_C(0x7FFFFFFF); bits++) {
34*5f32b710SXin Li const float value = fp32_from_bits(bits);
35*5f32b710SXin Li uint32_t bitcast;
36*5f32b710SXin Li memcpy(&bitcast, &value, sizeof(bitcast));
37*5f32b710SXin Li
38*5f32b710SXin Li ASSERT_EQ(bits, bitcast) <<
39*5f32b710SXin Li std::hex << std::uppercase << std::setfill('0') <<
40*5f32b710SXin Li "BITS = 0x" << std::setw(8) << bits << ", " <<
41*5f32b710SXin Li "VALUE = 0x" << std::setw(8) << bitcast;
42*5f32b710SXin Li }
43*5f32b710SXin Li }
44*5f32b710SXin Li
TEST(FP32_FROM_BITS,negative)45*5f32b710SXin Li TEST(FP32_FROM_BITS, negative) {
46*5f32b710SXin Li for (uint32_t bits = UINT32_C(0xFFFFFFFF); bits >= UINT32_C(0x80000000); bits--) {
47*5f32b710SXin Li const float value = fp32_from_bits(bits);
48*5f32b710SXin Li uint32_t bitcast;
49*5f32b710SXin Li memcpy(&bitcast, &value, sizeof(bitcast));
50*5f32b710SXin Li
51*5f32b710SXin Li ASSERT_EQ(bits, bitcast) <<
52*5f32b710SXin Li std::hex << std::uppercase << std::setfill('0') <<
53*5f32b710SXin Li "BITS = 0x" << std::setw(8) << bits << ", " <<
54*5f32b710SXin Li "VALUE = 0x" << std::setw(8) << bitcast;
55*5f32b710SXin Li }
56*5f32b710SXin Li }
57