void TestKillCanFindRoot(void) { ObjectsInit(); Ptr<CRoot> pRoot; Ptr<CGameWorld> pWorld; CGameWorld* pcWorld; pRoot = ORoot(); pWorld = OMalloc(CGameWorld); pWorld->Init(); pRoot->Add(pWorld); Ptr<CHarrier> pHarrier = ONMalloc(CHarrier, "Harrier"); pHarrier->Init(pWorld); Ptr<CJeep> pJeep = ONMalloc(CJeep, "Jeep"); pJeep->Init(pWorld); pWorld->AddPlayer(pHarrier); pWorld->AddPlayer(pJeep); SStateOnKill sHarrierBefore; SStateOnKill sHarrierAfter; SStateOnKill sJeepBefore; SStateOnKill sJeepAfter; pHarrier->SetKillHook(&sHarrierBefore, &sHarrierAfter); pJeep->SetKillHook(&sJeepBefore, &sJeepAfter); SStateOnKill sGooseBefore; SStateOnKill sGooseAfter; SStateOnKill sMaverickBefore; SStateOnKill sMaverickAfter; Ptr<CRedJet> pRedJetGoose = ONMalloc(CRedJet, "Goose"); Ptr<CRedJet> pRedJetMaverick = ONMalloc(CRedJet, "Maverick"); pRedJetGoose->Init(pWorld); pRedJetMaverick->Init(pWorld); pRedJetGoose->SetKillHook(&sGooseBefore, &sGooseAfter); pRedJetMaverick->SetKillHook(&sMaverickBefore, &sMaverickAfter); AssertTrue(pJeep->CanFindRoot()); AssertTrue(pRedJetMaverick->CanFindRoot()); AssertTrue(pHarrier->CanFindRoot()); AssertTrue(pHarrier->GetMissiles()->CanFindRoot()); AssertTrue(pRedJetGoose->CanFindRoot()); AssertTrue(pWorld->CanFindRoot()); AssertTrue(pWorld->GetTickables()->CanFindRoot()); AssertTrue(pRoot->CanFindRoot()); AssertTrue(pRoot->TestGetSet()->CanFindRoot()); AssertLongLongInt(9, gcObjects.NumMemoryIndexes()); // // 4 ArrayObject[6](4) // 4 ^ // 4 | pRedJetGoose[8,Goose](4) // 4 | ^/ // | // pRedJetMaverick[9,Maverick](4) // 3 pHarrier[5,Harrier](3) pJeep[7,Jeep](3) // ^/ // 3 |^ ^ /^ ^ // // // 3 || \ // | // // // 3 || // | // // // 3 || //\ | // // // 3 || // \ | /. // // 3 || // ArrayObject[4](3)/ // || // ^ . / // 2 || // / / / // 2 v| v/ / v v // 2 pWorld[3](2)--------------- // ^ // 1 | // 1 SetObject[2](1) // ^ // 0 | // 0 pRoot[1,GraphRoot](0) // pRoot->Remove(pWorld); AssertFalse(pJeep->CanFindRoot()); AssertFalse(pRedJetMaverick->CanFindRoot()); AssertFalse(pHarrier->CanFindRoot()); AssertFalse(pHarrier->GetMissiles()->CanFindRoot()); //The destruction of the pointer created by pHarrier->GetMissiles() set a lot of the root distances to -2. AssertFalse(pRedJetGoose->CanFindRoot()); AssertFalse(pWorld->CanFindRoot()); AssertFalse(pWorld->GetTickables()->CanFindRoot()); AssertTrue(pRoot->CanFindRoot()); AssertTrue(pRoot->TestGetSet()->CanFindRoot()); AssertInt(-1, pJeep->GetDistToRoot()); AssertInt(-1, pRedJetMaverick->GetDistToRoot()); AssertInt(-1, pHarrier->GetDistToRoot()); AssertInt(-1, pHarrier->GetMissiles()->GetDistToRoot()); AssertInt(-1, pRedJetGoose->GetDistToRoot()); AssertInt(-1, pWorld->GetDistToRoot()); AssertInt(-1, pWorld->GetTickables()->GetDistToRoot()); AssertLongLongInt(9, gcObjects.NumMemoryIndexes()); AssertLongLongInt(5, gcObjects.NumMemoryNames()); AssertLongLongInt(0, gcObjects.NumDatabaseObjects()); AssertLongLongInt(0, gcObjects.NumDatabaseNames()); pJeep = NULL; pRedJetMaverick = NULL; pHarrier = NULL; pRedJetGoose = NULL; pcWorld = &pWorld; pWorld = NULL; AssertLongLongInt(2, gcObjects.NumMemoryIndexes()); AssertLongLongInt(1, gcObjects.NumMemoryNames()); AssertInt('X', sHarrierBefore.sPoint.x); AssertInt('Y', sHarrierBefore.sPoint.y); AssertInt('Z', sHarrierBefore.sPoint.z); AssertString("012345678901234", sHarrierBefore.cPicture.mszPretenedImAPicture); AssertString("Alas I am Dead!", sHarrierAfter.cPicture.mszPretenedImAPicture); AssertString("012345678901234", sJeepBefore.cPicture.mszPretenedImAPicture); AssertString("Alas I am Dead!", sJeepAfter.cPicture.mszPretenedImAPicture); ObjectsKill(); }