From 0f2474fb0126e55a749bbb20ae8fcc581d65a428 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Wed, 31 Mar 2021 00:38:08 +0200 Subject: [PATCH] :white_check_mark: Assert unpacking of player --- SourceT/writehero_test.cpp | 151 +++++++++++++++++++++++++++++++++++++ 1 file changed, 151 insertions(+) diff --git a/SourceT/writehero_test.cpp b/SourceT/writehero_test.cpp index d3ea6bdb4..29f40e900 100644 --- a/SourceT/writehero_test.cpp +++ b/SourceT/writehero_test.cpp @@ -207,6 +207,156 @@ static void PackPlayerTest(PkPlayerStruct *pPack) pPack->_pNumInv = 2; } +static int CountItems(ItemStruct *items, int n) +{ + int count = n; + for (int i = 0; i < n; i++) + if (items[i].isEmpty()) + count--; + + return count; +} + +static int Count8(Sint8 *ints, int n) +{ + int count = n; + for (int i = 0; i < n; i++) + if (ints[i] == 0) + count--; + + return count; +} + +static int CountBool(bool *bools, int n) +{ + int count = n; + for (int i = 0; i < n; i++) + if (!bools[i]) + count--; + + return count; +} + +static void AssertPlayer(PlayerStruct *pPlayer) +{ + ASSERT_EQ(Count8(pPlayer->_pSplLvl, 64), 23); + ASSERT_EQ(Count8(pPlayer->InvGrid, NUM_INV_GRID_ELEM), 9); + ASSERT_EQ(CountItems(pPlayer->InvBody, NUM_INVLOC), 6); + ASSERT_EQ(CountItems(pPlayer->InvList, NUM_INV_GRID_ELEM), 2); + ASSERT_EQ(CountItems(pPlayer->SpdList, MAXBELTITEMS), 8); + ASSERT_EQ(CountItems(&pPlayer->HoldItem, 1), 1); + + ASSERT_EQ(pPlayer->_px, 75); + ASSERT_EQ(pPlayer->_py, 68); + ASSERT_EQ(pPlayer->_pfutx, 75); + ASSERT_EQ(pPlayer->_pfuty, 68); + ASSERT_EQ(pPlayer->_ptargx, 75); + ASSERT_EQ(pPlayer->_ptargy, 68); + ASSERT_EQ(pPlayer->plrlevel, 0); + ASSERT_EQ(pPlayer->destAction, -1); + ASSERT_STREQ(pPlayer->_pName, "TestPlayer"); + ASSERT_EQ(pPlayer->_pClass, 1); + ASSERT_EQ(pPlayer->_pBaseStr, 55); + ASSERT_EQ(pPlayer->_pStrength, 124); + ASSERT_EQ(pPlayer->_pBaseMag, 70); + ASSERT_EQ(pPlayer->_pMagic, 80); + ASSERT_EQ(pPlayer->_pBaseDex, 250); + ASSERT_EQ(pPlayer->_pDexterity, 281); + ASSERT_EQ(pPlayer->_pBaseVit, 80); + ASSERT_EQ(pPlayer->_pVitality, 90); + ASSERT_EQ(pPlayer->_pLevel, 50); + ASSERT_EQ(pPlayer->_pStatPts, 0); + ASSERT_EQ(pPlayer->_pExperience, 1583495809); + ASSERT_EQ(pPlayer->_pGold, 0); + ASSERT_EQ(pPlayer->_pMaxHPBase, 12864); + ASSERT_EQ(pPlayer->_pHPBase, 12864); + ASSERT_EQ(pPlayer->_pBaseToBlk, 20); + ASSERT_EQ(pPlayer->_pMaxManaBase, 11104); + ASSERT_EQ(pPlayer->_pManaBase, 11104); + ASSERT_EQ(pPlayer->_pMemSpells, 66309357295); + ASSERT_EQ(pPlayer->_pNumInv, 2); + ASSERT_EQ(pPlayer->wReflections, 0); + ASSERT_EQ(pPlayer->pTownWarps, 0); + ASSERT_EQ(pPlayer->pDungMsgs, 0); + ASSERT_EQ(pPlayer->pDungMsgs2, 0); + ASSERT_EQ(pPlayer->pLvlLoad, 0); + ASSERT_EQ(pPlayer->pDiabloKillLevel, 3); + ASSERT_EQ(pPlayer->pBattleNet, 0); + ASSERT_EQ(pPlayer->pManaShield, 0); + ASSERT_EQ(pPlayer->pDifficulty, 0); + ASSERT_EQ(pPlayer->pDamAcFlags, 0); + + ASSERT_EQ(pPlayer->_pmode, 0); + ASSERT_EQ(Count8(pPlayer->walkpath, MAX_PATH_LENGTH), 25); + ASSERT_EQ(pPlayer->_pgfxnum, 36); + ASSERT_EQ(pPlayer->_pAnimDelay, 3); + ASSERT_EQ(pPlayer->_pAnimCnt, 1); + ASSERT_EQ(pPlayer->_pAnimLen, 8); + ASSERT_EQ(pPlayer->_pAnimFrame, 1); + ASSERT_EQ(pPlayer->_pAnimWidth, 96); + ASSERT_EQ(pPlayer->_pAnimWidth2, 16); + ASSERT_EQ(pPlayer->_pSpell, -1); + ASSERT_EQ(pPlayer->_pSplType, 4); + ASSERT_EQ(pPlayer->_pSplFrom, 0); + ASSERT_EQ(pPlayer->_pTSpell, 0); + ASSERT_EQ(pPlayer->_pTSplType, 0); + ASSERT_EQ(pPlayer->_pRSpell, -1); + ASSERT_EQ(pPlayer->_pRSplType, 4); + ASSERT_EQ(pPlayer->_pSBkSpell, -1); + ASSERT_EQ(pPlayer->_pSBkSplType, 0); + ASSERT_EQ(pPlayer->_pAblSpells, 134217728); + ASSERT_EQ(pPlayer->_pScrlSpells, 0); + ASSERT_EQ(pPlayer->_pSpellFlags, 0); + ASSERT_EQ(pPlayer->_pwtype, 1); + ASSERT_EQ(pPlayer->_pBlockFlag, 0); + ASSERT_EQ(pPlayer->_pLightRad, 11); + ASSERT_EQ(pPlayer->_pDamageMod, 101); + ASSERT_EQ(pPlayer->_pHitPoints, 16640); + ASSERT_EQ(pPlayer->_pMaxHP, 16640); + ASSERT_EQ(pPlayer->_pMana, 14624); + ASSERT_EQ(pPlayer->_pMaxMana, 14624); + ASSERT_EQ(pPlayer->_pNextExper, 2000); + ASSERT_EQ(pPlayer->_pMagResist, 75); + ASSERT_EQ(pPlayer->_pFireResist, 16); + ASSERT_EQ(pPlayer->_pLghtResist, 75); + ASSERT_EQ(CountBool(pPlayer->_pLvlVisited, NUMLEVELS), 0); + ASSERT_EQ(CountBool(pPlayer->_pSLvlVisited, NUMLEVELS), 0); + ASSERT_EQ(pPlayer->_pNFrames, 8); + ASSERT_EQ(pPlayer->_pNWidth, 96); + ASSERT_EQ(pPlayer->_pWFrames, 8); + ASSERT_EQ(pPlayer->_pWWidth, 96); + ASSERT_EQ(pPlayer->_pAFrames, 18); + ASSERT_EQ(pPlayer->_pAWidth, 128); + ASSERT_EQ(pPlayer->_pAFNum, 10); + ASSERT_EQ(pPlayer->_pSFrames, 16); + ASSERT_EQ(pPlayer->_pSWidth, 96); + ASSERT_EQ(pPlayer->_pSFNum, 12); + ASSERT_EQ(pPlayer->_pHFrames, 7); + ASSERT_EQ(pPlayer->_pHWidth, 96); + ASSERT_EQ(pPlayer->_pDFrames, 20); + ASSERT_EQ(pPlayer->_pDWidth, 128); + ASSERT_EQ(pPlayer->_pBFrames, 4); + ASSERT_EQ(pPlayer->_pBWidth, 96); + ASSERT_EQ(pPlayer->_pIMinDam, 1); + ASSERT_EQ(pPlayer->_pIMaxDam, 14); + ASSERT_EQ(pPlayer->_pIAC, 115); + ASSERT_EQ(pPlayer->_pIBonusDam, 0); + ASSERT_EQ(pPlayer->_pIBonusToHit, 0); + ASSERT_EQ(pPlayer->_pIBonusAC, 0); + ASSERT_EQ(pPlayer->_pIBonusDamMod, 0); + ASSERT_EQ(pPlayer->_pISpells, 0); + ASSERT_EQ(pPlayer->_pIFlags, 0); + ASSERT_EQ(pPlayer->_pIGetHit, 0); + ASSERT_EQ(pPlayer->_pISplLvlAdd, 0); + ASSERT_EQ(pPlayer->_pISplDur, 0); + ASSERT_EQ(pPlayer->_pIEnAc, 0); + ASSERT_EQ(pPlayer->_pIFMinDam, 0); + ASSERT_EQ(pPlayer->_pIFMaxDam, 0); + ASSERT_EQ(pPlayer->_pILMinDam, 0); + ASSERT_EQ(pPlayer->_pILMaxDam, 0); + ASSERT_EQ(pPlayer->pOriginalCathedral, 0); +} + TEST(Writehero, pfile_write_hero) { SetPrefPath("."); @@ -225,6 +375,7 @@ TEST(Writehero, pfile_write_hero) PkPlayerStruct pks; PackPlayerTest(&pks); UnPackPlayer(&pks, myplr, TRUE); + AssertPlayer(&plr[0]); pfile_write_hero(); std::ifstream f("multi_0.sv", std::ios::binary);