Author: elemings
Date: Wed Apr 16 09:31:36 2008
New Revision: 648742
URL: http://svn.apache.org/viewvc?rev=648742&view=rev
Log:
2008-04-16 Eric Lemings <[EMAIL PROTECTED]>
STDCXX-864 (STDCXX-868)
* tests/iostream/27.basic.ios.cpp: Migrated new test from old
Perforce repository.
Added:
stdcxx/trunk/tests/iostream/27.basic.ios.cpp
Added: stdcxx/trunk/tests/iostream/27.basic.ios.cpp
URL:
http://svn.apache.org/viewvc/stdcxx/trunk/tests/iostream/27.basic.ios.cpp?rev=648742&view=auto
==============================================================================
--- stdcxx/trunk/tests/iostream/27.basic.ios.cpp (added)
+++ stdcxx/trunk/tests/iostream/27.basic.ios.cpp Wed Apr 16 09:31:36 2008
@@ -0,0 +1,299 @@
+/***************************************************************************
+ *
+ * 27.basic.ios.cpp - test exercising the class template basic_ios
+ *
+ * $Id: //stdcxx/trunk/tests/iostream/27_basic_ios.cpp#1 $
+ *
+ ***************************************************************************
+ *
+ * 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.
+ *
+ **************************************************************************/
+
+// prevent the inclusion of non-essential public headers; only headers
+// necessary to compile each header #included here are #included
+// will produce errors if any templates defined in the header are
+// instantiated without the names they use having been completely defined
+#if !defined (_MSC_VER) || _MSC_VER > 1300
+# define _RWSTD_NO_REDUNDANT_DEFINITIONS
+#endif
+
+// prevent out-of-line template definitions in .cc files from being explicitly
+// #included during the processing of library headers (faster compilation)
+// assumes that the test doesn't instantiate those templates on types other
+// than those they were explcitly instantiated on (will have no effect if
+// explicit instantiation is disabled or unsupported)
+#define _RWSTD_NO_TEMPLATE_DEFINITIONS
+
+#include <ios>
+
+// IMPORTANT: do not #include any other header before the declarations
+// below in order not to accidentally bring in any missing
+// definitions from the #included header
+
+#ifndef _RWSTD_NO_NAMESPACE
+# define std std
+#else
+# define std
+#endif // _RWSTD_NO_NAMESPACE
+
+/**************************************************************************/
+
+// compilation tests
+
+// use defs from <iosfwd> to verify that it is #included
+
+struct S { /* empty */ };
+
+typedef std::char_traits<S> Traits;
+typedef std::char_traits<char> char_Traits;
+
+#ifndef _RWSTD_NO_WCHAR_T
+
+typedef std::char_traits<wchar_t> wchar_t_Traits;
+
+#endif // _RWSTD_NO_WCHAR_T
+
+typedef std::allocator<S> Alloc;
+
+#ifndef _RWSTD_NO_COMPLEX_DEFAULT_TEMPLATES
+
+// make sure that default template arguments are specified
+
+typedef std::basic_ios<S> S_basic_ios;
+typedef std::basic_streambuf<S> S_basic_streambuf;
+typedef std::basic_istream<S> S_basic_istream;
+typedef std::basic_ostream<S> S_basic_ostream;
+typedef std::basic_iostream<S> S_basic_iostream;
+typedef std::basic_stringbuf<S> S_basic_stringbuf;
+typedef std::basic_istringstream<S> S_basic_istringstream;
+typedef std::basic_ostringstream<S> S_basic_ostringstream;
+typedef std::basic_stringstream<S> S_basic_stringstream;
+
+typedef std::basic_filebuf<S> S_basic_filebuf;
+typedef std::basic_ifstream<S> S_basic_ifstream;
+typedef std::basic_ofstream<S> S_basic_ofstream;
+typedef std::basic_fstream<S> S_basic_fstream;
+
+typedef std::istreambuf_iterator<S> S_istreambuf_iterator;
+typedef std::ostreambuf_iterator<S> S_ostreambuf_iterator;
+
+#else // if defined _RWSTD_NO_COMPLEX_DEFAULT_TEMPLATES
+
+// specify default template argument for broken compilers
+
+typedef std::basic_ios<S, Traits> S_basic_ios;
+typedef std::basic_streambuf<S, Traits> S_basic_streambuf;
+typedef std::basic_istream<S, Traits> S_basic_istream;
+typedef std::basic_ostream<S, Traits> S_basic_ostream;
+typedef std::basic_iostream<S, Traits> S_basic_iostream;
+typedef std::basic_stringbuf<S, Traits, Alloc> S_basic_stringbuf;
+typedef std::basic_istringstream<S, Traits, Alloc> S_basic_istringstream;
+typedef std::basic_ostringstream<S, Traits, Alloc> S_basic_ostringstream;
+typedef std::basic_stringstream<S, Traits, Alloc> S_basic_stringstream;
+
+typedef std::basic_filebuf<S, Traits> S_basic_filebuf;
+typedef std::basic_ifstream<S, Traits> S_basic_ifstream;
+typedef std::basic_ofstream<S, Traits> S_basic_ofstream;
+typedef std::basic_fstream<S, Traits> S_basic_fstream;
+
+typedef std::istreambuf_iterator<S, Traits> S_istreambuf_iterator;
+typedef std::ostreambuf_iterator<S, Traits> S_ostreambuf_iterator;
+
+#endif // _RWSTD_NO_COMPLEX_DEFAULT_TEMPLATES
+
+typedef std::fpos<S> S_fpos;
+
+// test whether all required typedefs are defined
+
+typedef std::ios X_ios;
+typedef std::streambuf X_streambuf;
+typedef std::istream X_istream;
+typedef std::ostream X_ostream;
+typedef std::iostream X_iostream;
+typedef std::stringbuf X_stringbuf;
+typedef std::istringstream X_istringstream;
+typedef std::ostringstream X_ostringstream;
+typedef std::stringstream X_stringstream;
+typedef std::filebuf X_filebuf;
+typedef std::ifstream X_ifstream;
+typedef std::ofstream X_ofstream;
+typedef std::fstream X_fstream;
+
+typedef std::streampos X_streampos;
+
+#ifndef _RWSTD_NO_WCHAR_T
+
+typedef std::wios X_wios;
+typedef std::wstreambuf X_wstreambuf;
+typedef std::wistream X_wistream;
+typedef std::wostream X_wostream;
+typedef std::wiostream X_wiostream;
+typedef std::wstringbuf X_wstringbuf;
+typedef std::wistringstream X_wistringstream;
+typedef std::wostringstream X_wostringstream;
+typedef std::wstringstream X_wstringstream;
+typedef std::wfilebuf X_wfilebuf;
+typedef std::wifstream X_wifstream;
+typedef std::wofstream X_wofstream;
+typedef std::wfstream X_wfstream;
+
+typedef std::wstreampos X_wstreampos;
+
+#endif // _RWSTD_NO_WCHAR_T
+
+/**************************************************************************/
+
+// additional compilation tests
+
+#include <driver.h>
+
+static void
+test_synopsis ()
+{
+ rw_info (0, 0, __LINE__, "27.4.4 Class template basic_ios");
+
+ // exercise types
+ std::streamoff off = 0;
+ _RWSTD_UNUSED (off);
+
+ std::streamsize size = 0;
+ _RWSTD_UNUSED (size);
+
+ std::fpos<int> fpi;
+ _RWSTD_UNUSED (fpi);
+
+ std::ios_base *iob = 0;
+ _RWSTD_UNUSED (iob);
+
+ // exercise a default argument
+ std::basic_ios<char, std::char_traits<char> > *bios_2 = 0;
+ std::basic_ios<char /*, char_traits<char> */> *bios_1 = bios_2;
+
+ _RWSTD_UNUSED (bios_2);
+ _RWSTD_UNUSED (bios_1);
+
+#ifndef _RWSTD_NO_WCHAR_T
+
+ // exercise a default argument
+ std::basic_ios<wchar_t, std::char_traits<wchar_t> > *wbios_2 = 0;
+ std::basic_ios<wchar_t /*, char_traits<wchar_t> */> *wbios_1 = wbios_2;
+
+ _RWSTD_UNUSED (wbios_2);
+ _RWSTD_UNUSED (wbios_1);
+
+#endif // _RWSTD_NO_WCHAR_T
+
+#define TEST_MANIP(name) { \
+ std::ios_base& (*pf)(std::ios_base&) = &name; \
+ _RWSTD_UNUSED (pf); \
+ }
+
+ // 27.4.5, manipulators:
+ TEST_MANIP (std::boolalpha);
+ TEST_MANIP (std::noboolalpha);
+ TEST_MANIP (std::noshowbase);
+ TEST_MANIP (std::showpoint);
+ TEST_MANIP (std::noshowpoint);
+ TEST_MANIP (std::noshowpos);
+ TEST_MANIP (std::skipws);
+ TEST_MANIP (std::noskipws);
+ TEST_MANIP (std::uppercase);
+ TEST_MANIP (std::nouppercase);
+ TEST_MANIP (std::internal);
+ TEST_MANIP (std::left);
+ TEST_MANIP (std::right);
+ TEST_MANIP (std::dec);
+ TEST_MANIP (std::hex);
+ TEST_MANIP (std::oct);
+ TEST_MANIP (std::fixed);
+ TEST_MANIP (std::scientific);
+}
+
+/**************************************************************************/
+
+// invariant tests
+
+template <class charT>
+static void
+test_ctors (charT /* unused */, const char* cname)
+{
+ rw_info (0, 0, __LINE__, "27.4.4.1 basic_ios<%s> constructors", cname);
+
+ // 27.4.4.1, p1
+ std::basic_ios<charT, std::char_traits<charT> > io0 (0);
+
+ rw_assert (0 == io0.rdbuf (), __FILE__, __LINE__,
+ "basic_ios<%s>::rdbuf () == 0", cname);
+
+ rw_assert (0 == io0.tie (), __FILE__, __LINE__,
+ "basic_ios<%s>::tie () == 0", cname);
+
+ rw_assert (io0.badbit == io0.rdstate (), __FILE__, __LINE__,
+ "basic_ios<%s>::rdstate () == %{If}, got %{If}",
+ cname, io0.badbit, io0.flags ());
+
+ rw_assert ((io0.skipws | io0.dec) == io0.flags (),
+ __FILE__, __LINE__,
+ "basic_ios<%s>::flags () == %{If}, got %{If}",
+ cname, io0.skipws | io0.dec, io0.flags ());
+
+ rw_assert (0 == io0.width (), __FILE__, __LINE__,
+ "basic_ios<%s>::width () == 0, got %l",
+ cname, io0.width ());
+
+ rw_assert (6 == io0.precision (), __FILE__, __LINE__,
+ "basic_ios<%s>::precision () == 6, got %l",
+ cname, io0.precision ());
+
+ rw_assert (io0.widen (' ') == io0.fill (), __FILE__, __LINE__,
+ "basic_ios<%s>::fill ()", cname);
+}
+
+/**************************************************************************/
+
+// command-line options
+static int opt_no_basic_ios_ctors = 0;
+
+static int
+run_test (int /* unused */, char* /* unused */ [])
+{
+ test_synopsis ();
+
+ if (opt_no_basic_ios_ctors) {
+ rw_note (0, 0, 0, "basic_ios<T> ctors disabled");
+ }
+ else {
+ test_ctors (char (), "char");
+ }
+
+ return 0;
+}
+
+/* extern */ int
+main (int argc, char* argv [])
+{
+ return rw_test (argc, argv, __FILE__,
+ "lib.iostream.basic_ios",
+ 0, // no comment
+ run_test,
+ "|-no-basic_ios-ctors# ",
+ &opt_no_basic_ios_ctors);
+}
+