void TestFileUtilTouchDirectory(void) { CFileUtil cFileUtil; CChars szDirectory; CChars szFileName; cFileUtil.RemoveDir("file_util"); szDirectory.Init("file_util" _FS_ "directory" _FS_ "make" _FS_ "test"); cFileUtil.FullPath(&szDirectory); szFileName.Init(szDirectory); cFileUtil.AppendToPath(&szFileName, "Warthog.PIG"); AssertTrue(cFileUtil.TouchDir(szFileName.Text())); AssertTrue(cFileUtil.Touch(szFileName.Text())); szDirectory.Kill(); szFileName.Kill(); cFileUtil.RemoveDir("file_util"); AssertFalse(cFileUtil.TouchDir("C:\\Warthog.PIG")); AssertFalse(cFileUtil.TouchDir("\\Warthog.PIG")); szDirectory.Init(); cFileUtil.CurrentDirectory(&szDirectory); szDirectory.Append("War-pig.hog"); AssertFalse(cFileUtil.TouchDir(szDirectory.Text())); szDirectory.Kill(); }
void TestDurableSetAdd(void) { CFileUtil cFileUtil; CDurableFileController cController; CDurableFile cDurableFile1; CDurableFile cDurableFile2; CDurableFile cDurableFile3; CDurableFile cDurableFile4; char szDirectory[] = "Durable2"; char szRewrite[] = "_Durable2"; CDurableFile* pcDurableFile; cFileUtil.RemoveDir(szDirectory); cFileUtil.MakeDir(szDirectory); cFileUtil.RemoveDir(szRewrite); cFileUtil.MakeDir(szRewrite); cController.Init(szDirectory, szRewrite); cDurableFile1.Init(&cController, "Durable" _FS_ "1.txt", "Durable" _FS_ "_1.txt"); cDurableFile2.Init(&cController, "Durable" _FS_ "2.txt", "Durable" _FS_ "_2.txt"); cDurableFile3.Init(&cController, "Durable" _FS_ "3.txt", "Durable" _FS_ "_3.txt"); cDurableFile4.Init(&cController, "Durable" _FS_ "4.txt", "Durable" _FS_ "_4.txt"); cController.Begin(); cController.AddFile(&cDurableFile1); AssertInt(1, cController.NumFiles()); pcDurableFile = cController.GetFile(0); AssertPointer(&cDurableFile1, pcDurableFile); cController.AddFile(&cDurableFile1); AssertInt(1, cController.NumFiles()); pcDurableFile = cController.GetFile(0); AssertPointer(&cDurableFile1, pcDurableFile); cController.AddFile(&cDurableFile2); AssertInt(2, cController.NumFiles()); cController.AddFile(&cDurableFile3); AssertInt(3, cController.NumFiles()); cController.AddFile(&cDurableFile4); AssertInt(4, cController.NumFiles()); cController.AddFile(&cDurableFile2); AssertInt(4, cController.NumFiles()); cController.AddFile(&cDurableFile3); AssertInt(4, cController.NumFiles()); cController.AddFile(&cDurableFile4); AssertInt(4, cController.NumFiles()); cController.End(); cDurableFile1.Kill(); cDurableFile2.Kill(); cDurableFile3.Kill(); cDurableFile4.Kill(); cController.Kill(); }
void TestIndexTreeWriterWrite(void) { char* pvData; char* pvKey; int iDataSize; BOOL bExists; int iKeyLength; CIndexTreeMemory cIndexTree; CMapStringString cMap; SMapIterator sMapIter; CIndexTreeWriter cWriter; CFileUtil cFileUtil; char szDirectory[] = "Output" _FS_ "IndexTreeMemoryWriter"; cMap.Init(3); cMap.Put("AA", "nutritious"); cMap.Put("AAA", "follow"); cMap.Put("AB", "lighten"); cMap.Put("BAAB", "ear"); cMap.Put("BB", "spotted"); cMap.Put("AAAAAAAAA", "hanging"); cMap.Put("ABBA", "mate"); cMap.Put("ABA", "blot"); cMap.Put("BCD", "smash"); cMap.Put("BBC", "cycle"); cMap.Put("BBB", "waggish"); cMap.Put("BBA", "debt"); AssertInt(12, cMap.NumElements()); cIndexTree.Init(); bExists = cMap.StartIteration(&sMapIter, (void**)&pvKey, (void**)&pvData); while (bExists) { iKeyLength = strlen((char*)pvKey); iDataSize = strlen((char*)pvData); cIndexTree.Put(pvKey, iKeyLength, pvData, (unsigned char)iDataSize); bExists = cMap.Iterate(&sMapIter, (void**)&pvKey, (void**)&pvData); } AssertInt(12, cIndexTree.NumElements()); cFileUtil.RemoveDir(szDirectory); cWriter.Write(&cIndexTree, szDirectory); cIndexTree.Kill(); cMap.Kill(); AssertTrue(cFileUtil.RemoveDir(szDirectory)); }
void TestObjectReaderSimple(void) { CFileUtil cFileUtil; cFileUtil.RemoveDir("Output"); cFileUtil.MakeDir("Output/ObjectReaderSimple"); BeginTests(); TestObjectReaderSimpleDeserialised(); TestStatistics(); cFileUtil.RemoveDir("Output"); }
void TestObjectWriterChunked(void) { CFileUtil cFileUtil; cFileUtil.RemoveDir("Output"); cFileUtil.MakeDir("Output/ObjectWriterChunked"); BeginTests(); TestObjectWriterChunkedWrite(); TestObjectWriterChunkedSerialised(); TestStatistics(); cFileUtil.RemoveDir("Output"); }
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 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 TestObjectsFlushClearGetByName(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()); AssertLongLongInt(0, gcObjects.NumDatabaseNames()); pObject = gcObjects.Get(3); AssertNotNull(pObject.Object()); AssertString("CTestDoubleNamedString", pObject.ClassName()); gcObjects.Flush(TRUE, TRUE); AssertLongLongInt(3, gcObjects.NumDatabaseObjects()); AssertLongLongInt(2, gcObjects.NumDatabaseNames()); pObject = gcObjects.Get("Double"); AssertNotNull(pObject.Object()); AssertString("CTestDoubleNamedString", pObject.ClassName()); ObjectsKill(); }
void TestObjectReaderChunked(void) { CFileUtil cFileUtil; cFileUtil.RemoveDir("Output"); cFileUtil.MakeDir("Output/ObjectReaderChunked"); ObjectsInit(); BeginTests(); TestObjectReaderChunkedDeserialised(); TestStatistics(); ObjectsKill(); cFileUtil.RemoveDir("Output"); }
void TestObjectGraphDeserialiser(void) { CFileUtil cFileUtil; cFileUtil.RemoveDir("Output"); BeginTests(); TestRemappingOfSimpleFilesOIs(); TestRemappingOfChunkedFilesOIs(); TestOverwritingOfExistingNamesFromChunkedFiles(); TestStatistics(); cFileUtil.RemoveDir("Output"); }
void TestPackFilesPackerSimple(void) { CFileUtil cFileUtil; CPackFilePacker cPacker; cFileUtil.RemoveDir("Output/Packer"); cFileUtil.MakeDir("Output/Packer"); cFileUtil.MakeDir("Output/Packer/Sounds"); cPacker.Pack("Output/Packer/Sounds/Cheese.PAK", "Input/Game/PAK/Cheese"); AssertFile("Game/Sounds/Cheese.PAK", "Output/Packer/Sounds/Cheese.PAK"); cPacker.Pack("Output/Packer/Sounds/Santa.PAK", "Input/Game/PAK/Santa"); AssertFile("Game/Sounds/Santa.PAK", "Output/Packer/Sounds/Santa.PAK"); cPacker.Pack("Output/Packer/Models.PAK", "Input/Game/PAK/Models"); AssertFile("Game/Models.PAK", "Output/Packer/Models.PAK"); cPacker.Pack("Output/Packer/Sounds.PAK", "Input/Game/PAK/Sounds"); AssertFile("Game/Sounds.PAK", "Output/Packer/Sounds.PAK"); cPacker.Pack("Output/Packer/Textures.PAK", "Input/Game/PAK/Textures"); AssertFile("Game/Textures.PAK", "Output/Packer/Textures.PAK"); cPacker.Pack("Output/Packer/Videos.PAK", "Input/Game/PAK/Videos"); AssertFile("Game/Videos.PAK", "Output/Packer/Videos.PAK"); }
void TestDehollowficationFromDatabaseOfTwoPointers(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(); Ptr<CRoot> pRoot = ORoot(); Ptr<CTestDoubleNamedString> pDouble = pRoot->Get<CTestDoubleNamedString>("Double Start"); Ptr<CTestNamedString> pString1 = pDouble->mpSplit1; Ptr<CTestNamedString> pString2 = pDouble->mpSplit2; pString1->ClassName(); pString2->ClassName(); Ptr<CTestNamedString> pDiamond1 = pString1->mpAnother; Ptr<CTestNamedString> pDiamond2 = pString2->mpAnother; AssertTrue(pDiamond1.IsHollow()); AssertTrue(pDiamond2.IsHollow()); AssertPointer(pDiamond1.Object(), pDiamond2.Object()); AssertPointer(pString1->mpAnother.Object(), pString2->mpAnother.Object()); AssertLongLongInt(3LL, pDiamond1.GetIndex()); AssertLongLongInt(3LL, pDiamond2.GetIndex()); //Dehollofication of pDiamond1 happens here. pString1->mpAnother and pString2->mpAnother are remapped to the dehollowed diamond object. pDiamond1->ClassName(); AssertFalse(pDiamond1.IsHollow()); AssertFalse(pDiamond2.IsHollow()); //This should be false but it's not until I remap local pointers. AssertPointer(pDiamond1.Object(), pDiamond2.Object()); //These should be the same but they're not until I remap local pointers. AssertLongLongInt(3LL, pDiamond1.GetIndex()); AssertFalse(pString1->mpAnother.IsHollow()); AssertFalse(pString2->mpAnother.IsHollow()); AssertPointer(pString1->mpAnother.Object(), pString2->mpAnother.Object()); ObjectsKill(); MemoryKill(); }
void TestFileUtilMakeDirectory(void) { CFileUtil cFileUtil; CChars szDirectory; CChars szFileName; CArrayString aszFiles; CChars szParentDirectory; CChars szCurrentDirectory; BOOL bResult; cFileUtil.RemoveDir("file_util"); szParentDirectory.Init("file_util" _FS_ "directory" _FS_ "make" _FS_ "test"); szDirectory.Init(szParentDirectory); szDirectory.Append(_FS_); szDirectory.Append("GABBA"); szFileName.Init(szDirectory); szFileName.Append(_FS_); szFileName.Append("FileName.txt"); bResult = cFileUtil.Touch(szFileName.Text()); AssertFalse(bResult); cFileUtil.MakeDir(szDirectory.Text()); szCurrentDirectory.Init(); cFileUtil.CurrentDirectory(&szCurrentDirectory); szCurrentDirectory.Append(_FS_); szCurrentDirectory.Append(szDirectory); aszFiles.Init(1); cFileUtil.FindAllDirectories(szParentDirectory.Text(), &aszFiles, FALSE); AssertInt(1, aszFiles.NumElements()); AssertString(szCurrentDirectory.Text(), aszFiles.GetText(0)); bResult = cFileUtil.Touch(szFileName.Text()); AssertTrue(bResult); szParentDirectory.Kill(); szDirectory.Kill(); szFileName.Kill(); cFileUtil.RemoveDir("file_util"); }
void TestObjectDehollowfication(void) { CFileUtil cFileUtil; CPointer pPointer; CTestDoubleNamedString* pcInternal; Ptr<CTestDoubleNamedString> pDouble; Ptr<CTestNamedString> pSingle; int iClassSize; OIndex oiOld; OIndex oiNew; cFileUtil.RemoveDir("Output"); cFileUtil.MakeDir("Output/Dehollowfication"); ObjectsInit("Output/Dehollowfication"); SetupObjectsForDehollowfication(); gcObjects.Flush(TRUE, TRUE); AssertLongLongInt(9, gcObjects.NumDatabaseObjects()); ObjectsKill(); ObjectsInit("Output/Dehollowfication"); SetupObjectsConstructors(); AssertLongLongInt(9, gcObjects.NumDatabaseObjects()); AssertTrue(gcObjects.Contains("Double")); pPointer = gcObjects.Get("Double"); AssertNotNull(pPointer.Object()); AssertString("CTestDoubleNamedString", pPointer.ClassName()); pcInternal = (CTestDoubleNamedString*)pPointer.Object(); AssertTrue(pcInternal->mpSplit1.IsNotNull()); AssertTrue(pcInternal->mpSplit1.IsHollow()); AssertTrue(pcInternal->mpSplit2.IsNotNull()); AssertTrue(pcInternal->mpSplit2.IsHollow()); pDouble = pPointer; oiOld = pDouble->mpSplit1.GetIndex(); AssertTrue(pcInternal->mpSplit1.IsHollow()); //Making sure we haven't de-hollowed the object by calling GetIndex. //Problem - An oi of 1 is briefly assigned to the de-hollowed object and then it is reassigned back to its original value. iClassSize = pDouble->mpSplit1->ClassSize(); //The method call - ClassSize() - is irrelevant as long as the -> operator on mpSplit1 is invoked. AssertTrue(pcInternal->mpSplit1.IsNotNull()); AssertFalse(pcInternal->mpSplit1.IsHollow()); AssertInt(sizeof(CTestNamedString), iClassSize); AssertString("CTestNamedString", pcInternal->mpSplit1.ClassName()); oiNew = pDouble->mpSplit1.GetIndex(); AssertLongLongInt(oiOld, oiNew); pSingle = pDouble->mpSplit2; AssertTrue(pcInternal->mpSplit2.IsNotNull()); AssertTrue(pcInternal->mpSplit2.IsHollow()); ObjectsKill(); }
void TestObjectsFlushNoClear(void) { CFileUtil cFileUtil; BOOL bResult; cFileUtil.RemoveDir("Output"); cFileUtil.MakeDir("Output/Flush1"); ObjectsInit("Output/Flush1"); SetupObjectsForDehollowfication(); AssertLongLongInt(0, gcObjects.NumDatabaseObjects()); AssertLongLongInt(0, gcObjects.NumDatabaseNames()); AssertLongLongInt(9, gcObjects.NumMemoryIndexes()); AssertLongLongInt(6, gcObjects.NumMemoryNames()); bResult = gcObjects.Flush(FALSE, FALSE); AssertTrue(bResult); AssertLongLongInt(9, gcObjects.NumDatabaseObjects()); AssertLongLongInt(6, gcObjects.NumDatabaseNames()); AssertLongLongInt(9, gcObjects.NumMemoryIndexes()); AssertLongLongInt(6, gcObjects.NumMemoryNames()); ObjectsKill(); CArrayChars aszFileNames; int i; CChars* psz; CChars szOutput; CChars szFileName; aszFileNames.Init(); cFileUtil.FindAllFiles("Input/Dehollowfication", &aszFileNames, FALSE, FALSE); for (i = 0; i < aszFileNames.NumElements(); i++) { psz = aszFileNames.Get(i); szFileName.Init(psz->Text()); cFileUtil.RemovePath(&szFileName); szOutput.Init(); cFileUtil.CurrentDirectory(&szOutput); cFileUtil.AppendToPath(&szOutput, "Output/Flush1"); cFileUtil.AppendToPath(&szOutput, szFileName.Text()); AssertFile(psz->Text(), szOutput.Text()); szOutput.Kill(); szFileName.Kill(); } aszFileNames.Kill(); }
int main(int argc, _TCHAR* argv[]) { CFileUtil cFileUtil; InitTotalStatistics(); FastFunctionsInit(); TypesInit(); TypeConverterInit(); UnknownsInit(); cFileUtil.MakeDir("Output"); TestImage(); TestImageColour(); TestImageImport(); TestImageReader(); TestImageWriter(); TestImageGreyToRGB(); TestImageRGBToGrey(); TestImageDivider(); TestBumpMapper(); TestPlainTextEditor(); TestImageCel(); TestRectangleBestPacker(); TestRectanglePow2Packer(); TestImageModifierStack(); TestImageDrawBox(); TestImageRecolour(); TestImageSwizzle(); TestImageCombiner(); //TestWinText(); //TestImageCelsSource(); //TestHalfSpace(); //TestPolygon(); //TestSphereShape(); //TestTriangleShape(); //TestMeshFaceReturn(); //TestMeshPolygons(); //TestMeshShapes(); //TestMeshConnectivity(); //TestNormalGeneration(); //TestMeshOBJReader(); cFileUtil.RemoveDir("Output"); UnknownsKill(); TypeConverterKill(); TypesKill(); FastFunctionsKill(); return TestTotalStatistics(); }
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 TestObjectsFlushDurable(void) { CFileUtil cFileUtil; BOOL bResult; CIndexedConfig cConfig; cFileUtil.RemoveDir("Output"); cFileUtil.MakeDir("Output/Flush2"); cConfig.OptimiseForStreaming("Output/Flush2"); cConfig.SetObjectCacheSize(128 MB); //cConfig.SetWriteThrough(FALSE); ObjectsInit(&cConfig); SetupObjectsForDehollowfication(); AssertLongLongInt(0, gcObjects.NumDatabaseObjects()); AssertLongLongInt(0, gcObjects.NumDatabaseNames()); AssertLongLongInt(9, gcObjects.NumMemoryIndexes()); AssertLongLongInt(6, gcObjects.NumMemoryNames()); bResult = gcObjects.Flush(FALSE, FALSE); AssertTrue(bResult); AssertLongLongInt(9, gcObjects.NumDatabaseObjects()); AssertLongLongInt(6, gcObjects.NumDatabaseNames()); AssertLongLongInt(9, gcObjects.NumMemoryIndexes()); AssertLongLongInt(6, gcObjects.NumMemoryNames()); ObjectsKill(); AssertFile("Input/Dehollowfication/48_0.DAT", "Output/Flush2/48_0.DAT"); AssertFile("Input/Dehollowfication/56_0.DAT", "Output/Flush2/56_0.DAT"); AssertFile("Input/Dehollowfication/68_0.DAT", "Output/Flush2/68_0.DAT"); AssertFile("Input/Dehollowfication/89_0.DAT", "Output/Flush2/89_0.DAT"); AssertFile("Input/Dehollowfication/93_0.DAT", "Output/Flush2/93_0.DAT"); AssertFile("Input/Dehollowfication/101_0.DAT", "Output/Flush2/101_0.DAT"); AssertFile("Input/Dehollowfication/102_0.DAT", "Output/Flush2/102_0.DAT"); AssertFile("Input/Dehollowfication/Files.DAT", "Output/Flush2/Files.DAT"); AssertFile("Input/Dehollowfication/Indicies.DAT", "Output/Flush2/Indicies.DAT"); AssertFile("Input/Dehollowfication/32_0.NAM", "Output/Flush2/32_0.NAM"); AssertFile("Input/Dehollowfication/Files.NAM", "Output/Flush2/Files.NAM"); }
void CTransientIndexedFile::Kill(void) { CFileUtil cFileUtil; CTransientIndexedFileDescriptor* pcFile; int i; mcPointers.Kill(); mcCache.Kill(); for (i = 0; i < mcFiles.NumElements(); i++) { pcFile = mcFiles.Get(i); pcFile->Kill(); } mcFiles.Kill(); if (mbCreatedDirectory) { cFileUtil.RemoveDir(mszDirectory.Text()); } mszDirectory.Kill(); }
void TestFileUtilMisc(void) { CFileUtil cFileUtil; BOOL bResult; CChars szPath; szPath.Init("TestFileUtil"); bResult = cFileUtil.MakeDir(szPath.Text()); AssertTrue(bResult); cFileUtil.AppendToPath(&szPath, "FileOfDoom.Indiana"); bResult = cFileUtil.Touch(szPath.Text()); AssertTrue(bResult); bResult = cFileUtil.Exists(szPath.Text()); AssertTrue(bResult); cFileUtil.RemoveLastFromPath(&szPath); cFileUtil.AppendToPath(&szPath, "AnotherDir"); bResult = cFileUtil.MakeDir(szPath.Text()); AssertTrue(bResult); cFileUtil.RemoveLastFromPath(&szPath); cFileUtil.AppendToPath(&szPath, "Master.Chief"); bResult = cFileUtil.Touch(szPath.Text()); AssertTrue(bResult); bResult = cFileUtil.Delete(szPath.Text()); AssertTrue(bResult); bResult = cFileUtil.Exists(szPath.Text()); AssertFalse(bResult); cFileUtil.RemoveLastFromPath(&szPath); cFileUtil.RemoveDir(szPath.Text()); }
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(); }
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(); }
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 TestLogFileMultipleReadsAfterOpens(void) { CLogFile* pcLogFile; CDiskFile* pcDiskFile; CFileBasic cFile; CFileUtil cFileUtil; char szSource[] = {"The Name of the Wise Man"}; int iSourcelen; char szResult[50]; char szWrite[] = {"Cat Catt ct... "}; int iWriteLen; char szA[] = {"A"}; cFileUtil.RemoveDir("Output/LogFile2"); cFileUtil.MakeDir("Output/LogFile2"); pcDiskFile = DiskFile("Output/LogFile2/OpenClose.txt"); pcDiskFile->Open(EFM_ReadWrite_Create); iSourcelen = (int)strlen(szSource); pcDiskFile->Write(szSource, iSourcelen + 1, 1); pcDiskFile->Close(); AssertTrue(cFileUtil.Exists("Output/LogFile2/OpenClose.txt")); pcLogFile = LogFile(pcDiskFile); cFile.Init(pcLogFile); pcLogFile->Begin(); AssertTrue(cFile.Open(EFM_Read)); AssertInt(iSourcelen + 1, (int)cFile.GetFileSize()); cFile.ReadData(szResult, iSourcelen + 1); AssertString(szSource, szResult); cFile.Close(); cFile.Open(EFM_ReadWrite_Create); iWriteLen = (int)strlen(szWrite); cFile.WriteData(szWrite, iWriteLen); AssertInt(iSourcelen + 1, (int)cFile.GetFileSize()); pcLogFile->Close(); cFile.Delete(); AssertTrue(cFileUtil.Exists("Output/LogFile2/OpenClose.txt")); AssertInt(0, (int)cFile.GetFileSize()); cFile.Open(EFM_ReadWrite_Create); cFile.Write(szA, 2, 1); AssertInt(2, (int)cFile.GetFileSize()); cFile.Close(); pcLogFile->Commit(); cFile.Kill(); AssertTrue(cFileUtil.Exists("Output/LogFile2/OpenClose.txt")); AssertInt(2, cFileUtil.Size("Output/LogFile2/OpenClose.txt")); pcDiskFile = DiskFile("Output/LogFile2/OpenClose.txt"); pcLogFile = LogFile(pcDiskFile); cFile.Init(pcLogFile); pcLogFile->Begin(); AssertTrue(cFile.Open(EFM_Read)); cFile.ReadData(szResult, 2); AssertString("A", szResult); cFile.Seek(0); cFile.ReadData(szResult, 2); AssertString("A", szResult); cFile.Close(); cFile.Delete(); pcLogFile->Commit(); cFile.Kill(); AssertFalse(cFileUtil.Exists("Output/LogFile2/OpenClose.txt")); }
void TestObjectsEvict(void) { CFileUtil cFileUtil; BOOL bResult; cFileUtil.RemoveDir("Output"); cFileUtil.MakeDir("Output/Eviction"); ObjectsInit("Output/Eviction"); SetupObjectsForDehollowfication(); AssertLongLongInt(0, gcObjects.NumDatabaseObjects()); AssertLongLongInt(0, gcObjects.NumDatabaseObjectsCached()); AssertLongLongInt(9, gcObjects.NumMemoryIndexes()); AssertLongLongInt(6, gcObjects.NumMemoryNames()); bResult = gcObjects.Flush(FALSE, FALSE); AssertTrue(bResult); AssertLongLongInt(9, gcObjects.NumDatabaseObjects()); AssertLongLongInt(9, gcObjects.NumDatabaseObjectsCached()); AssertLongLongInt(9, gcObjects.NumMemoryIndexes()); AssertLongLongInt(6, gcObjects.NumMemoryNames()); ObjectsKill(); cFileUtil.RemoveDir("Output"); cFileUtil.MakeDir("Output/Eviction"); ObjectsInit("Output/Eviction"); SetupObjectsForDehollowfication(); bResult = gcObjects.Flush(FALSE, TRUE); AssertTrue(bResult); AssertLongLongInt(9, gcObjects.NumDatabaseObjects()); AssertLongLongInt(0, gcObjects.NumDatabaseObjectsCached()); AssertLongLongInt(9, gcObjects.NumMemoryIndexes()); AssertLongLongInt(6, gcObjects.NumMemoryNames()); ObjectsKill(); cFileUtil.RemoveDir("Output"); cFileUtil.MakeDir("Output/Eviction"); ObjectsInit("Output/Eviction"); SetupObjectsForDehollowfication(); bResult = gcObjects.Flush(TRUE, FALSE); AssertTrue(bResult); AssertLongLongInt(9, gcObjects.NumDatabaseObjects()); AssertLongLongInt(9, gcObjects.NumDatabaseObjectsCached()); AssertLongLongInt(0, gcObjects.NumMemoryIndexes()); AssertLongLongInt(0, gcObjects.NumMemoryNames()); ObjectsKill(); cFileUtil.RemoveDir("Output"); cFileUtil.MakeDir("Output/Eviction"); ObjectsInit("Output/Eviction"); SetupObjectsForDehollowfication(); bResult = gcObjects.Flush(TRUE, TRUE); AssertTrue(bResult); AssertLongLongInt(9, gcObjects.NumDatabaseObjects()); AssertLongLongInt(0, gcObjects.NumDatabaseObjectsCached()); AssertLongLongInt(0, gcObjects.NumMemoryIndexes()); AssertLongLongInt(0, gcObjects.NumMemoryNames()); ObjectsKill(); }
void TestMapStringUnknownLoad(void) { MemoryInit(); UnknownsInit(); CMapStringUnknown cMap; CTestUnknownJobbie* pcTest; CChunkFile cFile; CFileUtil cFileUtil; BOOL bResult; gcUnknowns.AddConstructor<CTestUnknownJobbie>(); AssertInt(0, gcUnknowns.NumElements()); cFileUtil.RemoveDir("MapStringUnknown"); cFileUtil.MakeDir("MapStringUnknown"); cMap.Init(); pcTest = cMap.Put<CTestUnknownJobbie>("Hello"); pcTest->Init(7, "1st"); pcTest = cMap.Put<CTestUnknownJobbie>("World"); pcTest->Init(19, "A pony"); pcTest = cMap.Put<CTestUnknownJobbie>("Aardvark"); pcTest->Init(4, "Restore"); pcTest = cMap.Put<CTestUnknownJobbie>("Yurk"); pcTest->Init(8, "Yurk"); cFile.Init(DiskFile("MapStringUnknown/Map.dat")); bResult = cFile.WriteOpen(); AssertTrue(bResult); bResult = cMap.Save(&cFile); AssertTrue(bResult); bResult = cFile.WriteClose(); AssertTrue(bResult); cFile.Kill(); cMap.Kill(); AssertInt(0, gcUnknowns.NumElements()); cFile.Init(DiskFile("MapStringUnknown/Map.dat")); bResult = cFile.ReadOpen(); AssertTrue(bResult); bResult = cMap.Load(&cFile); AssertTrue(bResult); bResult = cFile.ReadClose(); AssertTrue(bResult); cFile.Kill(); AssertInt(4, cMap.NumElements()); AssertInt(4, gcUnknowns.NumElements()); pcTest = (CTestUnknownJobbie*)cMap.Get("Hello"); AssertInt(7, pcTest->miANumber); AssertString("1st", pcTest->mszText.Text()); pcTest = (CTestUnknownJobbie*)cMap.Get("World"); AssertInt(19, pcTest->miANumber); AssertString("A pony", pcTest->mszText.Text()); pcTest = (CTestUnknownJobbie*)cMap.Get("Aardvark"); AssertInt(4, pcTest->miANumber); AssertString("Restore", pcTest->mszText.Text()); pcTest = (CTestUnknownJobbie*)cMap.Get("Yurk"); AssertInt(8, pcTest->miANumber); AssertString("Yurk", pcTest->mszText.Text()); cMap.Kill(); AssertInt(0, gcUnknowns.NumElements()); cFileUtil.RemoveDir("MapStringUnknown"); UnknownsKill(); MemoryKill(); }