|
14 | 14 |
|
15 | 15 | #include "absl/numeric/bits.h"
|
16 | 16 |
|
| 17 | +#include <cstdint> |
17 | 18 | #include <limits>
|
18 | 19 | #include <type_traits>
|
19 | 20 |
|
@@ -636,6 +637,61 @@ static_assert(ABSL_INTERNAL_HAS_CONSTEXPR_CLZ, "clz should be constexpr");
|
636 | 637 | static_assert(ABSL_INTERNAL_HAS_CONSTEXPR_CTZ, "ctz should be constexpr");
|
637 | 638 | #endif
|
638 | 639 |
|
| 640 | +TEST(Endian, Comparison) { |
| 641 | +#if defined(ABSL_IS_LITTLE_ENDIAN) |
| 642 | + static_assert(absl::endian::native == absl::endian::little); |
| 643 | + static_assert(absl::endian::native != absl::endian::big); |
| 644 | +#endif |
| 645 | +#if defined(ABSL_IS_BIG_ENDIAN) |
| 646 | + static_assert(absl::endian::native != absl::endian::little); |
| 647 | + static_assert(absl::endian::native == absl::endian::big); |
| 648 | +#endif |
| 649 | +} |
| 650 | + |
| 651 | +TEST(Byteswap, Constexpr) { |
| 652 | + static_assert(absl::byteswap<int8_t>(0x12) == 0x12); |
| 653 | + static_assert(absl::byteswap<int16_t>(0x1234) == 0x3412); |
| 654 | + static_assert(absl::byteswap<int32_t>(0x12345678) == 0x78563412); |
| 655 | + static_assert(absl::byteswap<int64_t>(0x123456789abcdef0) == |
| 656 | + static_cast<int64_t>(0xf0debc9a78563412)); |
| 657 | + static_assert(absl::byteswap<uint8_t>(0x21) == 0x21); |
| 658 | + static_assert(absl::byteswap<uint16_t>(0x4321) == 0x2143); |
| 659 | + static_assert(absl::byteswap<uint32_t>(0x87654321) == 0x21436587); |
| 660 | + static_assert(absl::byteswap<uint64_t>(0xfedcba9876543210) == |
| 661 | + static_cast<uint64_t>(0x1032547698badcfe)); |
| 662 | + static_assert(absl::byteswap<int32_t>(static_cast<int32_t>(0xdeadbeef)) == |
| 663 | + static_cast<int32_t>(0xefbeadde)); |
| 664 | +} |
| 665 | + |
| 666 | +TEST(Byteswap, NotConstexpr) { |
| 667 | + int8_t a = 0x12; |
| 668 | + int16_t b = 0x1234; |
| 669 | + int32_t c = 0x12345678; |
| 670 | + int64_t d = 0x123456789abcdef0; |
| 671 | + uint8_t e = 0x21; |
| 672 | + uint16_t f = 0x4321; |
| 673 | + uint32_t g = 0x87654321; |
| 674 | + uint64_t h = 0xfedcba9876543210; |
| 675 | + EXPECT_EQ(absl::byteswap<int8_t>(a), 0x12); |
| 676 | + EXPECT_EQ(absl::byteswap<int16_t>(b), 0x3412); |
| 677 | + EXPECT_EQ(absl::byteswap(c), 0x78563412); |
| 678 | + EXPECT_EQ(absl::byteswap(d), 0xf0debc9a78563412); |
| 679 | + EXPECT_EQ(absl::byteswap<uint8_t>(e), 0x21); |
| 680 | + EXPECT_EQ(absl::byteswap<uint16_t>(f), 0x2143); |
| 681 | + EXPECT_EQ(absl::byteswap(g), 0x21436587); |
| 682 | + EXPECT_EQ(absl::byteswap(h), 0x1032547698badcfe); |
| 683 | + EXPECT_EQ(absl::byteswap(absl::byteswap<int8_t>(a)), a); |
| 684 | + EXPECT_EQ(absl::byteswap(absl::byteswap<int16_t>(b)), b); |
| 685 | + EXPECT_EQ(absl::byteswap(absl::byteswap(c)), c); |
| 686 | + EXPECT_EQ(absl::byteswap(absl::byteswap(d)), d); |
| 687 | + EXPECT_EQ(absl::byteswap(absl::byteswap<uint8_t>(e)), e); |
| 688 | + EXPECT_EQ(absl::byteswap(absl::byteswap<uint16_t>(f)), f); |
| 689 | + EXPECT_EQ(absl::byteswap(absl::byteswap(g)), g); |
| 690 | + EXPECT_EQ(absl::byteswap(absl::byteswap(h)), h); |
| 691 | + EXPECT_EQ(absl::byteswap<uint32_t>(0xdeadbeef), 0xefbeadde); |
| 692 | + EXPECT_EQ(absl::byteswap<const uint32_t>(0xdeadbeef), 0xefbeadde); |
| 693 | +} |
| 694 | + |
639 | 695 | } // namespace
|
640 | 696 | ABSL_NAMESPACE_END
|
641 | 697 | } // namespace absl
|
0 commit comments