#define NODEBUGNEW
#include "utx.h"
#include "comparelists.h"
using namespace std;
inline void _utxAssert(const StringList& actual, const StringList& expected, char* fname, const long lineno)
{
_utxAssert2((long) actual.size(), (long) expected.size(), fname, lineno, "StringList sizes");
StringList::const_iterator itActual = actual.begin();
StringList::const_iterator itExpected = expected.begin();
while(itActual != actual.end() && itExpected != expected.end())
{
_utxAssert2(*itActual, *itExpected, fname, lineno, "items do not match");
++itActual;
++itExpected;
}
}
inline void _utxAssertNot(const StringList& actual, const StringList& expected, char* fname, const long lineno)
{
if (actual.size() != expected.size()) return;
StringList::const_iterator itActual = actual.begin();
StringList::const_iterator itExpected = expected.begin();
long mismatches = 0;
while(itActual != actual.end() && itExpected != expected.end())
{
if (*itActual != *itExpected) mismatches++;
++itActual;
++itExpected;
}
if (mismatches != 0) return;
_utxAssert2(mismatches, -1L, fname, lineno, string("all items match"));
}
static comparelists mCompare;
//TEST(nulllists)
// {
// try
// {
// mCompare.compare(0, 0);
// }
// catch (Exception )
// {
// utxassert("0 lists", false);
// }
// }
TEST(emptylists)
{
StringList list1;
StringList list2;
try
{
mCompare.compare(list1, list2);
}
catch (exception /*ex*/)
{
utxassert("empty lists", false);
}
utxassert(list1, list2);
}
TEST(happypath)
{
StringList listres;
listres.push_back("a");
listres.push_back("b");
listres.push_back("c");
StringList list1 = listres;
StringList list2 = listres;
mCompare.compare(list1, list2);
utxassert(list1, list2);
utxassert(list1, listres);
utxassert(list2, listres);
}
TEST(missingfromlist1_longer)
{
StringList list1;
list1.push_back("a");
list1.push_back("b");
StringList list2;
list2.push_back("a");
StringList list1res;
list1res.push_back("a");
list1res.push_back("b");
StringList list2res;
list2res.push_back("a");
list2res.push_back("<missing>");
mCompare.compare(list1, list2);
utxassertnot(list1, list2);
utxassert(list1, list1res);
utxassert(list2, list2res);
}
TEST(missingfromlist2_longer)
{
StringList list1;
list1.push_back("a");
StringList list2;
list2.push_back("a");
list2.push_back("b");
StringList list1res;
list1res.push_back("a");
list1res.push_back("<missing>");
StringList list2res;
list2res.push_back("a");
list2res.push_back("b");
mCompare.compare(list1, list2);
utxassertnot(list1, list2);
utxassert(list1, list1res);
utxassert(list2, list2res);
}
TEST(missingfromlist1_first)
{
StringList list1;
list1.push_back("b");
list1.push_back("c");
StringList list2;
list2.push_back("a");
list2.push_back("b");
list2.push_back("c");
StringList list1res;
list1res.push_back("<missing>");
list1res.push_back("b");
list1res.push_back("c");
StringList list2res;
list2res.push_back("a");
list2res.push_back("b");
list2res.push_back("c");
mCompare.compare(list1, list2);
utxassertnot(list1, list2);
utxassert(list1, list1res);
utxassert(list2, list2res);
}
TEST(missingfromlist1_middle)
{
StringList list1res;
list1res.push_back("a");
list1res.push_back("<missing>");
list1res.push_back("c");
StringList list2res;
list2res.push_back("a");
list2res.push_back("b");
list2res.push_back("c");
StringList list1;
list1.push_back("a");
list1.push_back("c");
StringList list2;
list2.push_back("a");
list2.push_back("b");
list2.push_back("c");
mCompare.compare(list1, list2);
utxassertnot(list1, list2);
utxassert(list1, list1res);
utxassert(list2, list2res);
}
TEST(missingfromlist1_last)
{
StringList list1;
list1.push_back("a");
list1.push_back("b");
StringList list2;
list2.push_back("a");
list2.push_back("b");
list2.push_back("c");
StringList list1res;
list1res.push_back("a");
list1res.push_back("b");
list1res.push_back("<missing>");
StringList list2res;
list2res.push_back("a");
list2res.push_back("b");
list2res.push_back("c");
mCompare.compare(list1, list2);
utxassertnot(list1, list2);
utxassert(list1, list1res);
utxassert(list2, list2res);
}
TEST(missingfromlist2_first)
{
StringList list1;
list1.push_back("a");
list1.push_back("b");
list1.push_back("c");
StringList list2;
list2.push_back("b");
list2.push_back("c");
StringList list1res;
list1res.push_back("a");
list1res.push_back("b");
list1res.push_back("c");
StringList list2res;
list2res.push_back("<missing>");
list2res.push_back("b");
list2res.push_back("c");
mCompare.compare(list1, list2);
utxassert(list1.size(), list2.size());
utxassertnot(list1, list2);
utxassert(list1, list1res);
utxassert(list2, list2res);
}
TEST(missingfromlist2_middle)
{
StringList list1;
list1.push_back("a");
list1.push_back("b");
list1.push_back("c");
StringList list2;
list2.push_back("a");
list2.push_back("c");
StringList list1res;
list1res.push_back("a");
list1res.push_back("b");
list1res.push_back("c");
StringList list2res;
list2res.push_back("a");
list2res.push_back("<missing>");
list2res.push_back("c");
mCompare.compare(list1, list2);
utxassert(list1.size(), list2.size());
utxassertnot(list1, list2);
utxassert(list1, list1res);
utxassert(list2, list2res);
}
TEST(missingfromlist2_last)
{
StringList list1;
list1.push_back("a");
list1.push_back("b");
list1.push_back("c");
StringList list2;
list2.push_back("a");
list2.push_back("b");
StringList list1res;
list1res.push_back("a");
list1res.push_back("b");
list1res.push_back("c");
StringList list2res;
list2res.push_back("a");
list2res.push_back("b");
list2res.push_back("<missing>");
mCompare.compare(list1, list2);
utxassert(list1.size(), list2.size());
utxassertnot(list1, list2);
utxassert(list1, list1res);
utxassert(list2, list2res);
}
TEST(missingfromboth)
{
StringList list1;
list1.push_back("a");
list1.push_back("c");
StringList list2;
list2.push_back("a");
list2.push_back("b");
list2.push_back("d");
StringList list1res;
list1res.push_back("a");
list1res.push_back("<missing>");
list1res.push_back("c");
list1res.push_back("<missing>");
StringList list2res;
list2res.push_back("a");
list2res.push_back("b");
list2res.push_back("<missing>");
list2res.push_back("d");
mCompare.compare(list1, list2);
utxassert(list1.size(), list2.size());
utxassertnot(list1, list2);
utxassert(list1, list1res);
utxassert(list2, list2res);
}
|