stdcxx-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From elemi...@apache.org
Subject svn commit: r649565 - /stdcxx/trunk/tests/intro/17.extensions.cpp
Date Fri, 18 Apr 2008 15:13:24 GMT
Author: elemings
Date: Fri Apr 18 08:13:15 2008
New Revision: 649565

URL: http://svn.apache.org/viewvc?rev=649565&view=rev
Log:
2008-04-18  Eric Lemings  <eric.lemings@roguewave.com>

	STDCXX-865
	* tests/intro/17.extensions.cpp: Migrated new test from old
	Perforce repository.


Added:
    stdcxx/trunk/tests/intro/17.extensions.cpp

Added: stdcxx/trunk/tests/intro/17.extensions.cpp
URL: http://svn.apache.org/viewvc/stdcxx/trunk/tests/intro/17.extensions.cpp?rev=649565&view=auto
==============================================================================
--- stdcxx/trunk/tests/intro/17.extensions.cpp (added)
+++ stdcxx/trunk/tests/intro/17.extensions.cpp Fri Apr 18 08:13:15 2008
@@ -0,0 +1,531 @@
+/************************************************************************
+ *
+ * extensions.cpp - compilation only test exercising the ability
+ *                  to compile library headers with extensions diabled
+ *
+ * $Id$
+ *
+ ************************************************************************
+ *
+ * Licensed to the Apache Software  Foundation (ASF) under one or more
+ * contributor  license agreements.  See  the NOTICE  file distributed
+ * with  this  work  for  additional information  regarding  copyright
+ * ownership.   The ASF  licenses this  file to  you under  the Apache
+ * License, Version  2.0 (the  "License"); you may  not use  this file
+ * except in  compliance with the License.   You may obtain  a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the  License is distributed on an  "AS IS" BASIS,
+ * WITHOUT  WARRANTIES OR CONDITIONS  OF ANY  KIND, either  express or
+ * implied.   See  the License  for  the  specific language  governing
+ * permissions and limitations under the License.
+ *
+ * Copyright 1994-2008 Rogue Wave Software.
+ * 
+ **************************************************************************/
+
+#undef _RWSTD_NO_EXTENSIONS
+#define _RWSTD_NO_EXTENSIONS
+
+
+// working around a SunOS/SunPro bug (PR #26255)
+#if defined (__SUNPRO_CC) && (defined (__SunOS_5_8) || defined (__SunOS_5_9))
+#  include <time.h>
+#endif   // SunPro && SunOS 5.{8,9}
+
+#include <cassert>
+#include <cctype>
+#include <cerrno>
+#include <cfloat>
+#include <ciso646>
+#include <climits>
+#include <clocale>
+#include <cmath>
+#include <csetjmp>
+#include <csignal>
+#include <cstdarg>
+#include <cstddef>
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
+#include <ctime>
+#include <cwchar>
+#include <cwctype>
+
+#include <assert.h>
+#include <ctype.h>
+#include <errno.h>
+#include <float.h>
+#include <iso646.h>
+#include <limits.h>
+#include <locale.h>
+#include <math.h>
+#include <setjmp.h>
+#include <signal.h>
+#include <stdarg.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <wchar.h>
+#include <wctype.h>
+
+#include <algorithm>
+#include <bitset>
+#include <complex>
+#include <deque>
+#include <exception>
+#include <fstream>
+#include <functional>
+#include <iomanip>
+#include <ios>
+#include <iosfwd>
+#include <iostream>
+#include <istream>
+#include <iterator>
+#include <limits>
+#include <list>
+#include <locale>
+#include <map>
+#include <memory>
+#include <new>
+#include <numeric>
+#include <ostream>
+#include <queue>
+#include <set>
+#include <sstream>
+#include <stack>
+#include <stdexcept>
+#include <streambuf>
+#include <string>
+#include <typeinfo>
+#include <utility>
+#include <valarray>
+#include <vector>
+
+/***********************************************************************/
+
+int count_called = 0;
+int count_pred_called = 0;
+int distance_called = 0;
+
+
+#if !defined (__SUNPRO_CC) || __SUNPRO_CC > 0x550
+
+template <class T, class U>
+void count (T, T, const U&, ...) { ++count_called; }
+
+
+template <class T, class U>
+void count_if (T, T, U, ...) { ++count_pred_called; }
+
+
+template <class T>
+void distance (T, T, ...) { ++distance_called; }
+
+#else
+
+// working around a SunPro bug (PR #28678)
+
+template <class T, class U>
+void count (T, T, const U&, std::size_t&) { ++count_called; }
+
+
+template <class T, class U>
+void count_if (T, T, U, std::size_t&) { ++count_pred_called; }
+
+
+template <class T>
+void distance (T, T, std::size_t&) { ++distance_called; }
+
+#endif   // SunPro
+
+
+#if !defined (__GNUG__) || __GNUG__ > 2
+
+int ellipsis_called /* = 0 */;
+
+struct NumGet: std::num_get<char>
+{
+    typedef std::num_get<char> Base;
+
+#  ifndef _RWSTD_NO_USING_ACCESS_ADJUSTMENT
+
+    _USING (Base::get);
+
+#  else   // if defined (_RWSTD_NO_USING_ACCESS_ADJUSTMENT)
+
+    Base::get;
+
+#  endif   // _RWSTD_NO_USING_ACCESS_ADJUSTMENT
+
+    iter_type get (iter_type, iter_type,
+                   std::ios_base&, std::ios_base::iostate&, ...) const {
+        ++ellipsis_called;
+        return iter_type ();
+    }
+};
+
+#endif   // gcc > 2.x
+
+
+template <class T>
+struct convertible
+{
+    operator T () const {
+        static union {
+            void *dummy;
+            char buffer [sizeof (T)];
+        } u;
+
+        return (T)*u.buffer;
+    }
+};
+
+
+struct base { /* empty */ };
+struct badbit_set: base { /* empty */ };
+struct eofbit_set: base { /* empty */ };
+struct failbit_set: base { /* empty */ };
+
+struct Bin: base { /* empty */ } *bin;
+struct Nolock: base { /* empty */ } *nolock;
+struct NolockBuf: base { /* empty */ } *nolockbuf;
+
+
+struct IosBase: std::ios_base
+{
+    static bool check (int, base*) { return true; }
+    static bool check (int, ...) { return false; }
+
+    // members are preferred over non-members during unqualified lookup
+    static bool check_badbit () { return check (0, (badbit_set*)0); }
+    static bool check_eofbit () { return check (0, (eofbit_set*)0); }
+    static bool check_failbit () { return check (0, (failbit_set*)0); }
+
+    static bool check_bin () { return check (0, bin); }
+
+    static bool check_nolock () { return check (0, nolock); }
+    static bool check_nolockbuf () { return check (0, nolockbuf); }
+};
+
+
+_RWSTD_NAMESPACE (std) {
+
+
+// define bogus primary templates to verify
+// that they are not defined by the library
+
+#ifdef _RWSTD_NO_EXT_CHAR_TRAITS_PRIMARY
+
+template <class charT>
+struct char_traits { /* empty */ };
+
+#endif   // _RWSTD_NO_EXT_CHAR_TRAITS_PRIMARY
+
+
+#ifdef _RWSTD_NO_EXT_CODECVT_PRIMARY
+
+template <class internT, class externT, class stateT>
+struct codecvt { /* empty */ };
+
+#endif   // _RWSTD_NO_EXT_CODECVT_PRIMARY
+
+
+#ifdef _RWSTD_NO_EXT_CTYPE_PRIMARY
+
+template <class charT>
+struct ctype { /* empty */ };
+
+#endif   // _RWSTD_NO_EXT_CTYPE_PRIMARY
+
+
+#ifdef _RWSTD_NO_EXT_COLLATE_PRIMARY
+
+template <class charT>
+struct collate { /* empty */ };
+
+#endif   // _RWSTD_NO_EXT_COLLATE_PRIMARY
+
+
+#ifdef _RWSTD_NO_EXT_MONEYPUNCT_PRIMARY
+
+template <class charT, bool Intl>
+struct moneypunct { /* empty */ };
+
+#endif   // _RWSTD_NO_EXT_MONEYPUNCT_PRIMARY
+
+
+#ifdef _RWSTD_NO_EXT_NUMPUNCT_PRIMARY
+
+template <class charT>
+struct numpunct { /* empty */ };
+
+#endif   // _RWSTD_NO_EXT_NUMPUNCT_PRIMARY
+
+
+#ifdef _RWSTD_NO_EXT_TIME_GET_PRIMARY
+
+template <class charT, class InputIterator>
+struct time_get { /* empty */ };
+
+#endif   // _RWSTD_NO_EXT_TIME_GET_PRIMARY
+
+
+#ifdef _RWSTD_NO_EXT_TIME_PUT_PRIMARY
+
+template <class charT, class OutputIterator>
+struct time_put { /* empty */ };
+
+#endif   // _RWSTD_NO_EXT_TIME_PUT_PRIMARY
+
+
+#ifdef _RWSTD_NO_EXT_MESSAGES_PRIMARY
+
+template <class charT>
+struct messages { /* empty */ };
+
+#endif   // _RWSTD_NO_EXT_MESSAGES_PRIMARY
+
+}   // namespace std
+
+/***********************************************************************/
+
+#include <driver.h>
+
+bool predicate (int /* unused */) { return true; }
+
+static int
+run_test (int /* unused */, char* /* unused */ [])
+{
+    // exercise _RWSTD_NO_EXT_VOID_COUNT
+    rw_info (0, 0, __LINE__, "_RWSTD_NO_EXT_VOID_COUNT");
+
+    std::reverse_iterator<int*> it (0);
+
+    std::size_t n = 0;
+
+#ifndef _RWSTD_NO_EXT_VOID_COUNT
+    rw_assert (0, __FILE__, __LINE__,
+               "_RWSTD_NO_EXT_VOID_COUNT not #defined");
+#endif
+
+    // call the 4-argument overload of count() and expect Koenig lookup
+    // to find ::count(); the std::count() extension will be preferred
+    // if it exists and is a viable candidate, in which case the test
+    // below will fail
+    count (it, it, 0, n);
+
+    rw_assert (1 == count_called, __FILE__, __LINE__,
+               "_RWSTD_NO_EXTENSIONS #defined and an extended "
+               "definition of std::count() found");
+
+    // call the 4-argument overload of count() and expect Koenig lookup
+    // to find ::count(); the std::count() extension will be preferred
+    // if it exists and is a viable candidate
+    count_if (it, it, predicate, n);
+
+    rw_assert (1 == count_pred_called, __FILE__, __LINE__,
+               "_RWSTD_NO_EXTENSIONS #defined and an extended "
+               "definition of std::count_if() found");
+
+
+    // exercise _RWSTD_NO_EXT_VOID_DISTANCE
+    rw_info (0, 0, __LINE__, "_RWSTD_NO_EXT_VOID_DISTANCE");
+
+#ifndef _RWSTD_NO_EXT_VOID_DISTANCE
+    rw_assert (0, __FILE__, __LINE__,
+               "_RWSTD_NO_EXT_VOID_DISTANCE not #defined");
+#endif
+
+    // call the 3-argument overload of distance() and expect Koenig
+    // lookup to find ::distance(); std::distance() will be preferred
+    // if it exists and is a viable candidate
+    distance (it, it, n);
+
+    rw_assert (1 == distance_called, __FILE__, __LINE__,
+               "_RWSTD_NO_EXTENSIONS #defined and an extended "
+               "definition of std::distance() found");
+
+
+    // exercise _RWSTD_NO_EXT_NUM_GET
+    rw_info (0, 0, __LINE__, "_RWSTD_NO_EXT_NUM_GET");
+
+#ifndef _RWSTD_NO_EXT_NUM_GET
+    rw_assert (0, __FILE__, __LINE__,
+               "_RWSTD_NO_EXT_NUM_GET not #defined");
+#endif
+
+#if !defined (__GNUG__) || __GNUG__ > 2
+
+#  define STRING(x) #x
+#  define TEST_GET(T)                                               \
+    do {                                                            \
+        NumGet::iter_type in;                                       \
+        std::ios_base::iostate err = std::ios_base::failbit;        \
+        ellipsis_called = 0;                                        \
+        NumGet ().get (in, in, std::cin, err, convertible<T&>());   \
+        rw_assert (1 == ellipsis_called, __FILE__, __LINE__,        \
+                   "_RWSTD_NO_EXTENSIONS #defined and std::"        \
+                   "num_get<char>::get(..., " STRING(T) ") found"); \
+    } while (0)
+
+    TEST_GET (short);
+    TEST_GET (int);
+
+#  ifdef _RWSTD_LONG_LONG
+
+    TEST_GET (_RWSTD_LONG_LONG);
+    TEST_GET (unsigned _RWSTD_LONG_LONG);
+
+#  endif   // _RWSTD_NO_LONG_LONG
+
+#endif   // gcc > 2.x
+
+
+    // exercise _RWSTD_NO_EXT_FAILURE
+    rw_info (0, 0, __LINE__, "_RWSTD_NO_EXT_FAILURE");
+
+#ifndef _RWSTD_NO_EXT_FAILURE
+    rw_assert (0, __FILE__, __LINE__, "_RWSTD_NO_EXT_FAILURE not #defined");
+#endif
+
+    rw_assert (IosBase::check_badbit (), __FILE__, __LINE__,
+               "_RWSTD_NO_EXTENSIONS #defined and "
+               " class std::ios_base::badbit_set found");
+
+    rw_assert (IosBase::check_eofbit (), __FILE__, __LINE__,
+               "_RWSTD_NO_EXTENSIONS #defined and "
+               " class std::ios_base::eofbit_set found");
+
+    rw_assert (IosBase::check_eofbit (), __FILE__, __LINE__,
+               "_RWSTD_NO_EXTENSIONS #defined and "
+               " class std::ios_base::failbit_set found");
+
+
+    // exercise _RWSTD_NO_EXT_BIN_IO
+    rw_info (0, 0, __LINE__, "_RWSTD_NO_EXT_BIN_IO");
+
+#ifndef _RWSTD_NO_EXT_BIN_IO
+    rw_assert (0, __FILE__, __LINE__,
+               "_RWSTD_NO_EXT_BIN_IO not #defined");
+#endif
+
+    rw_assert (IosBase::check_bin (), __FILE__, __LINE__,
+               "_RWSTD_NO_EXTENSIONS #defined and "
+               " std::ios_base::bin found");
+
+
+    // exercise _RWSTD_NO_EXT_REENTRANT_IO
+    rw_info (0, 0, __LINE__, "_RWSTD_NO_EXT_REENTRANT_IO");
+
+#ifndef _RWSTD_NO_EXT_REENTRANT_IO
+    rw_assert (0, __FILE__, __LINE__,
+               "_RWSTD_NO_EXT_REENTRANT_IO not #defined");
+#endif
+
+    rw_assert (IosBase::check_nolock (), __FILE__, __LINE__,
+               "_RWSTD_NO_EXTENSIONS #defined and "
+               " std::ios_base::nolock found");
+
+    rw_assert (IosBase::check_nolockbuf (), __FILE__, __LINE__,
+               "_RWSTD_NO_EXTENSIONS #defined and "
+               " std::ios_base::nolockbuf found");
+
+
+    // exercise _RWSTD_NO_EXT_CHAR_TRAITS_PRIMARY
+    rw_info (0, 0, __LINE__, "_RWSTD_NO_EXT_CHAR_TRAITS_PRIMARY");
+
+#ifndef _RWSTD_NO_EXT_CHAR_TRAITS_PRIMARY
+    rw_assert (0, __FILE__, __LINE__,
+               "_RWSTD_NO_EXT_CHAR_TRAITS_PRIMARY not #defined");
+#endif   // _RWSTD_NO_EXT_CHAR_TRAITS_PRIMARY
+
+
+    // exercise _RWSTD_NO_EXT_CODECVT_PRIMARY
+    rw_info (0, 0, __LINE__, "_RWSTD_NO_EXT_CODECVT_PRIMARY");
+
+#ifndef _RWSTD_NO_EXT_CODECVT_PRIMARY
+    rw_assert (0, __FILE__, __LINE__,
+               "_RWSTD_NO_EXT_CODECVT_PRIMARY not #defined");
+#endif   // _RWSTD_NO_EXT_CODECVT_PRIMARY
+
+
+    // exercise _RWSTD_NO_EXT_COLLATE_PRIMARY
+    rw_info (0, 0, __LINE__, "_RWSTD_NO_EXT_COLLATE_PRIMARY");
+
+#ifndef _RWSTD_NO_EXT_COLLATE_PRIMARY
+    rw_assert (0, __FILE__, __LINE__,
+               "_RWSTD_NO_EXT_COLLATE_PRIMARY not #defined");
+#endif   // _RWSTD_NO_EXT_COLLATE_PRIMARY
+
+
+    // exercise _RWSTD_NO_EXT_CTYPE_PRIMARY
+    rw_info (0, 0, __LINE__, "_RWSTD_NO_EXT_CTYPE_PRIMARY");
+
+#ifndef _RWSTD_NO_EXT_CTYPE_PRIMARY
+    rw_assert (0, __FILE__, __LINE__,
+               "_RWSTD_NO_EXT_CTYPE_PRIMARY not #defined");
+#endif   // _RWSTD_NO_EXT_CTYPE_PRIMARY
+
+
+    // exercise _RWSTD_NO_EXT_MONEYPUNCT_PRIMARY
+    rw_info (0, 0, __LINE__, "_RWSTD_NO_EXT_MONEYPUNCT_PRIMARY");
+
+#ifndef _RWSTD_NO_EXT_MONEYPUNCT_PRIMARY
+    rw_assert (0, __FILE__, __LINE__,
+               "_RWSTD_NO_EXT_MONEYPUNCT_PRIMARY not #defined");
+#endif   // _RWSTD_NO_EXT_MONEYPUNCT_PRIMARY
+
+
+    // exercise _RWSTD_NO_EXT_NUMPUNCT_PRIMARY
+    rw_info (0, 0, __LINE__, "_RWSTD_NO_EXT_NUMPUNCT_PRIMARY");
+
+#ifndef _RWSTD_NO_EXT_NUMPUNCT_PRIMARY
+    rw_assert (0, __FILE__, __LINE__,
+               "_RWSTD_NO_EXT_NUMPUNCT_PRIMARY not #defined");
+#endif   // _RWSTD_NO_EXT_NUMPUNCT_PRIMARY
+
+
+    // exercise _RWSTD_NO_EXT_TIME_GET_PRIMARY
+    rw_info (0, 0, __LINE__, "_RWSTD_NO_EXT_TIME_GET_PRIMARY");
+
+#ifndef _RWSTD_NO_EXT_TIME_GET_PRIMARY
+    rw_assert (0, __FILE__, __LINE__,
+               "_RWSTD_NO_EXT_TIME_GET_PRIMARY not #defined");
+#endif   // _RWSTD_NO_EXT_TIME_GET_PRIMARY
+
+
+    // exercise _RWSTD_NO_EXT_TIME_PUT_PRIMARY
+    rw_info (0, 0, __LINE__, "_RWSTD_NO_EXT_TIME_PUT_PRIMARY");
+
+#ifndef _RWSTD_NO_EXT_TIME_PUT_PRIMARY
+    rw_assert (0, __FILE__, __LINE__,
+               "_RWSTD_NO_EXT_TIME_PUT_PRIMARY not #defined");
+#endif   // _RWSTD_NO_EXT_TIME_PUT_PRIMARY
+
+
+    // exercise _RWSTD_NO_EXT_MESSAGES_PRIMARY
+    rw_info (0, 0, __LINE__, "_RWSTD_NO_EXT_MESSAGES_PRIMARY");
+
+#ifndef _RWSTD_NO_EXT_MESSAGES_PRIMARY
+    rw_assert (0, __FILE__, __LINE__,
+               "_RWSTD_NO_EXT_MESSAGES_PRIMARY not #defined");
+#endif   // _RWSTD_NO_EXT_MESSAGES_PRIMARY
+
+    return 0;
+}
+
+/* extern */ int
+main (int argc, char* argv [])
+{
+    return rw_test (argc, argv, __FILE__,
+                    "intro.compliance",
+                    0,   // no comment
+                    run_test, "", 0);
+}
+



Mime
View raw message