maybe_null_test.cxx 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. //
  2. // maybe_null.t.h
  3. // pointers
  4. //
  5. // Created by Sam Jaffe on 12/2/16.
  6. //
  7. // Define DEBUG in order to obtain certain checks...
  8. #ifndef DEBUG
  9. #define DEBUG
  10. #endif
  11. #include "pointers/maybe_null.hpp"
  12. #include <memory>
  13. #include <gmock/gmock.h>
  14. #include "test_stubs.h"
  15. using namespace pointers;
  16. TEST(MaybeNullPtrTest, NullPtrEvaluatesAsFalse) {
  17. maybe_null<std::shared_ptr<int>> mn{nullptr};
  18. EXPECT_FALSE(mn);
  19. }
  20. TEST(MaybeNullPtrTest, ValidPtrEvaluatesAsTrue) {
  21. maybe_null<std::shared_ptr<int>> mn{std::make_shared<int>(0)};
  22. EXPECT_TRUE(mn);
  23. }
  24. TEST(MaybeNullPtrTest, DereferencingNullPtrThrows) {
  25. maybe_null<std::shared_ptr<int>> mn{nullptr};
  26. EXPECT_THROW(*mn, unchecked_pointer_exception);
  27. }
  28. TEST(MaybeNullPtrTest, ContainsInnerPtrForEquality) {
  29. std::shared_ptr<int> i{new int};
  30. maybe_null<std::shared_ptr<int>> n{i};
  31. EXPECT_TRUE(n);
  32. EXPECT_THAT(n.get(), i.get());
  33. EXPECT_THAT(*n, *i);
  34. }
  35. TEST(MaybeNullPtrTest, UpcastedPointerStillEqual) {
  36. struct base {};
  37. struct derived : public base {};
  38. derived d;
  39. maybe_null<derived *> m{&d};
  40. maybe_null<base *> b = m;
  41. EXPECT_THAT(b.get(), m.get());
  42. }
  43. TEST(MaybeNullPtrTest, CanModifyInnerValue) {
  44. std::shared_ptr<int> i{new int{5}};
  45. maybe_null<std::shared_ptr<int>> n{i};
  46. EXPECT_TRUE(n);
  47. EXPECT_THAT(*n, 5);
  48. *n = 4;
  49. EXPECT_TRUE(n);
  50. EXPECT_THAT(*i, 4);
  51. }
  52. TEST(MaybeNullPtrTest, DoesNotDeleteRawPtr) {
  53. bool has_delete{false};
  54. destructor_sentinal * test_struct = new destructor_sentinal{has_delete};
  55. maybe_null<destructor_sentinal *>{test_struct};
  56. EXPECT_FALSE(has_delete);
  57. delete test_struct;
  58. EXPECT_TRUE(has_delete);
  59. }