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 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 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(); }
BOOL CObjectWriterChunked::Begin(void) { CDiskFile* pcDiskFile; CFileUtil cFileUtil; CChars szFullDirectory; CChars szFileName; CObjectWriter::Begin(); szFullDirectory.Init(mszDirectory); cFileUtil.AppendToPath(&szFullDirectory, mszObjectBaseName.Text()); cFileUtil.MakeDir(szFullDirectory.Text()); szFileName.Init(szFullDirectory); szFullDirectory.Kill(); cFileUtil.AppendToPath(&szFileName, mszFileName.Text()); szFileName.Append("."); szFileName.Append(OBJECT_FILE_EXTENSION); pcDiskFile = DiskFile(szFileName.Text()); szFileName.Kill(); mcChunkFile.Init(pcDiskFile); return mcChunkFile.WriteOpen(CHUNKED_OBJECT_FILE); }
void TestChunkFileSimple(void) { CChunkFile cChunkFile; CFileUtil cFileUtil; int iChunkNum; cFileUtil.MakeDir("Output"); cFileUtil.Delete("Output/ChunkFile.bin"); cChunkFile.Init(DiskFile("Output/ChunkFile.bin")); AssertFalse(cChunkFile.IsOpen()); AssertTrue(cChunkFile.WriteOpen()); AssertTrue(cChunkFile.IsOpen()); AssertTrue(cChunkFile.WriteChunkBegin()); AssertTrue(cChunkFile.WriteChunkEnd("ThisChunk")); AssertTrue(cChunkFile.WriteClose()); AssertFalse(cChunkFile.IsOpen()); cChunkFile.Kill(); cChunkFile.Init(DiskFile("Output/ChunkFile.bin")); AssertFalse(cChunkFile.IsOpen()); AssertTrue(cChunkFile.ReadOpen()); AssertTrue(cChunkFile.IsOpen()); iChunkNum = cChunkFile.FindFirstChunkWithName("ThisChunk"); AssertInt(0, iChunkNum); AssertTrue(cChunkFile.ReadChunkBegin(iChunkNum)); AssertTrue(cChunkFile.ReadClose()); AssertFalse(cChunkFile.IsOpen()); cChunkFile.Kill(); }
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(); }
BOOL CPackFiles::RecurseUnpack(CFileNodePackFileNode* pcNode, char* szDestination) { CChars szFileName; CFileNodePackFileNode* pcChild; int i; CPackFileNode* pcFile; BOOL bResult; CPackFile* pcPackFile; CFileCopier cCopier; CDiskFile cDiskFile; CFileUtil cFileUtil; if (pcNode->IsDirectory()) { bResult = TRUE; for (i = 0; i < pcNode->Directory()->maNodeFiles.NumElements(); i++) { pcChild = (CFileNodePackFileNode*)pcNode->Directory()->maNodeFiles.Get(i); bResult &= RecurseUnpack(pcChild, szDestination); } return bResult; } else if (pcNode->IsFile()) { szFileName.Init(szDestination); szFileName.Append('/'); pcNode->GetFullName(&szFileName); szFileName.Replace('/', FILE_SEPARATOR[0]); pcFile = pcNode->File(); pcPackFile = PackFile(this, pcFile); if (!pcPackFile) { szFileName.Kill(); return FALSE; } cDiskFile.Init(szFileName.Text()); cFileUtil.RemoveLastFromPath(&szFileName); cFileUtil.MakeDir(szFileName.Text()); bResult = cCopier.Copy(pcPackFile, &cDiskFile); cDiskFile.Kill(); szFileName.Kill(); return bResult; } return FALSE; }
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 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 TestObjectReaderChunked(void) { CFileUtil cFileUtil; cFileUtil.RemoveDir("Output"); cFileUtil.MakeDir("Output/ObjectReaderChunked"); ObjectsInit(); BeginTests(); TestObjectReaderChunkedDeserialised(); TestStatistics(); ObjectsKill(); cFileUtil.RemoveDir("Output"); }
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 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"); }
BOOL CTransientIndexedFile::Write(int iPointerIndex, void* pvData) { STransientIndexedPointer* psPointer; CFileUtil cFileUtil; if (!mbCreatedDirectory) { cFileUtil.MakeDir(mszDirectory.Text()); mbCreatedDirectory = TRUE; } mcPointers.GetDirect(iPointerIndex, &psPointer); psPointer->pvCache = NULL; if (psPointer->iFileIndex == -1) { return WriteNew(psPointer, pvData); } else { return WriteExisting(psPointer, pvData); } }
void TestRemappingOfOIs(CObjectWriter* pcWriter, CObjectReader* pcReader) { CFileUtil cFileUtil; Ptr<CTestSaveableObject2> cBase; Ptr<CTestSaveableObject2> cStart1; Ptr<CRoot> cRoot; Ptr<CString> szOne; Ptr<CString> cString1; Ptr<CString> cString2; CObjectGraphSerialiser cGraphSerialiser; CObjectGraphDeserialiser cGraphDeserialiser; Ptr<CTestSaveableObject1> cShared; int i; CObjectAllocator cAllocator; CDependentReadObjects cDependentReadObjects; cFileUtil.MakeDir("Output/GraphDeserialiser/Simple/Remapping"); ObjectsInit("Output/GraphDeserialiser/Simple/Remapping"); TestObjectGraphDeserialiserAddConstructors(); TestObjectGraphDeserialiserBuildGraph1(); cBase = gcObjects.Get("Ow/Start 1"); AssertTrue(cBase.IsNotNull()); AssertLongLongInt(3, cBase->GetOI()); cString1 = gcObjects.Get(6LL); AssertString("Black", cString1->Text()); AssertLongLongInt(6LL, cString1->GetOI()); cString2 = gcObjects.Get(7LL); AssertString("Jack", cString2->Text()); AssertLongLongInt(7LL, cString2->GetOI()); cGraphSerialiser.Init(pcWriter); AssertTrue(cGraphSerialiser.Write(&cBase)); cGraphSerialiser.Kill(); pcWriter->Kill(); ObjectsKill(); ObjectsInit("Output/GraphDeserialiser/Simple/Remapping"); TestObjectGraphDeserialiserAddConstructors(); cRoot = ORoot(); for (i = 0; i < 20; i++) { szOne = OMalloc(CString); szOne->Init("Hello World "); szOne->Append(i); cRoot->Add(szOne); AssertLongLongInt(3+i, szOne->GetOI()); } cAllocator.Init(&gcObjects); cDependentReadObjects.Init(); cGraphDeserialiser.Init(pcReader, FALSE, &cAllocator, &cDependentReadObjects, gcObjects.GetMemory()); cStart1 = cGraphDeserialiser.Read("Ow/Start 1"); AssertTrue(cStart1.IsNotNull()); AssertLongLongInt(23, cStart1->GetOI()); AssertTrue(cStart1->mp1.IsNotNull()); AssertString("CTestSaveableObject1", cStart1->mp1->ClassName()); cShared = cStart1->mp1; AssertLongLongInt(25, cShared->GetOI()); AssertTrue(cStart1->mp2.IsNotNull()); AssertString("CString", cStart1->mp2->ClassName()); cString1 = cStart1->mp2; AssertLongLongInt(24, cString1->GetOI()); cGraphDeserialiser.Kill(); cDependentReadObjects.Kill(); cAllocator.Kill(); for (i = 0; i < 20; i++) { szOne = OMalloc(CString); szOne->Init("Hello World "); szOne->Append(i + 20); cRoot->Add(szOne); AssertLongLongInt(26+i, szOne->GetOI()); } pcReader->Kill(); 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(); }
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(); }
void TestOverwritingOfExistingNamesFromChunkedFiles(void) { CObjectWriterChunked cWriterStart1; CObjectWriterChunked cWriterStart2; CFileUtil cFileUtil; Ptr<CTestSaveableObject2> cOwStart1; Ptr<CTestSaveableObject2> cOwStart2; CObjectGraphSerialiser cGraphSerialiser; CObjectGraphDeserialiser cGraphDeserialiser; CObjectReaderChunkFileDisk cReaderStart1; CObjectReaderChunkFileDisk cReaderStart2; Ptr<CTestSaveableObject1> cShared; Ptr<CRoot> cRoot; CPointer cObject; int iNumUnknowns; int iNumIndexes; int iNumNames; CObjectAllocator cAllocator; CDependentReadObjects cDependentReadObjects; cWriterStart1.Init("Output/GraphDeserialiser/Simple/Remapping", "", "Start1"); cWriterStart2.Init("Output/GraphDeserialiser/Simple/Remapping", "", "Start2"); cFileUtil.MakeDir("Output/GraphDeserialiser/Simple/Remapping"); ObjectsInit("Output/GraphDeserialiser/Simple/Remapping"); TestObjectGraphDeserialiserAddConstructors(); TestObjectGraphDeserialiserBuildGraph1(); cOwStart1 = gcObjects.Get("Ow/Start 1"); cGraphSerialiser.Init(&cWriterStart1); AssertTrue(cGraphSerialiser.Write(&cOwStart1)); cGraphSerialiser.Kill(); cWriterStart1.Kill(); cOwStart2 = gcObjects.Get("Ow/Start 2"); cGraphSerialiser.Init(&cWriterStart2); AssertTrue(cGraphSerialiser.Write(&cOwStart2)); cGraphSerialiser.Kill(); cWriterStart2.Kill(); cShared = gcObjects.Get("Ow/Shared"); AssertInt(3, cShared->NumHeapFroms()); AssertPointer(&cOwStart1, cShared->GetHeapFrom(0)); AssertPointer(&cOwStart2, cShared->GetHeapFrom(1)); AssertPointer(&cShared, cShared->GetHeapFrom(2)); //Remember: cShared->mpObject = cShared; AssertInt(2, cOwStart1->NumPointerTos()); AssertPointer(&cShared, cOwStart1->TestGetPointerTo(0)); AssertPointer(&cOwStart1->mp1, cOwStart1->TestGetPointerTo(0)); AssertPointer(&cOwStart1->mp2, cOwStart1->TestGetPointerTo(1)); AssertInt(2, cOwStart1->GetDistToRoot()); AssertInt(3, cShared->GetDistToRoot()); ObjectsKill(); ObjectsInit("Output/GraphDeserialiser/Simple/Remapping"); TestObjectGraphDeserialiserAddConstructors(); cRoot = ORoot(); cAllocator.Init(&gcObjects); cDependentReadObjects.Init(); cReaderStart1.Init("Output/GraphDeserialiser/Simple/Remapping", "Start1"); cGraphDeserialiser.Init(&cReaderStart1, FALSE, &cAllocator, &cDependentReadObjects, gcObjects.GetMemory()); cOwStart1 = cGraphDeserialiser.Read("Ow/Start 1"); cGraphDeserialiser.Kill(); cDependentReadObjects.Kill(); cAllocator.Kill(); cReaderStart1.Kill(); AssertInt(-1, cOwStart1->GetDistToRoot()); cRoot->Add(cOwStart1); cShared = gcObjects.Get("Ow/Shared"); //Make sure the pointed 'froms' are correctly setup after loading. AssertInt(2, cShared->NumHeapFroms()); AssertPointer(&cOwStart1, cShared->GetHeapFrom(0)); AssertPointer(&cShared, cShared->GetHeapFrom(1)); AssertInt(2, cOwStart1->NumPointerTos()); AssertPointer(&cShared, cOwStart1->TestGetPointerTo(0)); AssertPointer(&cOwStart1->mp1, cOwStart1->TestGetPointerTo(0)); AssertPointer(&cOwStart1->mp2, cOwStart1->TestGetPointerTo(1)); AssertInt(2, cOwStart1->GetDistToRoot()); AssertInt(3, cShared->GetDistToRoot()); AssertInt(89, cOwStart1->mp1->miInt); cOwStart1->mp1->miInt = 66; iNumUnknowns = gcUnknowns.NumElements(); iNumIndexes = (int)gcObjects.NumMemoryIndexes(); iNumNames = gcObjects.NumMemoryNames(); cAllocator.Init(&gcObjects); cDependentReadObjects.Init(); cReaderStart2.Init("Output/GraphDeserialiser/Simple/Remapping", "Start2"); cGraphDeserialiser.Init(&cReaderStart2, FALSE, &cAllocator, &cDependentReadObjects, gcObjects.GetMemory()); cOwStart2 = cGraphDeserialiser.Read("Ow/Start 2"); cGraphDeserialiser.Kill(); cDependentReadObjects.Kill(); cAllocator.Kill(); cReaderStart2.Kill(); AssertInt(iNumUnknowns+2, gcUnknowns.NumElements()); AssertInt(iNumIndexes+2, (int)gcObjects.NumMemoryIndexes()); AssertInt(iNumNames+1, (int)gcObjects.NumMemoryNames()); AssertNotNull(cOwStart2.Object()); cRoot->Add(cOwStart2); AssertNotNull(&cOwStart2); AssertInt(89, cOwStart2->mp1->miInt); AssertLongLongInt(cOwStart1->mp1->GetOI(), cOwStart2->mp1->GetOI()); AssertInt(89, cOwStart1->mp1->miInt); AssertPointer(&cOwStart1->mp1, &cOwStart2->mp1); cObject = gcObjects.Get("Ow/Start 2"); AssertPointer(&cOwStart2, &cObject); cObject = gcObjects.Get(cOwStart2->GetOI()); AssertPointer(&cOwStart2, &cObject); ObjectsKill(); }