RefTest

Test

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
#include <cassert>

#include <cppunit/extensions/HelperMacros.h>

//

#include "DataFormats/GeometrySurface/interface/ReferenceCounted.h"

namespace testreferencecounted {

  class Test : public CppUnit::TestFixture {
    CPPUNIT_TEST_SUITE(Test);
    CPPUNIT_TEST(deleteTest);
    CPPUNIT_TEST(multiRefTest);
    CPPUNIT_TEST(assignmentTest);
    CPPUNIT_TEST(modifyTest);
    CPPUNIT_TEST(intrusiveTest);
    CPPUNIT_TEST_SUITE_END();

  public:
    void setUp() {}
    void tearDown() {}
    void deleteTest();
    void multiRefTest();
    void assignmentTest();
    void modifyTest();
    void intrusiveTest();
  };

  static unsigned int s_construct = 0;

  struct RefTest : public ReferenceCounted {
    RefTest() { s_construct++; }
    ~RefTest() { s_construct--; }
  };

  typedef ReferenceCountingPointer<RefTest> RefPtr;
}  // namespace testreferencecounted
///registration of the test so that the runner can find it
CPPUNIT_TEST_SUITE_REGISTRATION(testreferencecounted::Test);

namespace testreferencecounted {
  void Test::deleteTest() {
    { RefPtr pointer(new RefTest); }
    assert(0 == s_construct);
  }

  void Test::multiRefTest() {
    {
      RefPtr pointer(new RefTest);
      { RefPtr pointer2(pointer); }
    }
    assert(0 == s_construct);
  }

  void Test::assignmentTest() {
    {
      RefPtr pointer(new RefTest);
      {
        RefPtr pointer2;
        pointer2 = pointer;
      }
    }
    assert(0 == s_construct);
  }

  void Test::modifyTest() {
    {
      RefPtr pointer(new RefTest);
      {
        RefPtr pointer2;
        pointer2 = pointer;
        *pointer = RefTest();
      }
    }
    assert(0 == s_construct);
  }

  void Test::intrusiveTest() {
    {
      RefTest* ptr = new RefTest;
      RefPtr pointer(ptr);
      { RefPtr pointer2(ptr); }
    }
    assert(0 == s_construct);
  }
}  // namespace testreferencecounted

///registration of the test so that the runner can find it
CPPUNIT_TEST_SUITE_REGISTRATION(testreferencecounted::Test);

#include "Utilities/Testing/interface/CppUnit_testdriver.icpp"