diff -r e20de85af2ee -r ce057bb09d0b genericopenlibs/cppstdlib/stl/test/eh/TestClass.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/genericopenlibs/cppstdlib/stl/test/eh/TestClass.h Fri Jun 04 16:20:51 2010 +0100 @@ -0,0 +1,161 @@ +/*********************************************************************************** + TestClass.h + + * Copyright (c) 1997-1998 + * Mark of the Unicorn, Inc. + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Mark of the Unicorn makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + + SUMMARY: TestClass simulates a class that uses resources. It is designed to + cause exceptions when it is constructed or copied. + +***********************************************************************************/ +#ifndef INCLUDED_MOTU_TestClass +#define INCLUDED_MOTU_TestClass 1 + +# include "Prefix.h" + +# include +# include +# include + +#include +#include "random_number.h" +#include "nc_alloc.h" + +class TestClass +{ +public: + inline TestClass(); + inline TestClass( int value ); + inline TestClass( const TestClass& rhs ); + inline ~TestClass(); + + inline TestClass& operator=( const TestClass& rhs ); + inline int value() const; + + inline TestClass operator!() const; + + bool operator==( const TestClass& rhs ) const + { + return value() == rhs.value(); + } + + bool operator<( const TestClass& rhs ) const { + return value() < rhs.value(); + } + +protected: + static inline unsigned int get_random(unsigned range = UINT_MAX); +private: + inline void Init( int value ); + +#if TESTCLASS_DEEP_DATA + int *p; +#else + int v; +#endif +}; + +#if defined( __MWERKS__ ) && __MWERKS__ <= 0x3000 && !__SGI_STL +# if defined( __MSL__ ) && __MSL__ < 0x2406 +# include +__MSL_FIX_ITERATORS__(TestClass); +__MSL_FIX_ITERATORS__(const TestClass); +typedef EH_STD::pair pair_testclass_testclass; +__MSL_FIX_ITERATORS__( pair_testclass_testclass ); +__MSL_FIX_ITERATORS__( const pair_testclass_testclass ); +# endif +#endif + +inline void TestClass::Init( int value ) +{ +#if TESTCLASS_DEEP_DATA + p = new int( value ); +#else + simulate_constructor(); + v = value; +#endif +} + +inline TestClass::TestClass() +{ + Init( int(get_random()) ); +} + +inline TestClass::TestClass( int value ) +{ + Init( value ); +} + +inline TestClass::TestClass( const TestClass& rhs ) +{ + Init( rhs.value() ); +} + +inline TestClass::~TestClass() +{ +#if TESTCLASS_DEEP_DATA + delete p; +#else + simulate_destructor(); +#endif +} + +inline TestClass& TestClass::operator=( const TestClass& rhs ) +{ +#if TESTCLASS_DEEP_DATA + int *newP = new int( rhs.value() ); + delete p; + p = newP; +#else + simulate_possible_failure(); + v = rhs.value(); +#endif + return *this; +} + +inline int TestClass::value() const +{ +#if TESTCLASS_DEEP_DATA + return *p; +#else + return v; +#endif +} + +inline TestClass TestClass::operator!() const +{ + return TestClass( value()+1 ); +} + +inline bool operator>( const TestClass& lhs, const TestClass& rhs ) { + return rhs < lhs; +} + +inline bool operator>=( const TestClass& lhs, const TestClass& rhs ) { + return !(lhs < rhs); +} + +inline bool operator<=( const TestClass& lhs, const TestClass& rhs ) { + return !(rhs < lhs); +} + +inline bool operator != ( const TestClass& lhs, const TestClass& rhs ) { + return lhs.value() != rhs.value(); +} + +inline unsigned int TestClass::get_random( unsigned range ) +{ + return random_number( range ); +} + +extern std::ostream& operator << ( std::ostream& s, const TestClass&); + +#endif // INCLUDED_MOTU_TestClass