1
0
mirror of https://github.com/VCMP-SqMod/SqMod.git synced 2025-03-04 19:27:29 +01:00
Sandu Liviu Catalin 4a6bfc086c Major plugin refactor and cleanup.
Switched to POCO library for unified platform/library interface.
Deprecated the external module API. It was creating more problems than solving.
Removed most built-in libraries in favor of system libraries for easier maintenance.
Cleaned and secured code with help from static analyzers.
2021-01-30 08:51:39 +02:00

1212 lines
36 KiB
C++

//
// TuplesTest.cpp
//
// Copyright (c) 2006, Applied Informatics Software Engineering GmbH.
// and Contributors.
//
// SPDX-License-Identifier: BSL-1.0
//
#include "TuplesTest.h"
#include "CppUnit/TestCaller.h"
#include "CppUnit/TestSuite.h"
#include "Poco/Tuple.h"
#include "Poco/Void.h"
#include <algorithm>
#include <map>
using Poco::TypeList;
using Poco::NullTypeList;
using Poco::TypeListType;
using Poco::TypeGetter;
using Poco::TypeLocator;
using Poco::TypeAppender;
using Poco::TypeOneEraser;
using Poco::TypeAllEraser;
using Poco::TypeDuplicateEraser;
using Poco::TypeOneReplacer;
using Poco::TypeAllReplacer;
using Poco::Tuple;
using Poco::Void;
using Poco::Int8;
using Poco::UInt8;
using Poco::Int16;
using Poco::UInt16;
using Poco::Int32;
using Poco::UInt32;
using Poco::Int8;
using Poco::UInt8;
using Poco::Int16;
using Poco::UInt16;
using Poco::Int32;
using Poco::UInt32;
TuplesTest::TuplesTest(const std::string& name): CppUnit::TestCase(name)
{
}
TuplesTest::~TuplesTest()
{
}
void TuplesTest::testTuple1()
{
Tuple<int> t;
assertTrue (t.length == 1);
t.set<0>(-1);
assertTrue (t.get<0>() == -1);
Tuple<int> t2(-1);
assertTrue (t2.get<0>() == -1);
Tuple<int> tCpy (t2);
assertTrue (t2.get<0>() == tCpy.get<0>());
assertTrue (t2 == tCpy);
Tuple<int> tCpy2 = t2;
assertTrue (t2.get<0>() == tCpy2.get<0>());
assertTrue (t2 == tCpy2);
tCpy2.set<0>(888);
assertTrue (t2 != tCpy2);
assertTrue (t < tCpy2);
Tuple<int, std::string> t3(0);
assertTrue (t3.get<1>().empty());
Tuple<int, std::string, std::vector<std::string> > t4(0);
assertTrue (t4.get<1>().empty());
assertTrue (t4.get<2>().empty());
}
void TuplesTest::testTuple2()
{
Tuple<int, Void> dummy1;
assertTrue (dummy1.length == 2);
dummy1.set<0>(-1);
assertTrue (dummy1.get<0>() == -1);
//test partial init
Tuple<int, Void> dummy11(0);
Tuple<Void, int> dummy2;
dummy2.set<1>(-1);
assertTrue (dummy2.get<1>() == -1);
Tuple<Void, int> dummy3;
dummy3.set<1>(-1);
assertTrue (dummy3.get<1>() == -1);
Tuple<std::string, int> aTuple;
aTuple.set<0>("str");
aTuple.set<1>(1);
assertTrue (aTuple.get<0>() == "str");
assertTrue (aTuple.get<1>() == 1);
Tuple<std::string, int> aTuple2(aTuple);
assertTrue (aTuple == aTuple2);
aTuple2.set<1>(99);
assertTrue (aTuple != aTuple2);
aTuple2.set<1>(100000);
assertTrue (aTuple < aTuple2);
}
void TuplesTest::testTuple3()
{
Tuple<int, Void, Void> dummy1;
assertTrue (dummy1.length == 3);
dummy1.set<0>(-1);
assertTrue (dummy1.get<0>() == -1);
//test partial init
Tuple<int, Void, Void> dummy11(0);
Tuple<Void, int, Void> dummy2;
dummy2.set<1>(-1);
assertTrue (dummy2.get<1>() == -1);
Tuple<Void, Void, int> dummy3;
dummy3.set<2>(-1);
assertTrue (dummy3.get<2>() == -1);
Tuple<std::string, int, bool> aTuple;
aTuple.set<0>("str");
aTuple.set<1>(1);
aTuple.set<2>(true);
assertTrue (aTuple.get<0>() == "str");
assertTrue (aTuple.get<1>() == 1);
assertTrue (aTuple.get<2>());
Tuple<std::string, int, bool> aTuple2(aTuple);
assertTrue (aTuple == aTuple2);
aTuple2.set<2>(false);
assertTrue (aTuple != aTuple2);
aTuple2.set<1>(100000);
assertTrue (aTuple < aTuple2);
}
void TuplesTest::testTuple4()
{
Tuple<int, Void, Void, Void> dummy1;
assertTrue (dummy1.length == 4);
dummy1.set<0>(-1);
assertTrue (dummy1.get<0>() == -1);
//test partial init
Tuple<int, Void, Void, Void> dummy11(0);
Tuple<Void, int, Void, Void> dummy2;
dummy2.set<1>(-1);
assertTrue (dummy2.get<1>() == -1);
Tuple<Void, Void, Void, int> dummy3;
dummy3.set<3>(-1);
assertTrue (dummy3.get<3>() == -1);
Tuple<std::string, int, bool, float> aTuple;
aTuple.set<0>("str");
aTuple.set<1>(1);
aTuple.set<2>(true);
aTuple.set<3>(3.14f);
assertTrue (aTuple.get<0>() == "str");
assertTrue (aTuple.get<1>() == 1);
assertTrue (aTuple.get<2>());
assertTrue (aTuple.get<3>() >= 3.13f && aTuple.get<3>() <= 3.15f);
Tuple<std::string, int, bool, float> aTuple2(aTuple);
assertTrue (aTuple == aTuple2);
aTuple2.set<2>(false);
assertTrue (aTuple != aTuple2);
aTuple2.set<1>(100000);
assertTrue (aTuple < aTuple2);
}
void TuplesTest::testTuple5()
{
Tuple<int, Void, Void, Void, Void> dummy1;
assertTrue (dummy1.length == 5);
dummy1.set<0>(-1);
assertTrue (dummy1.get<0>() == -1);
//test partial init
Tuple<int, Void, Void, Void, Void> dummy11(0);
Tuple<Void, int, Void, Void, Void> dummy2;
dummy2.set<1>(-1);
assertTrue (dummy2.get<1>() == -1);
Tuple<Void, Void, Void, Void, int> dummy3;
dummy3.set<4>(-1);
assertTrue (dummy3.get<4>() == -1);
Tuple<std::string, int, bool, float, char> aTuple;
aTuple.set<0>("str");
aTuple.set<1>(1);
aTuple.set<2>(true);
aTuple.set<3>(3.14f);
aTuple.set<4>(' ');
assertTrue (aTuple.get<0>() == "str");
assertTrue (aTuple.get<1>() == 1);
assertTrue (aTuple.get<2>());
assertTrue (aTuple.get<3>() >= 3.13f && aTuple.get<3>() <= 3.15f);
assertTrue (aTuple.get<4>() == ' ');
Tuple<std::string, int, bool, float, char> aTuple2(aTuple);
assertTrue (aTuple == aTuple2);
aTuple2.set<2>(false);
assertTrue (aTuple != aTuple2);
aTuple2.set<1>(100000);
assertTrue (aTuple < aTuple2);
}
void TuplesTest::testTuple6()
{
Tuple<std::string, int, bool, float, char, long> aTuple;
assertTrue (aTuple.length == 6);
Tuple<std::string, int, bool, float, char, long>
aTuple2("1", 1, true, 3.14f, 'c', 999);
assertTrue (aTuple != aTuple2);
aTuple = aTuple2;
assertTrue (aTuple == aTuple2);
aTuple2.get<1>()++;
assertTrue (aTuple < aTuple2);
}
void TuplesTest::testTuple7()
{
Tuple<std::string, int, bool, float, char, long, double> aTuple;
assertTrue (aTuple.length == 7);
Tuple<std::string, int, bool, float, char, long, double>
aTuple2("1", 1, true, 3.14f, 'c', 999, 33.14);
assertTrue (aTuple != aTuple2);
aTuple = aTuple2;
assertTrue (aTuple == aTuple2);
aTuple2.get<1>()++;
assertTrue (aTuple < aTuple2);
}
void TuplesTest::testTuple8()
{
Tuple<std::string, int, bool, float, char, long, double, short> aTuple;
assertTrue (aTuple.length == 8);
Tuple<std::string, int, bool, float, char, long, double, short>
aTuple2("1", 1, true, 3.14f, 'c', 999, 33.14, 32700);
assertTrue (aTuple != aTuple2);
aTuple = aTuple2;
assertTrue (aTuple == aTuple2);
aTuple2.get<1>()++;
assertTrue (aTuple < aTuple2);
}
void TuplesTest::testTuple9()
{
Tuple<std::string, int, bool, float, char, long, double, short, std::string> aTuple;
assertTrue (aTuple.length == 9);
Tuple<std::string, int, bool, float, char, long, double, short, std::string>
aTuple2("1", 1, true, 3.14f, 'c', 999, 33.14, 32700, "2");
assertTrue (aTuple != aTuple2);
aTuple = aTuple2;
assertTrue (aTuple == aTuple2);
aTuple2.get<1>()++;
assertTrue (aTuple < aTuple2);
}
void TuplesTest::testTuple10()
{
typedef Tuple<std::string, int, bool, float, char, long, double, short, std::string, int> TupleType;
TupleType aTuple;
assertTrue (aTuple.length == 10);
TupleType aTuple2("1", 1, true, 3.14f, 'c', 999, 33.14, 32700, "2", 2);
assertTrue (aTuple != aTuple2);
aTuple = aTuple2;
assertTrue (aTuple == aTuple2);
aTuple2.get<1>()++;
assertTrue (aTuple < aTuple2);
}
void TuplesTest::testTuple11()
{
typedef Tuple<std::string, int, bool, float, char, long, double, short, std::string, int,
std::string> TupleType;
TupleType aTuple;
assertTrue (aTuple.length == 11);
TupleType aTuple2("1", 1, true, 3.14f, 'c', 999, 33.14, 32700, "2", 2, "1");
assertTrue (aTuple != aTuple2);
aTuple = aTuple2;
assertTrue (aTuple == aTuple2);
aTuple2.get<1>()++;
assertTrue (aTuple < aTuple2);
}
void TuplesTest::testTuple12()
{
typedef Tuple<std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int> TupleType;
TupleType aTuple;
assertTrue (aTuple.length == 12);
TupleType aTuple2("1", 1, true, 3.14f, 'c', 999, 33.14, 32700, "2", 2, "1", 1);
assertTrue (aTuple != aTuple2);
aTuple = aTuple2;
assertTrue (aTuple == aTuple2);
aTuple2.get<1>()++;
assertTrue (aTuple < aTuple2);
}
void TuplesTest::testTuple13()
{
typedef Tuple<std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool> TupleType;
TupleType aTuple;
assertTrue (aTuple.length == 13);
TupleType aTuple2("1", 1, true, 3.14f, 'c', 999, 33.14, 32700, "2", 2, "1", 1, true);
assertTrue (aTuple != aTuple2);
aTuple = aTuple2;
assertTrue (aTuple == aTuple2);
aTuple2.get<1>()++;
assertTrue (aTuple < aTuple2);
}
void TuplesTest::testTuple14()
{
typedef Tuple<std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float> TupleType;
TupleType aTuple;
assertTrue (aTuple.length == 14);
TupleType aTuple2("1", 1, true, 3.14f, 'c', 999, 33.14, 32700, "2", 2, "1", 1, true, 3.14f);
assertTrue (aTuple != aTuple2);
aTuple = aTuple2;
assertTrue (aTuple == aTuple2);
aTuple2.get<1>()++;
assertTrue (aTuple < aTuple2);
}
void TuplesTest::testTuple15()
{
typedef Tuple<std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char> TupleType;
TupleType aTuple;
assertTrue (aTuple.length == 15);
TupleType aTuple2("1", 1, true, 3.14f, 'c', 999, 33.14, 32700, "2", 2, "1", 1, true, 3.14f, 'c');
assertTrue (aTuple != aTuple2);
aTuple = aTuple2;
assertTrue (aTuple == aTuple2);
aTuple2.get<1>()++;
assertTrue (aTuple < aTuple2);
}
void TuplesTest::testTuple16()
{
typedef Tuple<std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long> TupleType;
TupleType aTuple;
assertTrue (aTuple.length == 16);
TupleType aTuple2("1", 1, true, 3.14f, 'c', 999, 33.14, 32700, "2", 2, "1", 1, true, 3.14f, 'c', 999);
assertTrue (aTuple != aTuple2);
aTuple = aTuple2;
assertTrue (aTuple == aTuple2);
aTuple2.get<1>()++;
assertTrue (aTuple < aTuple2);
}
void TuplesTest::testTuple17()
{
typedef Tuple<std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double> TupleType;
TupleType aTuple;
assertTrue (aTuple.length == 17);
TupleType aTuple2("1", 1, true, 3.14f, 'c', 999, 33.14, 32700, "2", 2, "1", 1, true, 3.14f, 'c', 999, 33.14);
assertTrue (aTuple != aTuple2);
aTuple = aTuple2;
assertTrue (aTuple == aTuple2);
aTuple2.get<1>()++;
assertTrue (aTuple < aTuple2);
}
void TuplesTest::testTuple18()
{
typedef Tuple<std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double, short> TupleType;
TupleType aTuple;
assertTrue (aTuple.length == 18);
TupleType aTuple2("1", 1, true, 3.14f, 'c', 999, 33.14, 32700, "2", 2, "1", 1, true, 3.14f, 'c', 999, 33.14, 32700);
assertTrue (aTuple != aTuple2);
aTuple = aTuple2;
assertTrue (aTuple == aTuple2);
aTuple2.get<1>()++;
assertTrue (aTuple < aTuple2);
}
void TuplesTest::testTuple19()
{
typedef Tuple<std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double, short, std::string> TupleType;
TupleType aTuple;
assertTrue (aTuple.length == 19);
TupleType aTuple2("1", 1, true, 3.14f, 'c', 999, 33.14, 32700, "2", 2, "1", 1, true, 3.14f, 'c', 999, 33.14, 32700, "2");
assertTrue (aTuple != aTuple2);
aTuple = aTuple2;
assertTrue (aTuple == aTuple2);
aTuple2.get<1>()++;
assertTrue (aTuple < aTuple2);
}
void TuplesTest::testTuple20()
{
typedef Tuple<std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double, short, std::string, int> TupleType;
TupleType aTuple;
assertTrue (aTuple.length == 20);
TupleType aTuple2("1", 1, true, 3.14f, 'c', 999, 33.14, 32700, "2", 2,
"1", 1, true, 3.14f, 'c', 999, 33.14, 32700, "2", 2);
assertTrue (aTuple != aTuple2);
aTuple = aTuple2;
assertTrue (aTuple == aTuple2);
aTuple2.get<1>()++;
assertTrue (aTuple < aTuple2);
}
void TuplesTest::testTuple21()
{
typedef Tuple<std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double, short, std::string, int,
std::string> TupleType;
TupleType aTuple;
assertTrue (aTuple.length == 21);
TupleType aTuple2("1", 1, true, 3.14f, 'a', 999, 33.14, 32700, "2", 2,
"3", 3, true, 3.14f, 'b', 999, 33.14, 32700, "4", 4,
"5");
assertTrue (aTuple != aTuple2);
TupleType aTuple3(aTuple2);
assertTrue (aTuple3 == aTuple2);
aTuple = aTuple2;
assertTrue (aTuple == aTuple2);
aTuple2.get<1>()++;
assertTrue (aTuple < aTuple2);
}
void TuplesTest::testTuple22()
{
typedef Tuple<std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int> TupleType;
TupleType aTuple;
assertTrue (aTuple.length == 22);
TupleType aTuple2("1", 1, true, 3.14f, 'a', 999, 33.14, 32700, "2", 2,
"3", 3, true, 3.14f, 'b', 999, 33.14, 32700, "4", 4,
"5", 5);
assertTrue (aTuple != aTuple2);
TupleType aTuple3(aTuple2);
assertTrue (aTuple3 == aTuple2);
aTuple = aTuple2;
assertTrue (aTuple == aTuple2);
aTuple2.get<1>()++;
assertTrue (aTuple < aTuple2);
}
void TuplesTest::testTuple23()
{
typedef Tuple<std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool> TupleType;
TupleType aTuple;
assertTrue (aTuple.length == 23);
TupleType aTuple2("1", 1, true, 3.14f, 'a', 999, 33.14, 32700, "2", 2,
"3", 3, true, 3.14f, 'b', 999, 33.14, 32700, "4", 4,
"5", 5, true);
assertTrue (aTuple != aTuple2);
TupleType aTuple3(aTuple2);
assertTrue (aTuple3 == aTuple2);
aTuple = aTuple2;
assertTrue (aTuple == aTuple2);
aTuple2.get<1>()++;
assertTrue (aTuple < aTuple2);
}
void TuplesTest::testTuple24()
{
typedef Tuple<std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float> TupleType;
TupleType aTuple;
assertTrue (aTuple.length == 24);
TupleType aTuple2("1", 1, true, 3.14f, 'a', 999, 33.14, 32700, "2", 2,
"3", 3, true, 3.14f, 'b', 999, 33.14, 32700, "4", 4,
"5", 5, true, 3.14f);
assertTrue (aTuple != aTuple2);
TupleType aTuple3(aTuple2);
assertTrue (aTuple3 == aTuple2);
aTuple = aTuple2;
assertTrue (aTuple == aTuple2);
aTuple2.get<1>()++;
assertTrue (aTuple < aTuple2);
}
void TuplesTest::testTuple25()
{
typedef Tuple<std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char> TupleType;
TupleType aTuple;
assertTrue (aTuple.length == 25);
TupleType aTuple2("1", 1, true, 3.14f, 'a', 999, 33.14, 32700, "2", 2,
"3", 3, true, 3.14f, 'b', 999, 33.14, 32700, "4", 4,
"5", 5, true, 3.14f, 'c');
assertTrue (aTuple != aTuple2);
TupleType aTuple3(aTuple2);
assertTrue (aTuple3 == aTuple2);
aTuple = aTuple2;
assertTrue (aTuple == aTuple2);
aTuple2.get<1>()++;
assertTrue (aTuple < aTuple2);
}
void TuplesTest::testTuple26()
{
typedef Tuple<std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long> TupleType;
TupleType aTuple;
assertTrue (aTuple.length == 26);
TupleType aTuple2("1", 1, true, 3.14f, 'a', 999, 33.14, 32700, "2", 2,
"3", 3, true, 3.14f, 'b', 999, 33.14, 32700, "4", 4,
"5", 5, true, 3.14f, 'c', 999);
assertTrue (aTuple != aTuple2);
TupleType aTuple3(aTuple2);
assertTrue (aTuple3 == aTuple2);
aTuple = aTuple2;
assertTrue (aTuple == aTuple2);
aTuple2.get<1>()++;
assertTrue (aTuple < aTuple2);
}
void TuplesTest::testTuple27()
{
typedef Tuple<std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double> TupleType;
TupleType aTuple;
assertTrue (aTuple.length == 27);
TupleType aTuple2("1", 1, true, 3.14f, 'a', 999, 33.14, 32700, "2", 2,
"3", 3, true, 3.14f, 'b', 999, 33.14, 32700, "4", 4,
"5", 5, true, 3.14f, 'c', 999, 33.14);
assertTrue (aTuple != aTuple2);
TupleType aTuple3(aTuple2);
assertTrue (aTuple3 == aTuple2);
aTuple = aTuple2;
assertTrue (aTuple == aTuple2);
aTuple2.get<1>()++;
assertTrue (aTuple < aTuple2);
}
void TuplesTest::testTuple28()
{
typedef Tuple<std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double, short> TupleType;
TupleType aTuple;
assertTrue (aTuple.length == 28);
TupleType aTuple2("1", 1, true, 3.14f, 'a', 999, 33.14, 32700, "2", 2,
"3", 3, true, 3.14f, 'b', 999, 33.14, 32700, "4", 4,
"5", 5, true, 3.14f, 'c', 999, 33.14, 32700);
assertTrue (aTuple != aTuple2);
TupleType aTuple3(aTuple2);
assertTrue (aTuple3 == aTuple2);
aTuple = aTuple2;
assertTrue (aTuple == aTuple2);
aTuple2.get<1>()++;
assertTrue (aTuple < aTuple2);
}
void TuplesTest::testTuple29()
{
typedef Tuple<std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double, short, std::string> TupleType;
TupleType aTuple;
assertTrue (aTuple.length == 29);
TupleType aTuple2("1", 1, true, 3.14f, 'a', 999, 33.14, 32700, "2", 2,
"3", 3, true, 3.14f, 'b', 999, 33.14, 32700, "4", 4,
"5", 5, true, 3.14f, 'c', 999, 33.14, 32700, "6");
assertTrue (aTuple != aTuple2);
TupleType aTuple3(aTuple2);
assertTrue (aTuple3 == aTuple2);
aTuple = aTuple2;
assertTrue (aTuple == aTuple2);
aTuple2.get<1>()++;
assertTrue (aTuple < aTuple2);
}
void TuplesTest::testTuple30()
{
typedef Tuple<std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double, short, std::string, int> TupleType;
TupleType aTuple;
assertTrue (aTuple.length == 30);
TupleType aTuple2("1", 1, true, 3.14f, 'a', 999, 33.14, 32700, "2", 2,
"3", 3, true, 3.14f, 'b', 999, 33.14, 32700, "4", 4,
"5", 5, true, 3.14f, 'c', 999, 33.14, 32700, "6", 6);
assertTrue (aTuple != aTuple2);
TupleType aTuple3(aTuple2);
assertTrue (aTuple3 == aTuple2);
aTuple = aTuple2;
assertTrue (aTuple == aTuple2);
aTuple2.get<1>()++;
assertTrue (aTuple < aTuple2);
}
void TuplesTest::testTuple31()
{
typedef Tuple<std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double, short, std::string, int,
std::string> TupleType;
TupleType aTuple;
assertTrue (aTuple.length == 31);
TupleType aTuple2("1", 1, true, 3.14f, 'a', 999, 33.14, 32700, "2", 2,
"3", 3, true, 3.14f, 'b', 999, 33.14, 32700, "4", 4,
"5", 5, true, 3.14f, 'c', 999, 33.14, 32700, "6", 6,
"7");
assertTrue (aTuple != aTuple2);
TupleType aTuple3(aTuple2);
assertTrue (aTuple3 == aTuple2);
aTuple = aTuple2;
assertTrue (aTuple == aTuple2);
aTuple2.get<1>()++;
assertTrue (aTuple < aTuple2);
}
void TuplesTest::testTuple32()
{
typedef Tuple<std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int> TupleType;
TupleType aTuple;
assertTrue (aTuple.length == 32);
TupleType aTuple2("1", 1, true, 3.14f, 'a', 999, 33.14, 32700, "2", 2,
"3", 3, true, 3.14f, 'b', 999, 33.14, 32700, "4", 4,
"5", 5, true, 3.14f, 'c', 999, 33.14, 32700, "6", 6,
"7", 7);
assertTrue (aTuple != aTuple2);
TupleType aTuple3(aTuple2);
assertTrue (aTuple3 == aTuple2);
aTuple = aTuple2;
assertTrue (aTuple == aTuple2);
aTuple2.get<1>()++;
assertTrue (aTuple < aTuple2);
}
void TuplesTest::testTuple33()
{
typedef Tuple<std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool> TupleType;
TupleType aTuple;
assertTrue (aTuple.length == 33);
TupleType aTuple2("1", 1, true, 3.14f, 'a', 999, 33.14, 32700, "2", 2,
"3", 3, true, 3.14f, 'b', 999, 33.14, 32700, "4", 4,
"5", 5, true, 3.14f, 'c', 999, 33.14, 32700, "6", 6,
"7", 7, true);
assertTrue (aTuple != aTuple2);
TupleType aTuple3(aTuple2);
assertTrue (aTuple3 == aTuple2);
aTuple = aTuple2;
assertTrue (aTuple == aTuple2);
aTuple2.get<1>()++;
assertTrue (aTuple < aTuple2);
}
void TuplesTest::testTuple34()
{
typedef Tuple<std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float> TupleType;
TupleType aTuple;
assertTrue (aTuple.length == 34);
TupleType aTuple2("1", 1, true, 3.14f, 'a', 999, 33.14, 32700, "2", 2,
"3", 3, true, 3.14f, 'b', 999, 33.14, 32700, "4", 4,
"5", 5, true, 3.14f, 'c', 999, 33.14, 32700, "6", 6,
"7", 7, true, 3.14f);
assertTrue (aTuple != aTuple2);
TupleType aTuple3(aTuple2);
assertTrue (aTuple3 == aTuple2);
aTuple = aTuple2;
assertTrue (aTuple == aTuple2);
aTuple2.get<1>()++;
assertTrue (aTuple < aTuple2);
}
void TuplesTest::testTuple35()
{
typedef Tuple<std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char> TupleType;
TupleType aTuple;
assertTrue (aTuple.length == 35);
TupleType aTuple2("1", 1, true, 3.14f, 'a', 999, 33.14, 32700, "2", 2,
"3", 3, true, 3.14f, 'b', 999, 33.14, 32700, "4", 4,
"5", 5, true, 3.14f, 'c', 999, 33.14, 32700, "6", 6,
"7", 7, true, 3.14f, 'd');
assertTrue (aTuple != aTuple2);
TupleType aTuple3(aTuple2);
assertTrue (aTuple3 == aTuple2);
aTuple = aTuple2;
assertTrue (aTuple == aTuple2);
aTuple2.get<1>()++;
assertTrue (aTuple < aTuple2);
}
void TuplesTest::testTuple36()
{
typedef Tuple<std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long> TupleType;
TupleType aTuple;
assertTrue (aTuple.length == 36);
TupleType aTuple2("1", 1, true, 3.14f, 'a', 999, 33.14, 32700, "2", 2,
"3", 3, true, 3.14f, 'b', 999, 33.14, 32700, "4", 4,
"5", 5, true, 3.14f, 'c', 999, 33.14, 32700, "6", 6,
"7", 7, true, 3.14f, 'd', 999);
assertTrue (aTuple != aTuple2);
TupleType aTuple3(aTuple2);
assertTrue (aTuple3 == aTuple2);
aTuple = aTuple2;
assertTrue (aTuple == aTuple2);
aTuple2.get<1>()++;
assertTrue (aTuple < aTuple2);
}
void TuplesTest::testTuple37()
{
typedef Tuple<std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double> TupleType;
TupleType aTuple;
assertTrue (aTuple.length == 37);
TupleType aTuple2("1", 1, true, 3.14f, 'a', 999, 33.14, 32700, "2", 2,
"3", 3, true, 3.14f, 'b', 999, 33.14, 32700, "4", 4,
"5", 5, true, 3.14f, 'c', 999, 33.14, 32700, "6", 6,
"7", 7, true, 3.14f, 'd', 999, 33.14);
assertTrue (aTuple != aTuple2);
TupleType aTuple3(aTuple2);
assertTrue (aTuple3 == aTuple2);
aTuple = aTuple2;
assertTrue (aTuple == aTuple2);
aTuple2.get<1>()++;
assertTrue (aTuple < aTuple2);
}
void TuplesTest::testTuple38()
{
typedef Tuple<std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double, short> TupleType;
TupleType aTuple;
assertTrue (aTuple.length == 38);
TupleType aTuple2("1", 1, true, 3.14f, 'a', 999, 33.14, 32700, "2", 2,
"3", 3, true, 3.14f, 'b', 999, 33.14, 32700, "4", 4,
"5", 5, true, 3.14f, 'c', 999, 33.14, 32700, "6", 6,
"7", 7, true, 3.14f, 'd', 999, 33.14, 32700);
assertTrue (aTuple != aTuple2);
TupleType aTuple3(aTuple2);
assertTrue (aTuple3 == aTuple2);
aTuple = aTuple2;
assertTrue (aTuple == aTuple2);
aTuple2.get<1>()++;
assertTrue (aTuple < aTuple2);
}
void TuplesTest::testTuple39()
{
typedef Tuple<std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double, short, std::string> TupleType;
TupleType aTuple;
assertTrue (aTuple.length == 39);
TupleType aTuple2("1", 1, true, 3.14f, 'a', 999, 33.14, 32700, "2", 2,
"3", 3, true, 3.14f, 'b', 999, 33.14, 32700, "4", 4,
"5", 5, true, 3.14f, 'c', 999, 33.14, 32700, "6", 6,
"7", 7, true, 3.14f, 'd', 999, 33.14, 32700, "8");
assertTrue (aTuple != aTuple2);
TupleType aTuple3(aTuple2);
assertTrue (aTuple3 == aTuple2);
aTuple = aTuple2;
assertTrue (aTuple == aTuple2);
aTuple2.get<1>()++;
assertTrue (aTuple < aTuple2);
}
void TuplesTest::testTuple40()
{
typedef Tuple<std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double, short, std::string, int> TupleType;
TupleType aTuple;
assertTrue (aTuple.length == 40);
assertTrue (aTuple.get<0>() == "");
assertTrue (aTuple.get<1>() == 0);
assertTrue (aTuple.get<2>() == false);
assertTrue (aTuple.get<4>() == 0);
assertTrue (aTuple.get<5>() == 0);
assertTrue (aTuple.get<7>() == 0);
assertTrue (aTuple.get<8>() == "");
assertTrue (aTuple.get<9>() == 0);
assertTrue (aTuple.get<10>() == "");
assertTrue (aTuple.get<11>() == 0);
assertTrue (aTuple.get<12>() == false);
assertTrue (aTuple.get<14>() == 0);
assertTrue (aTuple.get<15>() == 0);
assertTrue (aTuple.get<17>() == 0);
assertTrue (aTuple.get<18>() == "");
assertTrue (aTuple.get<19>() == 0);
assertTrue (aTuple.get<20>() == "");
assertTrue (aTuple.get<21>() == 0);
assertTrue (aTuple.get<22>() == false);
assertTrue (aTuple.get<24>() == 0);
assertTrue (aTuple.get<25>() == 0);
assertTrue (aTuple.get<27>() == 0);
assertTrue (aTuple.get<28>() == "");
assertTrue (aTuple.get<29>() == 0);
assertTrue (aTuple.get<30>() == "");
assertTrue (aTuple.get<31>() == 0);
assertTrue (aTuple.get<32>() == false);
assertTrue (aTuple.get<34>() == 0);
assertTrue (aTuple.get<35>() == 0);
assertTrue (aTuple.get<37>() == 0);
assertTrue (aTuple.get<38>() == "");
assertTrue (aTuple.get<39>() == 0);
TupleType aTuple2("1", 1, true, 3.14f, 'a', 999, 33.14, 32700, "2", 2,
"3", 3, true, 3.14f, 'b', 999, 33.14, 32700, "4", 4,
"5", 5, true, 3.14f, 'c', 999, 33.14, 32700, "6", 6,
"7", 7, true, 3.14f, 'd', 999, 33.14, 32700, "8", 8);
assertTrue (aTuple2.get<0>() == "1");
assertTrue (aTuple2.get<1>() == 1);
assertTrue (aTuple2.get<2>() == true);
assertTrue (aTuple2.get<4>() == 'a');
assertTrue (aTuple2.get<5>() == 999);
assertTrue (aTuple2.get<7>() == 32700);
assertTrue (aTuple2.get<8>() == "2");
assertTrue (aTuple2.get<9>() == 2);
assertTrue (aTuple2.get<10>() == "3");
assertTrue (aTuple2.get<11>() == 3);
assertTrue (aTuple2.get<12>() == true);
assertTrue (aTuple2.get<14>() == 'b');
assertTrue (aTuple2.get<15>() == 999);
assertTrue (aTuple2.get<17>() == 32700);
assertTrue (aTuple2.get<18>() == "4");
assertTrue (aTuple2.get<19>() == 4);
assertTrue (aTuple2.get<20>() == "5");
assertTrue (aTuple2.get<21>() == 5);
assertTrue (aTuple2.get<22>() == true);
assertTrue (aTuple2.get<24>() == 'c');
assertTrue (aTuple2.get<25>() == 999);
assertTrue (aTuple2.get<27>() == 32700);
assertTrue (aTuple2.get<28>() == "6");
assertTrue (aTuple2.get<29>() == 6);
assertTrue (aTuple2.get<30>() == "7");
assertTrue (aTuple2.get<31>() == 7);
assertTrue (aTuple2.get<32>() == true);
assertTrue (aTuple2.get<34>() == 'd');
assertTrue (aTuple2.get<35>() == 999);
assertTrue (aTuple2.get<37>() == 32700);
assertTrue (aTuple2.get<38>() == "8");
assertTrue (aTuple2.get<39>() == 8);
assertTrue (aTuple != aTuple2);
TupleType aTuple3(aTuple2);
assertTrue (aTuple3.get<0>() == "1");
assertTrue (aTuple3.get<1>() == 1);
assertTrue (aTuple3.get<2>() == true);
assertTrue (aTuple3.get<4>() == 'a');
assertTrue (aTuple3.get<5>() == 999);
assertTrue (aTuple3.get<7>() == 32700);
assertTrue (aTuple3.get<8>() == "2");
assertTrue (aTuple3.get<9>() == 2);
assertTrue (aTuple3.get<10>() == "3");
assertTrue (aTuple3.get<11>() == 3);
assertTrue (aTuple3.get<12>() == true);
assertTrue (aTuple3.get<14>() == 'b');
assertTrue (aTuple3.get<15>() == 999);
assertTrue (aTuple3.get<17>() == 32700);
assertTrue (aTuple3.get<18>() == "4");
assertTrue (aTuple3.get<19>() == 4);
assertTrue (aTuple3.get<20>() == "5");
assertTrue (aTuple3.get<21>() == 5);
assertTrue (aTuple3.get<22>() == true);
assertTrue (aTuple3.get<24>() == 'c');
assertTrue (aTuple3.get<25>() == 999);
assertTrue (aTuple3.get<27>() == 32700);
assertTrue (aTuple3.get<28>() == "6");
assertTrue (aTuple3.get<29>() == 6);
assertTrue (aTuple3.get<30>() == "7");
assertTrue (aTuple3.get<31>() == 7);
assertTrue (aTuple3.get<32>() == true);
assertTrue (aTuple3.get<34>() == 'd');
assertTrue (aTuple3.get<35>() == 999);
assertTrue (aTuple3.get<37>() == 32700);
assertTrue (aTuple3.get<38>() == "8");
assertTrue (aTuple3.get<39>() == 8);
assertTrue (aTuple3 == aTuple2);
aTuple = aTuple2;
assertTrue (aTuple.get<0>() == "1");
assertTrue (aTuple.get<1>() == 1);
assertTrue (aTuple.get<2>() == true);
assertTrue (aTuple.get<4>() == 'a');
assertTrue (aTuple.get<5>() == 999);
assertTrue (aTuple.get<7>() == 32700);
assertTrue (aTuple.get<8>() == "2");
assertTrue (aTuple.get<9>() == 2);
assertTrue (aTuple.get<10>() == "3");
assertTrue (aTuple.get<11>() == 3);
assertTrue (aTuple.get<12>() == true);
assertTrue (aTuple.get<14>() == 'b');
assertTrue (aTuple.get<15>() == 999);
assertTrue (aTuple.get<17>() == 32700);
assertTrue (aTuple.get<18>() == "4");
assertTrue (aTuple.get<19>() == 4);
assertTrue (aTuple.get<20>() == "5");
assertTrue (aTuple.get<21>() == 5);
assertTrue (aTuple.get<22>() == true);
assertTrue (aTuple.get<24>() == 'c');
assertTrue (aTuple.get<25>() == 999);
assertTrue (aTuple.get<27>() == 32700);
assertTrue (aTuple.get<28>() == "6");
assertTrue (aTuple.get<29>() == 6);
assertTrue (aTuple.get<30>() == "7");
assertTrue (aTuple.get<31>() == 7);
assertTrue (aTuple.get<32>() == true);
assertTrue (aTuple.get<34>() == 'd');
assertTrue (aTuple.get<35>() == 999);
assertTrue (aTuple.get<37>() == 32700);
assertTrue (aTuple.get<38>() == "8");
assertTrue (aTuple.get<39>() == 8);
assertTrue (aTuple == aTuple2);
aTuple2.get<1>()++;
assertTrue (aTuple < aTuple2);
}
void TuplesTest::testTupleOrder()
{
typedef Tuple<std::string, int, bool, float, char, long, double, short, std::string, int,
std::string, int, bool, float, char, long, double, short, std::string, int> TupleType;
TupleType aTuple;
assertTrue (aTuple.length == 20);
TupleType aTuple2("1", 1, true, 3.14f, 'c', 999, 33.14, 32700, "2", 2, "1", 1, true, 3.14f, 'c', 999, 33.14, 32700, "2", 2);
assertTrue (aTuple != aTuple2);
aTuple = aTuple2;
assertTrue (aTuple == aTuple2);
aTuple2.get<1>()++;
assertTrue (aTuple < aTuple2);
TupleType aTuple3;
aTuple3 = aTuple2;
aTuple3.get<1>()++;
assertTrue (aTuple2 < aTuple3);
testTupleStrictWeak(aTuple, aTuple2, aTuple3);
std::vector<TupleType> tv;
tv.push_back(aTuple3);
tv.push_back(aTuple);
tv.push_back(aTuple2);
assertTrue (tv[0] == aTuple3);
assertTrue (tv[1] == aTuple);
assertTrue (tv[2] == aTuple2);
std::sort(tv.begin(), tv.end());
assertTrue (tv[0] == aTuple);
assertTrue (tv[1] == aTuple2);
assertTrue (tv[2] == aTuple3);
std::map<TupleType, int> tm;
std::pair<std::map<TupleType, int>::iterator, bool> mIt = tm.insert(std::map<TupleType, int>::value_type(aTuple2, 2));
assertTrue (mIt.second);
mIt = tm.insert(std::map<TupleType, int>::value_type(aTuple, 1));
assertTrue (mIt.second);
mIt = tm.insert(std::map<TupleType, int>::value_type(aTuple3, 3));
assertTrue (mIt.second);
std::map<TupleType, int>::iterator fIt = tm.find(aTuple2);
assertTrue (2 == fIt->second);
typedef Tuple<std::string, std::string, std::string, std::string> StrTup;
typedef std::map<StrTup, int> StrTupMap;
StrTup st1("123", "456", "789", "101112");
StrTup st2("123", "456", "101112", "789");
StrTup st3("123", "789", "789", "101112");
StrTup st4("123", "101112", "456", "789");
testTupleStrictWeak(st2, st1, st3);
StrTupMap strMap;
strMap.insert(StrTupMap::value_type(st1, 1));
strMap.insert(StrTupMap::value_type(st2, 2));
strMap.insert(StrTupMap::value_type(st3, 3));
strMap.insert(StrTupMap::value_type(st4, 4));
assertTrue (1 == strMap[st1]);
assertTrue (2 == strMap[st2]);
assertTrue (3 == strMap[st3]);
assertTrue (4 == strMap[st4]);
StrTupMap::iterator it = strMap.begin();
assertTrue (st4 == it->first); ++it;
assertTrue (st2 == it->first); ++it;
assertTrue (st1 == it->first); ++it;
assertTrue (st3 == it->first); ++it;
assertTrue (it == strMap.end());
}
void TuplesTest::testMemOverhead()
{
Tuple<short> smallOne(0);
int sz = sizeof(smallOne);
assertTrue (sz == 4 || sz == 8); //depending on architecture and alignment
Tuple<long> notSoSmall(0);
sz = sizeof(notSoSmall);
assertTrue (sz == 8 || sz == 16); //depending on architecture and alignment
}
void TuplesTest::setUp()
{
}
void TuplesTest::tearDown()
{
}
CppUnit::Test* TuplesTest::suite()
{
CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("TuplesTest");
CppUnit_addTest(pSuite, TuplesTest, testTuple1);
CppUnit_addTest(pSuite, TuplesTest, testTuple2);
CppUnit_addTest(pSuite, TuplesTest, testTuple3);
CppUnit_addTest(pSuite, TuplesTest, testTuple4);
CppUnit_addTest(pSuite, TuplesTest, testTuple5);
CppUnit_addTest(pSuite, TuplesTest, testTuple6);
CppUnit_addTest(pSuite, TuplesTest, testTuple7);
CppUnit_addTest(pSuite, TuplesTest, testTuple8);
CppUnit_addTest(pSuite, TuplesTest, testTuple9);
CppUnit_addTest(pSuite, TuplesTest, testTuple10);
CppUnit_addTest(pSuite, TuplesTest, testTuple11);
CppUnit_addTest(pSuite, TuplesTest, testTuple12);
CppUnit_addTest(pSuite, TuplesTest, testTuple13);
CppUnit_addTest(pSuite, TuplesTest, testTuple14);
CppUnit_addTest(pSuite, TuplesTest, testTuple15);
CppUnit_addTest(pSuite, TuplesTest, testTuple16);
CppUnit_addTest(pSuite, TuplesTest, testTuple17);
CppUnit_addTest(pSuite, TuplesTest, testTuple18);
CppUnit_addTest(pSuite, TuplesTest, testTuple19);
CppUnit_addTest(pSuite, TuplesTest, testTuple20);
CppUnit_addTest(pSuite, TuplesTest, testTuple21);
CppUnit_addTest(pSuite, TuplesTest, testTuple22);
CppUnit_addTest(pSuite, TuplesTest, testTuple23);
CppUnit_addTest(pSuite, TuplesTest, testTuple24);
CppUnit_addTest(pSuite, TuplesTest, testTuple25);
CppUnit_addTest(pSuite, TuplesTest, testTuple26);
CppUnit_addTest(pSuite, TuplesTest, testTuple27);
CppUnit_addTest(pSuite, TuplesTest, testTuple28);
CppUnit_addTest(pSuite, TuplesTest, testTuple29);
CppUnit_addTest(pSuite, TuplesTest, testTuple30);
CppUnit_addTest(pSuite, TuplesTest, testTuple31);
CppUnit_addTest(pSuite, TuplesTest, testTuple32);
CppUnit_addTest(pSuite, TuplesTest, testTuple33);
CppUnit_addTest(pSuite, TuplesTest, testTuple34);
CppUnit_addTest(pSuite, TuplesTest, testTuple35);
CppUnit_addTest(pSuite, TuplesTest, testTuple36);
CppUnit_addTest(pSuite, TuplesTest, testTuple37);
CppUnit_addTest(pSuite, TuplesTest, testTuple38);
CppUnit_addTest(pSuite, TuplesTest, testTuple39);
CppUnit_addTest(pSuite, TuplesTest, testTuple40);
CppUnit_addTest(pSuite, TuplesTest, testTupleOrder);
CppUnit_addTest(pSuite, TuplesTest, testMemOverhead);
return pSuite;
}