Browse Source

pack_test: Minor fixes

1. Use EXPECT instead of ASSERT when comparing items so that we see all
   diffs.
2. Avoid a UBSAN error in ComparePackedItems.
pull/1438/head
Gleb Mazovetskiy 5 years ago committed by Anders Jenbo
parent
commit
08c34400d3
  1. 125
      SourceT/pack_test.cpp

125
SourceT/pack_test.cpp

@ -5,16 +5,39 @@ using namespace devilution;
static void ComparePackedItems(const PkItemStruct *item1, const PkItemStruct *item2)
{
ASSERT_EQ(item1->iSeed, item2->iSeed);
ASSERT_EQ(item1->iCreateInfo, item2->iCreateInfo);
ASSERT_EQ(item1->idx, item2->idx);
ASSERT_EQ(item1->bId, item2->bId);
ASSERT_EQ(item1->bDur, item2->bDur);
ASSERT_EQ(item1->bMDur, item2->bMDur);
ASSERT_EQ(item1->bCh, item2->bCh);
ASSERT_EQ(item1->bMCh, item2->bMCh);
ASSERT_EQ(item1->wValue, item2->wValue);
ASSERT_EQ(item1->dwBuff, item2->dwBuff);
// `PkItemStruct` is packed, so we copy the unaligned values out before comparing them.
// This avoids the following UBSAN error such as this one:
// runtime error: load of misaligned address for type 'const unsigned int', which requires 4 byte alignment
{
const auto item1_iSeed = item1->iSeed;
const auto item2_iSeed = item2->iSeed;
EXPECT_EQ(item1_iSeed, item2_iSeed);
}
{
const auto item1_iCreateInfo = item1->iCreateInfo;
const auto item2_iCreateInfo = item2->iCreateInfo;
EXPECT_EQ(item1_iCreateInfo, item2_iCreateInfo);
}
{
const auto item1_idx = item1->idx;
const auto item2_idx = item2->idx;
EXPECT_EQ(item1_idx, item2_idx);
}
EXPECT_EQ(item1->bId, item2->bId);
EXPECT_EQ(item1->bDur, item2->bDur);
EXPECT_EQ(item1->bMDur, item2->bMDur);
EXPECT_EQ(item1->bCh, item2->bCh);
EXPECT_EQ(item1->bMCh, item2->bMCh);
{
const auto item1_wValue = item1->wValue;
const auto item2_wValue = item2->wValue;
EXPECT_EQ(item1_wValue, item2_wValue);
}
{
const auto item1_dwBuff = item1->dwBuff;
const auto item2_dwBuff = item2->dwBuff;
EXPECT_EQ(item1_dwBuff, item2_dwBuff);
}
}
typedef struct TestItemStruct {
char _iIName[64];
@ -64,47 +87,47 @@ typedef struct TestItemStruct {
static void CompareItems(const ItemStruct *item1, const TestItemStruct *item2)
{
ASSERT_STREQ(item1->_iIName, item2->_iIName);
ASSERT_EQ(item1->_itype, item2->_itype);
ASSERT_EQ(item1->_iClass, item2->_iClass);
ASSERT_EQ(item1->_iCurs, item2->_iCurs);
ASSERT_EQ(item1->_iIvalue, item2->_iIvalue);
ASSERT_EQ(item1->_iMinDam, item2->_iMinDam);
ASSERT_EQ(item1->_iMaxDam, item2->_iMaxDam);
ASSERT_EQ(item1->_iAC, item2->_iAC);
ASSERT_EQ(item1->_iFlags, item2->_iFlags);
ASSERT_EQ(item1->_iMiscId, item2->_iMiscId);
ASSERT_EQ(item1->_iSpell, item2->_iSpell);
ASSERT_EQ(item1->_iCharges, item2->_iCharges);
ASSERT_EQ(item1->_iMaxCharges, item2->_iMaxCharges);
ASSERT_EQ(item1->_iDurability, item2->_iDurability);
ASSERT_EQ(item1->_iMaxDur, item2->_iMaxDur);
ASSERT_EQ(item1->_iPLDam, item2->_iPLDam);
ASSERT_EQ(item1->_iPLToHit, item2->_iPLToHit);
ASSERT_EQ(item1->_iPLAC, item2->_iPLAC);
ASSERT_EQ(item1->_iPLStr, item2->_iPLStr);
ASSERT_EQ(item1->_iPLMag, item2->_iPLMag);
ASSERT_EQ(item1->_iPLDex, item2->_iPLDex);
ASSERT_EQ(item1->_iPLVit, item2->_iPLVit);
ASSERT_EQ(item1->_iPLFR, item2->_iPLFR);
ASSERT_EQ(item1->_iPLLR, item2->_iPLLR);
ASSERT_EQ(item1->_iPLMR, item2->_iPLMR);
ASSERT_EQ(item1->_iPLMana, item2->_iPLMana);
ASSERT_EQ(item1->_iPLHP, item2->_iPLHP);
ASSERT_EQ(item1->_iPLDamMod, item2->_iPLDamMod);
ASSERT_EQ(item1->_iPLGetHit, item2->_iPLGetHit);
ASSERT_EQ(item1->_iPLLight, item2->_iPLLight);
ASSERT_EQ(item1->_iSplLvlAdd, item2->_iSplLvlAdd);
ASSERT_EQ(item1->_iUid, item2->_iUid);
ASSERT_EQ(item1->_iFMinDam, item2->_iFMinDam);
ASSERT_EQ(item1->_iFMaxDam, item2->_iFMaxDam);
ASSERT_EQ(item1->_iLMinDam, item2->_iLMinDam);
ASSERT_EQ(item1->_iLMaxDam, item2->_iLMaxDam);
ASSERT_EQ(item1->_iPrePower, item2->_iPrePower);
ASSERT_EQ(item1->_iSufPower, item2->_iSufPower);
ASSERT_EQ(item1->_iMinStr, item2->_iMinStr);
ASSERT_EQ(item1->_iMinMag, item2->_iMinMag);
ASSERT_EQ(item1->_iMinDex, item2->_iMinDex);
ASSERT_EQ(item1->IDidx, item2->IDidx);
EXPECT_EQ(item1->_itype, item2->_itype);
EXPECT_EQ(item1->_iClass, item2->_iClass);
EXPECT_EQ(item1->_iCurs, item2->_iCurs);
EXPECT_EQ(item1->_iIvalue, item2->_iIvalue);
EXPECT_EQ(item1->_iMinDam, item2->_iMinDam);
EXPECT_EQ(item1->_iMaxDam, item2->_iMaxDam);
EXPECT_EQ(item1->_iAC, item2->_iAC);
EXPECT_EQ(item1->_iFlags, item2->_iFlags);
EXPECT_EQ(item1->_iMiscId, item2->_iMiscId);
EXPECT_EQ(item1->_iSpell, item2->_iSpell);
EXPECT_EQ(item1->_iCharges, item2->_iCharges);
EXPECT_EQ(item1->_iMaxCharges, item2->_iMaxCharges);
EXPECT_EQ(item1->_iDurability, item2->_iDurability);
EXPECT_EQ(item1->_iMaxDur, item2->_iMaxDur);
EXPECT_EQ(item1->_iPLDam, item2->_iPLDam);
EXPECT_EQ(item1->_iPLToHit, item2->_iPLToHit);
EXPECT_EQ(item1->_iPLAC, item2->_iPLAC);
EXPECT_EQ(item1->_iPLStr, item2->_iPLStr);
EXPECT_EQ(item1->_iPLMag, item2->_iPLMag);
EXPECT_EQ(item1->_iPLDex, item2->_iPLDex);
EXPECT_EQ(item1->_iPLVit, item2->_iPLVit);
EXPECT_EQ(item1->_iPLFR, item2->_iPLFR);
EXPECT_EQ(item1->_iPLLR, item2->_iPLLR);
EXPECT_EQ(item1->_iPLMR, item2->_iPLMR);
EXPECT_EQ(item1->_iPLMana, item2->_iPLMana);
EXPECT_EQ(item1->_iPLHP, item2->_iPLHP);
EXPECT_EQ(item1->_iPLDamMod, item2->_iPLDamMod);
EXPECT_EQ(item1->_iPLGetHit, item2->_iPLGetHit);
EXPECT_EQ(item1->_iPLLight, item2->_iPLLight);
EXPECT_EQ(item1->_iSplLvlAdd, item2->_iSplLvlAdd);
EXPECT_EQ(item1->_iUid, item2->_iUid);
EXPECT_EQ(item1->_iFMinDam, item2->_iFMinDam);
EXPECT_EQ(item1->_iFMaxDam, item2->_iFMaxDam);
EXPECT_EQ(item1->_iLMinDam, item2->_iLMinDam);
EXPECT_EQ(item1->_iLMaxDam, item2->_iLMaxDam);
EXPECT_EQ(item1->_iPrePower, item2->_iPrePower);
EXPECT_EQ(item1->_iSufPower, item2->_iSufPower);
EXPECT_EQ(item1->_iMinStr, item2->_iMinStr);
EXPECT_EQ(item1->_iMinMag, item2->_iMinMag);
EXPECT_EQ(item1->_iMinDex, item2->_iMinDex);
EXPECT_EQ(item1->IDidx, item2->IDidx);
}
const PkItemStruct PackedDiabloItems[] = {

Loading…
Cancel
Save