You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stdcxx.apache.org by se...@apache.org on 2005/11/23 20:56:35 UTC
svn commit: r348534 - in /incubator/stdcxx/trunk/tests/diagnostics: ./
19.cerrno.cpp
Author: sebor
Date: Wed Nov 23 11:56:30 2005
New Revision: 348534
URL: http://svn.apache.org/viewcvs?rev=348534&view=rev
Log:
2005-11-23 Martin Sebor <se...@roguewave.com>
* 19.cerrno.cpp: New test exercising lib.errno, the contents
of the header <cerrno>.
Added:
incubator/stdcxx/trunk/tests/diagnostics/
incubator/stdcxx/trunk/tests/diagnostics/19.cerrno.cpp (with props)
Added: incubator/stdcxx/trunk/tests/diagnostics/19.cerrno.cpp
URL: http://svn.apache.org/viewcvs/incubator/stdcxx/trunk/tests/diagnostics/19.cerrno.cpp?rev=348534&view=auto
==============================================================================
--- incubator/stdcxx/trunk/tests/diagnostics/19.cerrno.cpp (added)
+++ incubator/stdcxx/trunk/tests/diagnostics/19.cerrno.cpp Wed Nov 23 11:56:30 2005
@@ -0,0 +1,148 @@
+/***************************************************************************
+ *
+ * 19.cerrno.cpp - test exercising the lib.errno
+ *
+ * $Id: 22.locale.num.get.cpp 290831 2005-09-21 21:15:42Z sebor $
+ *
+ ***************************************************************************
+ *
+ * Copyright (c) 1994-2005 Quovadx, Inc., acting through its Rogue Wave
+ * Software division. Licensed 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.
+ *
+ **************************************************************************/
+
+// include only <cerrno> here to prevent namespace pollution
+#include <cerrno>
+
+/**************************************************************************/
+
+const char* const errors[] = {
+
+#ifndef errno
+ "errno",
+#endif // errno
+
+#ifndef EDOM
+ "EDOM not defined",
+#elif EDOM <= 0
+ "EDOM not positive",
+#endif // EDOM
+
+#ifndef EILSEQ
+ "EILSEQ", // lwg issue 288
+#elif EILSEQ <= 0
+ "EILSEQ not positive",
+#elif EILSEQ == EDOM
+ "EILSEQ not distinct from EDOM",
+#endif // EILSEQ
+
+#ifndef ERANGE
+ "ERANGE not defined",
+#elif ERANGE <= 0
+ "ERANGE not positive",
+#elif ERANGE == EDOM
+ "ERANGE not distinct from EDOM",
+#elif ERANGE == EILSEQ
+ "ERANGE not distinct from EILSEQ",
+#endif // ERANGE
+
+ 0
+};
+
+/**************************************************************************/
+
+// include all other headers here
+#include <any.h> // for rw_any_t
+#include <driver.h> // for rw_test(), ...
+
+/**************************************************************************/
+
+template <class T> void set_errno_value (T, int) { /* empty */ }
+void set_errno_value (int &errno_ref, int val) { errno_ref = val; }
+
+/**************************************************************************/
+
+static int
+errno_at_startup;
+
+static int
+run_test (int, char**)
+{
+ rw_info (0, 0, 0, "exercising the contents of the <cerrno> header");
+
+ for (unsigned i = 0; errors [i]; ++i) {
+ rw_assert (0 == errors [i], 0, 0,
+ "macro %s", errors [i]);
+ }
+
+ // get the type of errno
+ const char* const errno_type = rw_any_t (errno).type_name ();
+
+ // 7.5, p2 of C99: the type of errno must be int
+ rw_assert ( 'i' == errno_type [0]
+ && 'n' == errno_type [1]
+ && 't' == errno_type [2]
+ && '\0' == errno_type [3],
+ 0, 0,
+ "the type of errno is int, got %s", errno_type);
+
+ // 7.5, p3 of C99: errno must be 0 at program startup
+ rw_assert (0 == errno_at_startup, 0, 0,
+ "errno == 0 at program startup, got %d", errno_at_startup);
+
+#ifndef EDOM
+# define EDOM 33 /* Solaris value */
+#endif // EDOM
+
+ // 7.5, p2 of C99: errno must be a modifiable lvalue
+ set_errno_value (errno, int (EDOM));
+
+ rw_assert (EDOM == errno, 0, 0,
+ "errno == %d (%{#*m}, got %d (%{#m}) "
+ "(errno not a modifiable lvalue?)",
+ EDOM, EDOM, errno, errno);
+
+#ifndef ERANGE
+# define ERANGE 34 /* Solaris value */
+#endif // ERANGE
+
+ set_errno_value (errno, int (ERANGE));
+
+ rw_assert (ERANGE == errno, 0, 0,
+ "errno == %d (%{#*m}, got %d (%{#m}) "
+ "(errno not a modifiable lvalue?)",
+ ERANGE, ERANGE, errno, errno);
+
+#ifndef EILSEQ
+# define EILSEQ 84 /* Solaris value */
+#endif // EILSEQ
+
+ set_errno_value (errno, int (EILSEQ));
+
+ rw_assert (EILSEQ == errno, 0, 0,
+ "errno == %d (%{#*m}, got %d (%{#m}) "
+ "(errno not a modifiable lvalue?)",
+ EILSEQ, EILSEQ, errno, errno);
+
+ return 0;
+}
+
+/**************************************************************************/
+
+int main (int argc, char *argv[])
+{
+ errno_at_startup = errno;
+
+ return rw_test (argc, argv, __FILE__,
+ "lib.errno",
+ 0 /* no comment */, run_test,
+ 0 /* no command line options */, 0);
+}
Propchange: incubator/stdcxx/trunk/tests/diagnostics/19.cerrno.cpp
------------------------------------------------------------------------------
svn:eol-style = native