wxWidgets/tests/misc/metatest.cpp
Vadim Zeitlin f4b80e5337 Remove MSVC6 support.
Don't support this compiler any more, this allows to get rid of tons of
MSVC6-specific workarounds, in particular we can now use Bind() and natural
template functions calls in the library code.

Also remove MSVC6 project and solution files and don't generate them when
bakefile_gen is ran any more (removing the remaining occurrences of msvc6prj
from the bakefiles results in weird bake-time errors, so it's simpler to just
leave them there).

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@76532 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
2014-05-15 22:32:17 +00:00

101 lines
3.0 KiB
C++

///////////////////////////////////////////////////////////////////////////////
// Name: tests/misc/metatest.cpp
// Purpose: Test template meta-programming constructs
// Author: Jaakko Salli
// Copyright: (c) the wxWidgets team
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
#include "testprec.h"
#ifdef __BORLANDC__
# pragma hdrstop
#endif
#include "wx/object.h"
#include "wx/utils.h"
#include "wx/meta/pod.h"
#include "wx/meta/movable.h"
#ifndef wxNO_RTTI
#include <typeinfo>
#endif
// ----------------------------------------------------------------------------
// test class
// ----------------------------------------------------------------------------
class MetaProgrammingTestCase : public CppUnit::TestCase
{
public:
MetaProgrammingTestCase() { }
private:
CPPUNIT_TEST_SUITE( MetaProgrammingTestCase );
CPPUNIT_TEST( IsPod );
CPPUNIT_TEST( IsMovable );
CPPUNIT_TEST( ImplicitConversion );
CPPUNIT_TEST( MinMax );
CPPUNIT_TEST_SUITE_END();
void IsPod();
void IsMovable();
void ImplicitConversion();
void MinMax();
DECLARE_NO_COPY_CLASS(MetaProgrammingTestCase)
};
// register in the unnamed registry so that these tests are run by default
CPPUNIT_TEST_SUITE_REGISTRATION( MetaProgrammingTestCase );
// also include in its own registry so that these tests can be run alone
CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( MetaProgrammingTestCase,
"MetaProgrammingTestCase" );
void MetaProgrammingTestCase::IsPod()
{
CPPUNIT_ASSERT(wxIsPod<bool>::value);
CPPUNIT_ASSERT(wxIsPod<signed int>::value);
CPPUNIT_ASSERT(wxIsPod<double>::value);
CPPUNIT_ASSERT(wxIsPod<wxObject*>::value);
CPPUNIT_ASSERT(!wxIsPod<wxObject>::value);
}
void MetaProgrammingTestCase::IsMovable()
{
CPPUNIT_ASSERT(wxIsMovable<bool>::value);
CPPUNIT_ASSERT(wxIsMovable<signed int>::value);
CPPUNIT_ASSERT(wxIsMovable<double>::value);
CPPUNIT_ASSERT(wxIsMovable<wxObject*>::value);
CPPUNIT_ASSERT(!wxIsMovable<wxObject>::value);
}
void MetaProgrammingTestCase::ImplicitConversion()
{
#ifndef wxNO_RTTI
CPPUNIT_ASSERT(typeid(wxImplicitConversionType<char,int>::value) == typeid(int));
CPPUNIT_ASSERT(typeid(wxImplicitConversionType<int,unsigned>::value) == typeid(unsigned));
#ifdef wxLongLong_t
CPPUNIT_ASSERT(typeid(wxImplicitConversionType<wxLongLong_t,float>::value) == typeid(float));
#endif
#endif // !wxNO_RTTI
}
void MetaProgrammingTestCase::MinMax()
{
// test that wxMax(1.1,1) returns float, not long int
float f = wxMax(1.1f, 1l);
CPPUNIT_ASSERT_EQUAL( 1.1f, f);
// test that comparing signed and unsigned correctly returns unsigned: this
// may seem counterintuitive in this case but this is consistent with the
// standard C conversions
CPPUNIT_ASSERT_EQUAL( 1, wxMin(-1, 1u) );
CPPUNIT_ASSERT_EQUAL( -1., wxClip(-1.5, -1, 1) );
CPPUNIT_ASSERT_EQUAL( 0, wxClip(0, -1, 1) );
CPPUNIT_ASSERT_EQUAL( 1, wxClip(2l, -1, 1) );
}