diff options
Diffstat (limited to 'src/mongo/base/encoded_value_storage_test.cpp')
-rw-r--r-- | src/mongo/base/encoded_value_storage_test.cpp | 165 |
1 files changed, 82 insertions, 83 deletions
diff --git a/src/mongo/base/encoded_value_storage_test.cpp b/src/mongo/base/encoded_value_storage_test.cpp index 07f73c532b9..682e11a5d35 100644 --- a/src/mongo/base/encoded_value_storage_test.cpp +++ b/src/mongo/base/encoded_value_storage_test.cpp @@ -40,107 +40,106 @@ namespace mongo { namespace EncodedValueStorageTest { #pragma pack(1) - struct Layout { - uint32_t native; - uint32_t le; - uint32_t be; - }; +struct Layout { + uint32_t native; + uint32_t le; + uint32_t be; +}; #pragma pack() - class ConstView { - public: - typedef ConstDataView view_type; +class ConstView { +public: + typedef ConstDataView view_type; - ConstView(const char* data) : _data(data) { } + ConstView(const char* data) : _data(data) {} - const char* view2ptr() const { - return data().view(); - } - - uint32_t getNative() { - return data().read<uint32_t>(offsetof(Layout, native)); - } + const char* view2ptr() const { + return data().view(); + } - uint32_t getLE() { - return data().read<LittleEndian<uint32_t>>(offsetof(Layout, le)); - } + uint32_t getNative() { + return data().read<uint32_t>(offsetof(Layout, native)); + } - uint32_t getBE() { - return data().read<BigEndian<uint32_t>>(offsetof(Layout, be)); - } + uint32_t getLE() { + return data().read<LittleEndian<uint32_t>>(offsetof(Layout, le)); + } - protected: - const view_type& data() const { - return _data; - } + uint32_t getBE() { + return data().read<BigEndian<uint32_t>>(offsetof(Layout, be)); + } - private: - view_type _data; - }; +protected: + const view_type& data() const { + return _data; + } - class View : public ConstView { - public: - typedef DataView view_type; +private: + view_type _data; +}; - View(char* data) : ConstView(data) {} +class View : public ConstView { +public: + typedef DataView view_type; - using ConstView::view2ptr; - char* view2ptr() { - return data().view(); - } + View(char* data) : ConstView(data) {} - void setNative(uint32_t value) { - data().write(value, offsetof(Layout, native)); - } + using ConstView::view2ptr; + char* view2ptr() { + return data().view(); + } - void setLE(uint32_t value) { - data().write(tagLittleEndian(value), offsetof(Layout, le)); - } + void setNative(uint32_t value) { + data().write(value, offsetof(Layout, native)); + } - void setBE(uint32_t value) { - data().write(tagBigEndian(value), offsetof(Layout, be)); - } + void setLE(uint32_t value) { + data().write(tagLittleEndian(value), offsetof(Layout, le)); + } - private: - view_type data() const { - return const_cast<char *>(ConstView::view2ptr()); - } - }; + void setBE(uint32_t value) { + data().write(tagBigEndian(value), offsetof(Layout, be)); + } - class Value : public EncodedValueStorage<Layout, ConstView, View> { - public: - Value() { - BOOST_STATIC_ASSERT(sizeof(Value) == sizeof(Layout)); - } +private: + view_type data() const { + return const_cast<char*>(ConstView::view2ptr()); + } +}; - Value(ZeroInitTag_t zit) : EncodedValueStorage<Layout, ConstView, View>(zit) {} - }; +class Value : public EncodedValueStorage<Layout, ConstView, View> { +public: + Value() { + BOOST_STATIC_ASSERT(sizeof(Value) == sizeof(Layout)); + } + Value(ZeroInitTag_t zit) : EncodedValueStorage<Layout, ConstView, View>(zit) {} +}; } - TEST(EncodedValueStorage, EncodedValueStorage) { - EncodedValueStorageTest::Value raw; - EncodedValueStorageTest::Value zerod(kZeroInitTag); - char buf[sizeof(EncodedValueStorageTest::Layout)] = { 0 }; - - ASSERT_EQUALS(raw.view().view2ptr(), raw.constView().view2ptr()); - - // ensure zeroing with the init tag works - ASSERT_EQUALS(std::memcmp(zerod.view().view2ptr(), buf, sizeof(buf)), 0); - - // see if value assignment and view() works - zerod.view().setNative(1234); - EncodedValueStorageTest::View(buf).setNative(1234); - raw = zerod; - ASSERT_EQUALS(std::memcmp(raw.view().view2ptr(), buf, sizeof(buf)), 0); - - // see if view() and constView() work appropriately - raw.view().setNative(1); - raw.view().setLE(2); - raw.view().setBE(3); - ASSERT_EQUALS(static_cast<uint32_t>(1), raw.constView().getNative()); - ASSERT_EQUALS(static_cast<uint32_t>(2), raw.constView().getLE()); - ASSERT_EQUALS(static_cast<uint32_t>(3), raw.constView().getBE()); - } +TEST(EncodedValueStorage, EncodedValueStorage) { + EncodedValueStorageTest::Value raw; + EncodedValueStorageTest::Value zerod(kZeroInitTag); + char buf[sizeof(EncodedValueStorageTest::Layout)] = {0}; + + ASSERT_EQUALS(raw.view().view2ptr(), raw.constView().view2ptr()); + + // ensure zeroing with the init tag works + ASSERT_EQUALS(std::memcmp(zerod.view().view2ptr(), buf, sizeof(buf)), 0); + + // see if value assignment and view() works + zerod.view().setNative(1234); + EncodedValueStorageTest::View(buf).setNative(1234); + raw = zerod; + ASSERT_EQUALS(std::memcmp(raw.view().view2ptr(), buf, sizeof(buf)), 0); + + // see if view() and constView() work appropriately + raw.view().setNative(1); + raw.view().setLE(2); + raw.view().setBE(3); + ASSERT_EQUALS(static_cast<uint32_t>(1), raw.constView().getNative()); + ASSERT_EQUALS(static_cast<uint32_t>(2), raw.constView().getLE()); + ASSERT_EQUALS(static_cast<uint32_t>(3), raw.constView().getBE()); +} -} // namespace mongo +} // namespace mongo |