| #include "bej_common.h" |
| |
| #include <float.h> |
| |
| #include <gmock/gmock-matchers.h> |
| #include <gmock/gmock.h> |
| #include <gtest/gtest.h> |
| |
| namespace libbej |
| { |
| |
| TEST(BejCommonTest, BejGetUnsignedIntegerTest) |
| { |
| constexpr uint8_t bytes[] = {0xab, 0xcd, 0xef, 0x12, |
| 0x13, 0x65, 0x23, 0x89}; |
| EXPECT_THAT(bejGetUnsignedInteger(bytes, /*numOfBytes=*/1), 0xab); |
| EXPECT_THAT(bejGetUnsignedInteger(bytes, /*numOfBytes=*/2), 0xcdab); |
| EXPECT_THAT(bejGetUnsignedInteger(bytes, /*numOfBytes=*/5), 0x1312efcdab); |
| EXPECT_THAT(bejGetUnsignedInteger(bytes, /*numOfBytes=*/8), |
| 0x8923651312efcdab); |
| } |
| |
| TEST(BejCommonTest, BejGetNnintTest) |
| { |
| constexpr uint8_t nnint1[] = {0x03, 0xcd, 0xef, 0x12}; |
| constexpr uint8_t nnint2[] = {0x08, 0xab, 0xcd, 0xef, 0x12, |
| 0x13, 0x65, 0x23, 0x89}; |
| EXPECT_THAT(bejGetNnint(nnint1), 0x12efcd); |
| EXPECT_THAT(bejGetNnint(nnint2), 0x8923651312efcdab); |
| } |
| |
| TEST(BejCommonTest, BejGetNnintSizeTest) |
| { |
| constexpr uint8_t nnint1[] = {0x03, 0xcd, 0xef, 0x12}; |
| constexpr uint8_t nnint2[] = {0x08, 0xab, 0xcd, 0xef, 0x12, |
| 0x13, 0x65, 0x23, 0x89}; |
| EXPECT_THAT(bejGetNnintSize(nnint1), 4); |
| EXPECT_THAT(bejGetNnintSize(nnint2), 9); |
| } |
| |
| TEST(BejCommonTest, BejGetDoubleFromBejReal) |
| { |
| BejReal real; |
| double output; |
| |
| real.valid_exp = false; |
| real.exp = 0; |
| real.whole = 1; |
| real.zeroCount = 3; |
| real.fract = 525; |
| EXPECT_EQ(bejGetDoubleFromBejReal(&real, &output), 0); |
| EXPECT_DOUBLE_EQ(output, 1.000525); |
| |
| real.valid_exp = false; |
| real.exp = 0; |
| real.whole = 225; |
| real.zeroCount = 3; |
| real.fract = 0; |
| EXPECT_EQ(bejGetDoubleFromBejReal(&real, &output), 0); |
| EXPECT_DOUBLE_EQ(output, 225); |
| |
| real.valid_exp = false; |
| real.exp = 0; |
| real.whole = 0; |
| real.zeroCount = 0; |
| real.fract = 1; |
| EXPECT_EQ(bejGetDoubleFromBejReal(&real, &output), 0); |
| EXPECT_DOUBLE_EQ(output, 0.1); |
| |
| real.valid_exp = false; |
| real.exp = 0; |
| real.whole = 0; |
| real.zeroCount = 5; |
| real.fract = 1024; |
| EXPECT_EQ(bejGetDoubleFromBejReal(&real, &output), 0); |
| EXPECT_DOUBLE_EQ(output, 0.000001024); |
| |
| real.valid_exp = false; |
| real.exp = 0; |
| real.whole = 0; |
| real.zeroCount = 0; |
| real.fract = 0; |
| EXPECT_EQ(bejGetDoubleFromBejReal(&real, &output), 0); |
| EXPECT_DOUBLE_EQ(output, 0); |
| |
| real.valid_exp = false; |
| real.exp = 0; |
| real.whole = -1; |
| real.zeroCount = 3; |
| real.fract = 345; |
| EXPECT_EQ(bejGetDoubleFromBejReal(&real, &output), 0); |
| EXPECT_DOUBLE_EQ(output, -1.000345); |
| |
| real.valid_exp = false; |
| real.exp = 0; |
| real.whole = -1; |
| real.zeroCount = 3; |
| real.fract = UINT64_MAX; |
| EXPECT_EQ(bejGetDoubleFromBejReal(&real, &output), 0); |
| EXPECT_DOUBLE_EQ(output, -1.00018446744073709551615); |
| |
| real.valid_exp = false; |
| real.exp = 0; |
| real.whole = 1; |
| real.zeroCount = 19; |
| real.fract = UINT64_MAX; |
| EXPECT_EQ(bejGetDoubleFromBejReal(&real, &output), 0); |
| EXPECT_DOUBLE_EQ(output, 1.000000000000000000018446744073709551615); |
| } |
| |
| TEST(BejCommonTest, BejGetDoubleFromBejRealWithExp) |
| { |
| BejReal real; |
| double output; |
| real.valid_exp = true; |
| real.exp = -1; |
| real.whole = -2; |
| real.zeroCount = 0; |
| real.fract = 56; |
| EXPECT_EQ(bejGetDoubleFromBejReal(&real, &output), 0); |
| EXPECT_DOUBLE_EQ(output, -0.256); |
| } |
| |
| TEST(BejCommonTest, BejGetDoubleFromBejRealWithTooLargeExp) |
| { |
| BejReal real; |
| double output; |
| |
| real.valid_exp = true; |
| real.exp = std::log10(DBL_MAX) + 1; |
| real.whole = 1; |
| real.zeroCount = 3; |
| real.fract = 525; |
| EXPECT_NE(bejGetDoubleFromBejReal(&real, &output), 0); |
| } |
| |
| TEST(BejCommonTest, BejGetDoubleFromBejRealWithTooLargeValue) |
| { |
| BejReal real; |
| double output; |
| |
| real.valid_exp = true; |
| real.exp = std::log10(DBL_MAX); |
| real.whole = 10; |
| real.zeroCount = 3; |
| real.fract = 525; |
| EXPECT_NE(bejGetDoubleFromBejReal(&real, &output), 0); |
| } |
| |
| TEST(BejCommonTest, BejGetDoubleFromBejRealZeroCountFail) |
| { |
| BejReal real; |
| double output; |
| |
| real.valid_exp = false; |
| real.exp = 0; |
| real.whole = 1; |
| real.zeroCount = 20; |
| real.fract = 525; |
| EXPECT_NE(bejGetDoubleFromBejReal(&real, &output), 0); |
| } |
| |
| } // namespace libbej |