void TestKillSelfPointer1(void) { ObjectsInit(); Ptr<CRoot> pRoot; Ptr<CTestNamedObject> pObject; BOOL bResult; CBaseObject* pvObject; pRoot = ORoot(); pObject = OMalloc(CTestNamedObject); pObject->Init(1); pObject->mpNamedTest1 = pObject; pRoot->Add(pObject); AssertInt(1, pRoot->NumObjects()); AssertLongLongInt(3, gcObjects.NumMemoryIndexes()); pvObject = pObject.BaseObject(); pObject = NULL; //pObject should be destroyed here and not cause a stack overflow. bResult = pRoot->Remove(pvObject); AssertTrue(bResult); AssertInt(0, pRoot->NumObjects()); AssertLongLongInt(2, gcObjects.NumMemoryIndexes()); ObjectsKill(); }
void TestObjectsObjectSave(void) { CFileUtil cFileUtil; Ptr<CTestDoubleNamedString> pDouble; BOOL bResult; CIndexedConfig cConfig; cFileUtil.RemoveDir("Output"); cFileUtil.MakeDir("Output/ObjectSave"); cConfig.OptimiseForStreaming("Output/ObjectSave"); cConfig.SetObjectCacheSize(128 MB); ObjectsInit(&cConfig); pDouble = SetupObjectsForDehollowfication(); AssertLongLongInt(0, gcObjects.NumDatabaseObjects()); AssertLongLongInt(9, gcObjects.NumMemoryIndexes()); AssertLongLongInt(6, gcObjects.NumMemoryNames()); AssertTrue(pDouble.IsDirty()); bResult = gcObjects.Save(pDouble.BaseObject()); AssertTrue(bResult); AssertTrue(pDouble.IsDirty()); //This object is *still* dirty after save. Almost no objects will answer true to IsDirty. AssertLongLongInt(1, gcObjects.NumDatabaseObjects()); AssertLongLongInt(9, gcObjects.NumMemoryIndexes()); AssertLongLongInt(6, gcObjects.NumMemoryNames()); AssertInt(106, pDouble->SerialisedSize()); AssertLongLongInt(1, gcObjects.NumDatabaseObjectsCached(106)); AssertLongLongInt(0, gcObjects.NumDatabaseObjectsCached(118)); bResult = gcObjects.Save(pDouble.BaseObject()); AssertTrue(bResult); AssertLongLongInt(1, gcObjects.NumDatabaseObjects()); AssertInt(106, pDouble->SerialisedSize()); AssertLongLongInt(1, gcObjects.NumDatabaseObjectsCached(106)); AssertLongLongInt(0, gcObjects.NumDatabaseObjectsCached(118)); pDouble->mszString = OMalloc(CString); pDouble->mszString->Init("A String"); bResult = gcObjects.Save(pDouble.BaseObject()); AssertTrue(bResult); AssertLongLongInt(1, gcObjects.NumDatabaseObjects()); AssertInt(118, pDouble->SerialisedSize()); AssertLongLongInt(0, gcObjects.NumDatabaseObjectsCached(106)); AssertLongLongInt(1, gcObjects.NumDatabaseObjectsCached(118)); pDouble->mszString = OMalloc(CString); pDouble->mszString->Init("Different Object"); AssertInt(118, pDouble->SerialisedSize()); bResult = gcObjects.Save(pDouble.BaseObject()); AssertTrue(bResult); AssertLongLongInt(1, gcObjects.NumDatabaseObjects()); AssertInt(118, pDouble->SerialisedSize()); AssertLongLongInt(0, gcObjects.NumDatabaseObjectsCached(106)); AssertLongLongInt(1, gcObjects.NumDatabaseObjectsCached(118)); ObjectsKill(); }