164 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			164 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| ///////////////////////////////////////////////////////////////////////////////
 | |
| // Name:        tests/misc/misctests.cpp
 | |
| // Purpose:     test miscellaneous stuff
 | |
| // Author:      Peter Most, Vadim Zeitlin
 | |
| // Created:     2008-07-10
 | |
| // Copyright:   (c) 2008 Peter Most
 | |
| //              (c) 2009 Vadim Zeitlin
 | |
| ///////////////////////////////////////////////////////////////////////////////
 | |
| 
 | |
| // ----------------------------------------------------------------------------
 | |
| // headers
 | |
| // ----------------------------------------------------------------------------
 | |
| 
 | |
| #include "testprec.h"
 | |
| 
 | |
| #ifdef __BORLANDC__
 | |
|     #pragma hdrstop
 | |
| #endif
 | |
| 
 | |
| #include "wx/defs.h"
 | |
| 
 | |
| #include "wx/math.h"
 | |
| 
 | |
| // just some classes using wxRTTI for wxStaticCast() test
 | |
| #include "wx/tarstrm.h"
 | |
| #include "wx/zipstrm.h"
 | |
| 
 | |
| // ----------------------------------------------------------------------------
 | |
| // test class
 | |
| // ----------------------------------------------------------------------------
 | |
| 
 | |
| class MiscTestCase : public CppUnit::TestCase
 | |
| {
 | |
| public:
 | |
|     MiscTestCase() { }
 | |
| 
 | |
| private:
 | |
|     CPPUNIT_TEST_SUITE( MiscTestCase );
 | |
|         CPPUNIT_TEST( Assert );
 | |
| #ifdef HAVE_VARIADIC_MACROS
 | |
|         CPPUNIT_TEST( CallForEach );
 | |
| #endif // HAVE_VARIADIC_MACROS
 | |
|         CPPUNIT_TEST( Delete );
 | |
|         CPPUNIT_TEST( StaticCast );
 | |
|     CPPUNIT_TEST_SUITE_END();
 | |
| 
 | |
|     void Assert();
 | |
|     void CallForEach();
 | |
|     void Delete();
 | |
|     void StaticCast();
 | |
| 
 | |
|     wxDECLARE_NO_COPY_CLASS(MiscTestCase);
 | |
| };
 | |
| 
 | |
| // register in the unnamed registry so that these tests are run by default
 | |
| CPPUNIT_TEST_SUITE_REGISTRATION( MiscTestCase );
 | |
| 
 | |
| // also include in its own registry so that these tests can be run alone
 | |
| CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( MiscTestCase, "MiscTestCase" );
 | |
| 
 | |
| namespace
 | |
| {
 | |
| 
 | |
| bool AssertIfOdd(int n)
 | |
| {
 | |
|     wxCHECK_MSG( !(n % 2), false, "parameter must be even" );
 | |
| 
 | |
|     return true;
 | |
| }
 | |
| 
 | |
| } // anonymous namespace
 | |
| 
 | |
| void MiscTestCase::Assert()
 | |
| {
 | |
|     AssertIfOdd(0);
 | |
|     WX_ASSERT_FAILS_WITH_ASSERT(AssertIfOdd(1));
 | |
| 
 | |
|     // doesn't fail any more
 | |
|     wxAssertHandler_t oldHandler = wxSetAssertHandler(NULL);
 | |
|     AssertIfOdd(17);
 | |
|     wxSetAssertHandler(oldHandler);
 | |
| }
 | |
| 
 | |
| #ifdef HAVE_VARIADIC_MACROS
 | |
| void MiscTestCase::CallForEach()
 | |
| {
 | |
|     #define MY_MACRO(pos, str) s += str;
 | |
| 
 | |
|     wxString s;
 | |
|     wxCALL_FOR_EACH(MY_MACRO, "foo", "bar", "baz");
 | |
| 
 | |
|     CPPUNIT_ASSERT_EQUAL( "foobarbaz", s );
 | |
| 
 | |
|     #undef MY_MACRO
 | |
| }
 | |
| #endif // HAVE_VARIADIC_MACROS
 | |
| 
 | |
| void MiscTestCase::Delete()
 | |
| {
 | |
|     // Allocate some arbitrary memory to get a valid pointer:
 | |
|     long *pointer = new long;
 | |
|     CPPUNIT_ASSERT( pointer != NULL );
 | |
| 
 | |
|     // Check that wxDELETE sets the pointer to NULL:
 | |
|     wxDELETE( pointer );
 | |
|     CPPUNIT_ASSERT( pointer == NULL );
 | |
| 
 | |
|     // Allocate some arbitrary array to get a valid pointer:
 | |
|     long *array = new long[ 3 ];
 | |
|     CPPUNIT_ASSERT( array != NULL );
 | |
| 
 | |
|     // Check that wxDELETEA sets the pointer to NULL:
 | |
|     wxDELETEA( array );
 | |
|     CPPUNIT_ASSERT( array == NULL );
 | |
| 
 | |
|     // this results in compilation error, as it should
 | |
| #if 0
 | |
|     struct SomeUnknownStruct *p = NULL;
 | |
|     wxDELETE(p);
 | |
| #endif
 | |
| }
 | |
| 
 | |
| namespace
 | |
| {
 | |
| 
 | |
| // helper function used just to avoid warnings about value computed not being
 | |
| // used in WX_ASSERT_FAILS_WITH_ASSERT() in StaticCast() below
 | |
| bool IsNull(void *p)
 | |
| {
 | |
|     return p == NULL;
 | |
| }
 | |
| 
 | |
| } // anonymous namespace
 | |
| 
 | |
| void MiscTestCase::StaticCast()
 | |
| {
 | |
| #if wxUSE_TARSTREAM
 | |
|     wxTarEntry tarEntry;
 | |
|     CPPUNIT_ASSERT( wxStaticCast(&tarEntry, wxArchiveEntry) );
 | |
| 
 | |
|     wxArchiveEntry *entry = &tarEntry;
 | |
|     CPPUNIT_ASSERT( wxStaticCast(entry, wxTarEntry) );
 | |
| 
 | |
| #if wxUSE_ZIPSTREAM
 | |
|     wxZipEntry zipEntry;
 | |
|     entry = &zipEntry;
 | |
|     CPPUNIT_ASSERT( wxStaticCast(entry, wxZipEntry) );
 | |
|     WX_ASSERT_FAILS_WITH_ASSERT( IsNull(wxStaticCast(&zipEntry, wxTarEntry)) );
 | |
| #endif // wxUSE_ZIPSTREAM
 | |
| 
 | |
|     WX_ASSERT_FAILS_WITH_ASSERT( IsNull(wxStaticCast(entry, wxTarEntry)) );
 | |
| #endif // wxUSE_TARSTREAM
 | |
| }
 | |
| 
 | |
| TEST_CASE("wxCTZ", "[math]")
 | |
| {
 | |
|     CHECK( wxCTZ(1) == 0 );
 | |
|     CHECK( wxCTZ(4) == 2 );
 | |
|     CHECK( wxCTZ(17) == 0 );
 | |
|     CHECK( wxCTZ(0x80000000) == 31 );
 | |
| 
 | |
|     WX_ASSERT_FAILS_WITH_ASSERT( wxCTZ(0) );
 | |
| }
 |