/* TypedAllocationManager(Test) - check interface to pooled allocations Copyright (C) 2009, Hermann Vosseler   **Lumiera** is free software; you can redistribute it and/or modify it   under the terms of the GNU General Public License as published by the   Free Software Foundation; either version 2 of the License, or (at your   option) any later version. See the file COPYING for further details. * *****************************************************************/ /** @file typed-allocation-manager-test.cpp ** unit test \ref TypedAllocationManager_test */ #include "lib/test/run.hpp" #include "lib/typed-allocation-manager.hpp" #include "lib/util.hpp" #include namespace lib { namespace test{ using util::isSameObject; using std::shared_ptr; namespace { // test data and helpers... long checksum_ = 0; /** * Yet-another ctor/dtor-tracking test dummy object.... */ template class DummyObj { char crap_[siz]; public: DummyObj() { REQUIRE (siz); for (uint i=0; i> PD1; typedef shared_ptr> PD22; CHECK (sizeof(DummyObj<1>) != sizeof(DummyObj<22>)); { PD1 pD11 = allocator.create >(); PD1 pD12 = allocator.create >(); PD22 pD21 = allocator.create>(); PD22 pD22 = allocator.create>(); CHECK (pD11); CHECK (pD12); CHECK (pD21); CHECK (pD22); CHECK (1 == pD11.use_count()); CHECK (1 == pD12.use_count()); CHECK (1 == pD21.use_count()); CHECK (1 == pD22.use_count()); CHECK (!isSameObject (*pD11, *pD12)); CHECK (!isSameObject (*pD11, *pD21)); CHECK (!isSameObject (*pD11, *pD22)); CHECK (!isSameObject (*pD12, *pD21)); CHECK (!isSameObject (*pD12, *pD22)); CHECK (!isSameObject (*pD21, *pD22)); PD22 pD2x = pD21; CHECK (pD2x); CHECK (2 == pD21.use_count()); CHECK (2 == pD2x.use_count()); CHECK (isSameObject (*pD21, *pD2x)); CHECK (2 == allocator.numSlots >()); CHECK (2 == allocator.numSlots>()); CHECK (0 == allocator.numSlots()); // query just some unrelated type... } CHECK (0 == allocator.numSlots >()); CHECK (0 == allocator.numSlots>()); CHECK (0 == checksum_); } }; /** Register this test class... */ LAUNCHER (TypedAllocationManager_test, "unit common"); }} // namespace lib::test