1e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#define _STLP_DO_IMPORT_CSTD_FUNCTIONS
2e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
3e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <cstring>
4e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
5e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include "cppunit/cppunit_proxy.h"
6e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
7e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//This test purpose is to check the right import of math.h C symbols
8e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//into the std namespace so we do not use the using namespace std
9e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//specification
10e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
11e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//
12e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// TestCase class
13e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//
14e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass CStringTest : public CPPUNIT_NS::TestCase
15e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
16e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST_SUITE(CStringTest);
17e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (STLPORT) && !defined (_STLP_USE_NAMESPACES)
18e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_IGNORE;
19e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
20e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST(import_checks);
21e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_TEST_SUITE_END();
22e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
23e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  protected:
24e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    void import_checks();
25e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott};
26e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
27e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick ScottCPPUNIT_TEST_SUITE_REGISTRATION(CStringTest);
28e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
29e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_MSC_VER) && (_MSC_VER >= 1400)
30e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//For deprecated symbols like strcat, strtok...
31e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  pragma warning (disable : 4996)
32e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
33e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
34e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//
35e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott// tests implementation
36e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott//
37e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottvoid CStringTest::import_checks()
38e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{
39e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (STLPORT) || defined (_STLP_USE_NAMESPACES)
40e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  std::size_t bar = 0;
41e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_CHECK( bar == 0 );
42e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
43e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_CHECK( std::memchr("foo", 'o', 3) != NULL );
44e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_CHECK( std::memcmp("foo1", "foo2", 3) == 0 );
45e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  char buf1[1], buf2[1];
46e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_CHECK( std::memcpy(buf1, buf2, 0) != NULL );
47e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_CHECK( std::memmove(buf1, buf2, 0) != NULL );
48e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_CHECK( std::memset(buf1, 0, 1) != NULL );
49e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  char buf[16]; buf[0] = 0;
50e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  const char* foo = "foo";
51e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if !defined(_WIN32_WCE)
52e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_CHECK( std::strcoll("foo", "foo") == 0 );
53e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_CHECK( std::strerror(0) != NULL );
54e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
55e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_CHECK( std::strcat((char*)buf, foo) == (char*)buf ); // buf <- foo
56e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_CHECK( std::strchr(foo, 'o') != NULL );
57e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_CHECK( std::strcmp("foo1", "foo2") < 0 );
58e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_CHECK( std::strcpy((char*)buf, foo) == (char*)buf ); // buf <- foo
59e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_CHECK( std::strcspn("foo", "o") == 1 );
60e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_CHECK( std::strlen("foo") == 3 );
61e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_CHECK( std::strncat((char*)buf, foo, 2) == (char*)buf ); // buf <- foofo
62e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_CHECK( std::strncmp("foo1", "foo2", 3) == 0 );
63e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_CHECK( std::strncpy((char*)buf, foo, 3) == (char*)buf ); // buf <- foo
64e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_CHECK( std::strpbrk(foo, "abcdo") == foo + 1 );
65e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  const char* foofoo = "foofoo";
66e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_CHECK( std::strrchr(foofoo, 'f') == foofoo + 3 );
67e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_CHECK( std::strspn(foofoo, "aofz") == 6 );
68e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_CHECK( std::strstr(foo, "") == foo );
69e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  char foofoobuf[] = "foofoo";
70e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_CHECK( std::strtok(foofoobuf, "z") != NULL );
71e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if !defined(_WIN32_WCE)
72e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  CPPUNIT_CHECK( std::strxfrm((char*)buf, foo, 3) != 0 );
73e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
74e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
75e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott}
76