//We are including stdlib.h and stddef.h first because under MSVC
//those headers contains a errno macro definition without the underlying value
//definition.
#include <stdlib.h>
#include <stddef.h>
#include <errno.h>
#include <errno.h> // not typo, check errno def/undef/redef
#ifndef _STLP_WCE
#include "cppunit/cppunit_proxy.h"
//
// TestCase class
//
class ErrnoTest : public CPPUNIT_NS::TestCase
{
CPPUNIT_TEST_SUITE(ErrnoTest);
CPPUNIT_TEST(check);
CPPUNIT_TEST_SUITE_END();
protected:
void check();
};
CPPUNIT_TEST_SUITE_REGISTRATION(ErrnoTest);
void ErrnoTest::check()
{
//We are using ERANGE as it is part of the C++ ISO (see Table 26 in section 19.3)
//Using ERANGE improve the test as it means that the native errno.h file has really
//been included.
errno = ERANGE;
CPPUNIT_ASSERT( errno == ERANGE );
errno = 0;
/* Note: in common, you can't write ::errno or std::errno,
* due to errno in most cases is just a macro, that frequently
* (in MT environment errno is a per-thread value) expand to something like
* (*__errno_location()). I don't know way how masquerade such
* things: name of macro can't include ::.
*
* - ptr, 2005-03-30
*/
# if 0
if ( ::errno != 0 ) {
return 1;
}
if ( std::errno != 0 ) {
return 1;
}
# endif
}
#endif // _STLP_WCE