| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- //
- // maybe_null.t.h
- // pointers
- //
- // Created by Sam Jaffe on 12/2/16.
- //
- // Define DEBUG in order to obtain certain checks...
- #ifndef DEBUG
- #define DEBUG
- #endif
- #include "pointers/maybe_null.hpp"
- #include <memory>
- #include <gmock/gmock.h>
- #include "test_stubs.h"
- using namespace pointers;
- TEST(MaybeNullPtrTest, NullPtrEvaluatesAsFalse) {
- maybe_null<std::shared_ptr<int>> mn{nullptr};
- EXPECT_FALSE(mn);
- }
- TEST(MaybeNullPtrTest, ValidPtrEvaluatesAsTrue) {
- maybe_null<std::shared_ptr<int>> mn{std::make_shared<int>(0)};
- EXPECT_TRUE(mn);
- }
- TEST(MaybeNullPtrTest, DereferencingNullPtrThrows) {
- maybe_null<std::shared_ptr<int>> mn{nullptr};
- EXPECT_THROW(*mn, unchecked_pointer_exception);
- }
- TEST(MaybeNullPtrTest, ContainsInnerPtrForEquality) {
- std::shared_ptr<int> i{new int};
- maybe_null<std::shared_ptr<int>> n{i};
- EXPECT_TRUE(n);
- EXPECT_THAT(n.get(), i.get());
- EXPECT_THAT(*n, *i);
- }
- TEST(MaybeNullPtrTest, UpcastedPointerStillEqual) {
- struct base {};
- struct derived : public base {};
- derived d;
- maybe_null<derived *> m{&d};
- maybe_null<base *> b = m;
- EXPECT_THAT(b.get(), m.get());
- }
- TEST(MaybeNullPtrTest, CanModifyInnerValue) {
- std::shared_ptr<int> i{new int{5}};
- maybe_null<std::shared_ptr<int>> n{i};
- EXPECT_TRUE(n);
- EXPECT_THAT(*n, 5);
- *n = 4;
- EXPECT_TRUE(n);
- EXPECT_THAT(*i, 4);
- }
- TEST(MaybeNullPtrTest, DoesNotDeleteRawPtr) {
- bool has_delete{false};
- destructor_sentinal * test_struct = new destructor_sentinal{has_delete};
- maybe_null<destructor_sentinal *>{test_struct};
- EXPECT_FALSE(has_delete);
- delete test_struct;
- EXPECT_TRUE(has_delete);
- }
|