*** empty log message ***
git-svn-id: svn://svn.code.sf.net/p/loki-lib/code/trunk@60 7ec92016-0320-0410-acc4-a06ded1c099a
This commit is contained in:
parent
ca9fff7cf4
commit
a0aa6b269f
13 changed files with 2054 additions and 0 deletions
157
tools/RegressionTest/SingletonTest.h
Normal file
157
tools/RegressionTest/SingletonTest.h
Normal file
|
@ -0,0 +1,157 @@
|
|||
///////////////////////////////////////////////////////////////////////////////
|
||||
// Unit Test for Loki
|
||||
//
|
||||
// Copyright Terje Slettebø and Pavel Vozenilek 2002.
|
||||
//
|
||||
// Permission to use, copy, modify, and distribute this software for any
|
||||
// purpose is hereby granted without fee, provided that this copyright and
|
||||
// permissions notice appear in all copies and derivatives.
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty.
|
||||
//
|
||||
// Last update: September 16, 2002
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef SINGLETONTEST_H
|
||||
#define SINGLETONTEST_H
|
||||
|
||||
#include <cassert>
|
||||
#include <loki/Singleton.h>
|
||||
#include "UnitTest.h"
|
||||
|
||||
#define MAKE_TEST(name)\
|
||||
if(singletonTest && name::Instance().a != 99)\
|
||||
singletonTest=false;\
|
||||
++name::Instance().a;\
|
||||
if(singletonTest && name::Instance().a != 100)\
|
||||
singletonTest=false;
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// SingletonTest
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
template<int N>
|
||||
class MyClass
|
||||
{
|
||||
public:
|
||||
MyClass() : a(99), wasDestroyed(false) {}
|
||||
|
||||
virtual ~MyClass()
|
||||
{
|
||||
assert(!wasDestroyed);
|
||||
|
||||
wasDestroyed = true;
|
||||
}
|
||||
|
||||
public:
|
||||
int a;
|
||||
bool wasDestroyed;
|
||||
};
|
||||
|
||||
inline unsigned GetLongevity(MyClass<3> *) { return 6; }
|
||||
inline unsigned GetLongevity(MyClass<7> *) { return 5; }
|
||||
inline unsigned GetLongevity(MyClass<11> *) { return 4; }
|
||||
inline unsigned GetLongevity(MyClass<15> *) { return 1; }
|
||||
inline unsigned GetLongevity(MyClass<19> *) { return 2; }
|
||||
inline unsigned GetLongevity(MyClass<23> *) { return 3; }
|
||||
|
||||
namespace
|
||||
{
|
||||
using namespace Loki;
|
||||
|
||||
typedef SingletonHolder<MyClass<0> > t0;
|
||||
|
||||
typedef SingletonHolder<MyClass<1>, CreateUsingNew, DefaultLifetime, SingleThreaded> t1;
|
||||
typedef SingletonHolder<MyClass<2>, CreateUsingNew, PhoenixSingleton, SingleThreaded> t2;
|
||||
typedef SingletonHolder<MyClass<3>, CreateUsingNew, SingletonWithLongevity, SingleThreaded> t3;
|
||||
typedef SingletonHolder<MyClass<4>, CreateUsingNew, NoDestroy, SingleThreaded> t4;
|
||||
|
||||
typedef SingletonHolder<MyClass<9>, CreateUsingMalloc, DefaultLifetime, SingleThreaded> t9;
|
||||
typedef SingletonHolder<MyClass<10>, CreateUsingMalloc, PhoenixSingleton, SingleThreaded> t10;
|
||||
typedef SingletonHolder<MyClass<11>, CreateUsingMalloc, SingletonWithLongevity, SingleThreaded> t11;
|
||||
typedef SingletonHolder<MyClass<12>, CreateUsingMalloc, NoDestroy, SingleThreaded> t12;
|
||||
|
||||
typedef SingletonHolder<MyClass<17>, CreateStatic, DefaultLifetime, SingleThreaded> t17;
|
||||
typedef SingletonHolder<MyClass<18>, CreateStatic, PhoenixSingleton, SingleThreaded> t18;
|
||||
typedef SingletonHolder<MyClass<19>, CreateStatic, SingletonWithLongevity, SingleThreaded> t19;
|
||||
typedef SingletonHolder<MyClass<20>, CreateStatic, NoDestroy, SingleThreaded> t20;
|
||||
|
||||
#if !__INTEL_COMPILER && !__GNUC__
|
||||
|
||||
typedef SingletonHolder<MyClass<5>, CreateUsingNew, DefaultLifetime, ClassLevelLockable> t5;
|
||||
typedef SingletonHolder<MyClass<6>, CreateUsingNew, PhoenixSingleton, ClassLevelLockable> t6;
|
||||
typedef SingletonHolder<MyClass<7>, CreateUsingNew, SingletonWithLongevity, ClassLevelLockable> t7;
|
||||
typedef SingletonHolder<MyClass<8>, CreateUsingNew, NoDestroy, ClassLevelLockable> t8;
|
||||
|
||||
typedef SingletonHolder<MyClass<13>, CreateUsingMalloc, DefaultLifetime, ClassLevelLockable> t13;
|
||||
typedef SingletonHolder<MyClass<14>, CreateUsingMalloc, PhoenixSingleton, ClassLevelLockable> t14;
|
||||
typedef SingletonHolder<MyClass<15>, CreateUsingMalloc, SingletonWithLongevity, ClassLevelLockable> t15;
|
||||
typedef SingletonHolder<MyClass<16>, CreateUsingMalloc, NoDestroy, ClassLevelLockable> t16;
|
||||
|
||||
typedef SingletonHolder<MyClass<21>, CreateStatic, DefaultLifetime, ClassLevelLockable> t21;
|
||||
typedef SingletonHolder<MyClass<22>, CreateStatic, PhoenixSingleton, ClassLevelLockable> t22;
|
||||
typedef SingletonHolder<MyClass<23>, CreateStatic, SingletonWithLongevity, ClassLevelLockable> t23;
|
||||
typedef SingletonHolder<MyClass<24>, CreateStatic, NoDestroy, ClassLevelLockable> t24;
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
class SingletonTest : public Test
|
||||
{
|
||||
public:
|
||||
SingletonTest() : Test("Singleton.h") {}
|
||||
|
||||
virtual void execute(TestResult &result)
|
||||
{
|
||||
printName(result);
|
||||
|
||||
using namespace Loki;
|
||||
|
||||
singletonTest=true;
|
||||
|
||||
MAKE_TEST(t0)
|
||||
|
||||
MAKE_TEST(t1)
|
||||
MAKE_TEST(t2)
|
||||
MAKE_TEST(t3)
|
||||
MAKE_TEST(t4)
|
||||
|
||||
MAKE_TEST(t9)
|
||||
MAKE_TEST(t10)
|
||||
MAKE_TEST(t11)
|
||||
MAKE_TEST(t12)
|
||||
|
||||
MAKE_TEST(t17)
|
||||
MAKE_TEST(t18)
|
||||
MAKE_TEST(t19)
|
||||
MAKE_TEST(t20)
|
||||
|
||||
#if !__INTEL_COMPILER && !__GNUC__
|
||||
|
||||
MAKE_TEST(t5)
|
||||
MAKE_TEST(t6)
|
||||
MAKE_TEST(t7)
|
||||
MAKE_TEST(t8)
|
||||
|
||||
MAKE_TEST(t13)
|
||||
MAKE_TEST(t14)
|
||||
MAKE_TEST(t15)
|
||||
MAKE_TEST(t16)
|
||||
|
||||
MAKE_TEST(t21)
|
||||
MAKE_TEST(t22)
|
||||
MAKE_TEST(t23)
|
||||
MAKE_TEST(t24)
|
||||
|
||||
#endif
|
||||
|
||||
testAssert("Singleton",singletonTest,result);
|
||||
|
||||
std::cout << '\n';
|
||||
}
|
||||
|
||||
private:
|
||||
bool singletonTest;
|
||||
};
|
||||
|
||||
#endif
|
Loading…
Add table
Add a link
Reference in a new issue