Loki/tools/RegressionTest2/FunctorTest.h

110 lines
2.4 KiB
C
Raw Normal View History

///////////////////////////////////////////////////////////////////////////////
// Unit Test for Loki
//
// Copyright Terje Sletteb<65> 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 FUNCTORTEST_H
#define FUNCTORTEST_H
#include <loki/Functor.h>
#include "UnitTest.h"
///////////////////////////////////////////////////////////////////////////////
// FunctorTest
///////////////////////////////////////////////////////////////////////////////
class FunctorTest : public Test
{
public:
FunctorTest() : Test("Functor.h") {}
virtual void execute(TestResult &result)
{
printName(result);
using namespace Loki;
bool r;
TestFunctor testFunctor;
TestClass testClass;
Functor<void,TYPELIST_1(bool &)> function(testFunction);
Functor<void,TYPELIST_1(bool &)> functor(testFunctor);
Functor<void,TYPELIST_1(bool &)> classFunctor(&testClass,&TestClass::member);
Functor<void,TYPELIST_1(bool &)> functorCopy(function);
Functor<void,NullType> bindFunctor(BindFirst(function,testResult));
Functor<void> chainFunctor(Chain(bindFunctor,bindFunctor));
testResult=false;
function(testResult);
bool functionResult=testResult;
testResult=false;
functor(testResult);
bool functorResult=testResult;
testResult=false;
classFunctor(testResult);
bool classFunctorResult=testResult;
testResult=false;
functorCopy(testResult);
bool functorCopyResult=testResult;
testResult=false;
bindFunctor();
bool bindFunctorResult=testResult;
testResult=false;
chainFunctor();
bool chainFunctorResult=testResult;
r=functionResult && functorResult && classFunctorResult && functorCopyResult && bindFunctorResult &&
chainFunctorResult;
testAssert("Functor",r,result);
std::cout << '\n';
}
private:
static bool testResult;
static void testFunction(bool &result)
{
result=true;
}
class TestFunctor
{
public:
void operator()(bool &result)
{
result=true;
}
};
class TestClass
{
public:
void member(bool &result)
{
result=true;
}
};
};
bool FunctorTest::testResult;
#endif