void TestObjectsFlushRemovesStackPointers(void) { CFileUtil cFileUtil; Ptr<CTestDoubleNamedString> pDouble; Ptr<CRoot> pRoot; cFileUtil.RemoveDir("Output"); cFileUtil.MakeDir("Output/ClearPointers"); ObjectsInit("Output/ClearPointers"); SetupObjectsConstructors(); pRoot = ORoot(); gcObjects.Flush(TRUE, TRUE); AssertLongLongInt(2, gcObjects.NumDatabaseObjects()); AssertNull(&pRoot); pDouble = ONMalloc(CTestDoubleNamedString, "Double")->Init(); AssertString("CTestDoubleNamedString", pDouble.ClassName()); pRoot = ORoot(); AssertString("CRoot", pRoot.ClassName()); ObjectsKill(); }
void TestObjectsFlushClearGetByOid(void) { CFileUtil cFileUtil; CPointer pObject; Ptr<CTestDoubleNamedString> pDouble; Ptr<CRoot> pRoot; cFileUtil.RemoveDir("Output"); cFileUtil.MakeDir("Output/Dehollowfication"); ObjectsInit("Output/Dehollowfication"); SetupObjectsConstructors(); pRoot = ORoot(); pDouble = ONMalloc(CTestDoubleNamedString, "Double")->Init(); pRoot->Add(pDouble); AssertLongLongInt(0, gcObjects.NumDatabaseObjects()); pObject = gcObjects.Get(3); AssertNotNull(pObject.Object()); AssertString("CTestDoubleNamedString", pObject.ClassName()); gcObjects.Flush(TRUE, TRUE); AssertLongLongInt(3, gcObjects.NumDatabaseObjects()); pObject = gcObjects.Get(3); AssertNotNull(pObject.Object()); AssertString("CTestDoubleNamedString", pObject.ClassName()); pRoot = ORoot(); AssertString("CRoot", pRoot.ClassName()); pObject = gcObjects.Get("Double"); AssertNotNull(pObject.Object()); AssertString("CTestDoubleNamedString", pObject.ClassName()); AssertString("CRoot", pRoot.ClassName()); ObjectsKill(); }
void TestDehollowficationFromChunkFileSource(void) { CFileUtil cFileUtil; cFileUtil.RemoveDir("Output\\Dehollowfication\\ChunkFile"); MemoryInit(); ObjectsInit("Output\\Dehollowfication\\Temp"); WriteDehollowficationChunkedFile(); ObjectsKill(); MemoryKill(); cFileUtil.RemoveDir("Output\\Dehollowfication\\Temp"); CObjectSourceChunked* pcObjectSourceChunked; CDiskFile* pcDiskFile = DiskFile("Output\\Dehollowfication\\ChunkFile\\Double.DRG"); MemoryInit(); ObjectsInit("Output\\Dehollowfication\\Temp"); SetupDehollowficationConstructors(); pcObjectSourceChunked = (CObjectSourceChunked*)gcObjects.AddSource<CObjectConverterNative>(pcDiskFile, "Double"); //Note the .DRG is intentionally dropped. AssertNotNull(pcObjectSourceChunked); AssertInt(4, pcObjectSourceChunked->NumNames()); AssertString("Diamond End", pcObjectSourceChunked->GetName(0)); AssertString("Double Start", pcObjectSourceChunked->GetName(1)); AssertString("NamedString 1", pcObjectSourceChunked->GetName(2)); AssertString("NamedString 2", pcObjectSourceChunked->GetName(3)); Ptr<CTestDoubleNamedString> pStart; pStart = gcObjects.Get("Double Start"); AssertTrue(pStart.IsNotNull()); AssertString("CTestDoubleNamedString", pStart.ClassName()); AssertTrue(pStart->mpSplit1.IsHollow()); AssertTrue(pStart->mpSplit2.IsHollow()); AssertFalse(pStart->mszString.IsHollow()); pStart->mpSplit1->ClassName(); AssertFalse(pStart->mpSplit1.IsHollow()); AssertString("CTestNamedString", pStart->mpSplit1.ClassName()); ObjectsKill(); MemoryKill(); }
void TestEmbeddedObjectPointTo(void) { BOOL bResult; CFileUtil cFileUtil; OIndex oiComplex; char* szClassName; cFileUtil.RemoveDir("Output/EmbeddedObject"); MemoryInit(); ObjectsInit("Output/EmbeddedObject/"); SetupEmbeddedObjectConstructors(); Ptr<CRoot> pRoot = ORoot(); Ptr<CEmbeddedComplex> pComplex = OMalloc(CEmbeddedComplex)->Init(); oiComplex = pComplex->GetOI(); Ptr<CEmbeddedContainer> pContainer = &pComplex->mcContainer; pRoot->Add(pContainer); bResult = gcObjects.Flush(TRUE, TRUE); AssertTrue(bResult); ObjectsKill(); MemoryKill(); AssertNull(&pContainer); MemoryInit(); ObjectsInit("Output/EmbeddedObject/"); SetupEmbeddedObjectConstructors(); pRoot = gcObjects.GetRoot(); AssertTrue(pRoot.IsNotNull()); pContainer = pRoot->Get(0); AssertTrue(pContainer.IsHollow()); AssertInt(0, pContainer.Object()->GetNumEmbedded()); AssertLongLongInt(-1, pContainer.GetIndex()); szClassName = pContainer->ClassName(); AssertString("CEmbeddedContainer", szClassName); pComplex = pContainer->GetEmbeddingContainer(); //Kinda feels like this test just stopped... ObjectsKill(); MemoryKill(); }
void TestDehollowficationFromDatabase(void) { CIndexedConfig cConfig; CFileUtil cFileUtil; cConfig.Manual("Output\\Dehollowfication\\Database", FALSE, TRUE, FALSE, 1 MB); cFileUtil.RemoveDir("Output\\Dehollowfication\\Database"); MemoryInit(); ObjectsInit(&cConfig); SetupDehollowficationScene(); gcObjects.Flush(FALSE, FALSE); ObjectsKill(); MemoryKill(); MemoryInit(); ObjectsInit(&cConfig); SetupDehollowficationConstructors(); AssertLongLongInt(0, gcUnknowns.NumElements()); AssertInt(0, gcObjects.GetStackPointers()->UsedPointers()); AssertLongLongInt(0, gcObjects.NumMemoryIndexes()); AssertLongLongInt(0, gcObjects.NumMemoryNames()); AssertLongLongInt(11, gcObjects.NumDatabaseObjects()); AssertLongLongInt(0, gcObjects.NumDatabaseObjectsCached()); AssertLongLongInt(6, gcObjects.NumDatabaseNames()); Ptr<CRoot> pRoot = ORoot(); AssertTrue(pRoot->IsSetHollow()); AssertLongLongInt(2, gcUnknowns.NumElements()); AssertLongLongInt(2, gcObjects.NumMemoryIndexes()); AssertLongLongInt(1, gcObjects.NumMemoryNames()); AssertLongLongInt(1, gcObjects.NumDatabaseObjectsCached()); AssertLongLongInt(6, gcObjects.NumDatabaseNames()); AssertInt(1, gcObjects.GetStackPointers()->UsedPointers()); Ptr<CTestDoubleNamedString> pTest = pRoot->Get<CTestDoubleNamedString>("Double Start"); //This will cause pRoot.Set to be dehollowed. AssertInt(2, gcObjects.GetStackPointers()->UsedPointers()); AssertFalse(pRoot->IsSetHollow()); AssertTrue(pTest.IsNotNull()); AssertTrue(pTest.IsHollow()); AssertLongLongInt(10, pTest.GetIndex()); AssertLongLongInt(4, gcUnknowns.NumElements()); AssertLongLongInt(4, gcObjects.NumMemoryIndexes()); AssertString("12345", pTest->mpSplit1->mszEmbedded.Text()); //This will cause pTest and pTest.Split1 to be dehollowed. AssertLongLongInt(9, gcUnknowns.NumElements()); AssertLongLongInt(9, gcObjects.NumMemoryIndexes()); AssertFalse(pTest.IsHollow()); AssertLongLongInt(10, pTest.GetIndex()); AssertInt(2, gcObjects.GetStackPointers()->UsedPointers()); AssertTrue(pTest->mpSplit1->mpAnother.IsHollow()); AssertTrue(pTest->mpSplit2.IsHollow()); AssertTrue(pTest->mpSplit1->mszString.IsHollow()); AssertString("Diamond End", pTest->mpSplit1->mpAnother.GetName()); AssertString("6789", pTest->mpSplit1->mszString->Text()); AssertFalse(pTest->mpSplit1->mszString.IsHollow()); AssertInt(2, gcObjects.GetStackPointers()->UsedPointers()); Ptr<CTestNamedString> pDiamond = pTest->mpSplit1->mpAnother; AssertLongLongInt(9, gcUnknowns.NumElements()); AssertLongLongInt(9, gcObjects.NumMemoryIndexes()); AssertInt(3, gcObjects.GetStackPointers()->UsedPointers()); AssertTrue(pTest->mpSplit1->mpAnother.IsHollow()); AssertTrue(pDiamond.IsHollow()); pDiamond->ClassName(); //This will cause pDiamond to be de-hollowed AssertFalse(pDiamond.IsHollow()); AssertFalse(pTest->mpSplit1->mpAnother.IsHollow()); AssertLongLongInt(10, gcUnknowns.NumElements()); AssertLongLongInt(10, gcObjects.NumMemoryIndexes()); AssertLongLongInt(6, gcObjects.NumMemoryNames()); AssertLongLongInt(3, gcObjects.NumDatabaseObjectsCached()); AssertLongLongInt(6, gcObjects.NumDatabaseNames()); AssertTrue(pTest->mpSplit2.IsHollow()); pTest->mpSplit2->ClassSize(); AssertFalse(pTest->mpSplit2.IsHollow()); AssertFalse(pTest->mpSplit2->mpAnother.IsHollow()); AssertPointer(pDiamond.Object(), pTest->mpSplit2->mpAnother.Object()); AssertLongLongInt(11, gcObjects.NumMemoryIndexes()); AssertLongLongInt(6, gcObjects.NumMemoryNames()); AssertLongLongInt(2, gcObjects.NumDatabaseObjectsCached()); AssertLongLongInt(6, gcObjects.NumDatabaseNames()); Ptr<CTestNamedString> pRandom = pRoot->Get<CTestNamedString>("NamedString 3"); AssertTrue(pRandom.IsNotNull()); AssertTrue(pRandom.IsHollow()); AssertTrue(pRandom->mszString.IsHollow()); AssertFalse(pRandom.IsHollow()); AssertTrue(pTest->mpSplit2->mszString.IsHollow()); AssertString("World", pRandom->mszString->Text()); AssertFalse(pRandom->mszString.IsHollow()); AssertFalse(pTest->mpSplit2->mszString.IsHollow()); AssertPointer(pRandom->mszString.Object(), pTest->mpSplit2->mszString.Object()); AssertLongLongInt(11, gcObjects.NumDatabaseObjects()); ObjectsKill(); AssertTrue(pRoot.IsNull()); AssertTrue(pTest.IsNull()); AssertTrue(pDiamond.IsNull()); AssertTrue(pRandom.IsNull()); pDiamond.UnsafeClearObject(); MemoryKill(); }
void TestEmbeddedObjectContainerDehollowfication(void) { BOOL bResult; CFileUtil cFileUtil; char* szClassName; OIndex oiComplex; cFileUtil.RemoveDir("Output/EmbeddedObject"); MemoryInit(); ObjectsInit("Output/EmbeddedObject/"); SetupEmbeddedObjectConstructors(); Ptr<CRoot> pRoot = ORoot(); Ptr<CEmbeddedComplex> pComplex = OMalloc(CEmbeddedComplex)->Init(); oiComplex = pComplex->GetOI(); pRoot->Add(pComplex); bResult = gcObjects.Flush(TRUE, TRUE); AssertTrue(bResult); ObjectsKill(); MemoryKill(); AssertInt(176, sizeof(CEmbeddedTest)); AssertInt(544, sizeof(CEmbeddedContainer)); AssertInt(1032, sizeof(CEmbeddedComplex)); MemoryInit(); ObjectsInit("Output/EmbeddedObject/"); SetupEmbeddedObjectConstructors(); pRoot = gcObjects.GetRoot(); AssertTrue(pRoot.IsNotNull()); pComplex = pRoot->Get(0); AssertTrue(pComplex.IsHollow()); szClassName = pComplex->ClassName(); AssertString("CEmbeddedComplex", szClassName); AssertLongLongInt(oiComplex, pComplex.GetIndex()); AssertInt(1, pComplex->mai[0]); AssertInt(2, pComplex->mai[1]); AssertLongLongInt(INVALID_O_INDEX, pComplex->mcSimple.GetOI()); AssertInt(85, pComplex->mcSimple.miAmANumber); AssertFloat(58.0f, pComplex->mcSimple.mfSoAmI, 0); AssertLongLongInt(INVALID_O_INDEX, pComplex->mcContainer.GetOI()); AssertInt(73, pComplex->mcContainer.mi); AssertFloat(666.0f, pComplex->mcContainer.mf, 0); AssertString("And", pComplex->mcContainer.msz); AssertLongLongInt(INVALID_O_INDEX, pComplex->mcContainer.mcOne.GetOI()); AssertInt(85, pComplex->mcContainer.mcOne.miAmANumber); AssertFloat(58.0f, pComplex->mcContainer.mcOne.mfSoAmI, 0); AssertLongLongInt(INVALID_O_INDEX, pComplex->mcContainer.mcTwo.GetOI()); AssertInt(85, pComplex->mcContainer.mcTwo.miAmANumber); AssertFloat(58.0f, pComplex->mcContainer.mcTwo.mfSoAmI, 0); AssertLongLongInt(3, gcObjects.NumMemoryIndexes()); ObjectsKill(); MemoryKill(); }