stdcxx-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From elemi...@apache.org
Subject svn commit: r649563 - /stdcxx/trunk/tests/numerics/26.valarray.transcend.cpp
Date Fri, 18 Apr 2008 15:09:54 GMT
Author: elemings
Date: Fri Apr 18 08:09:51 2008
New Revision: 649563

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

	STDCXX-867
	* tests/numerics/26.valarray.transcend.cpp: Migrated new test
	from old Perforce repository.


Added:
    stdcxx/trunk/tests/numerics/26.valarray.transcend.cpp

Added: stdcxx/trunk/tests/numerics/26.valarray.transcend.cpp
URL: http://svn.apache.org/viewvc/stdcxx/trunk/tests/numerics/26.valarray.transcend.cpp?rev=649563&view=auto
==============================================================================
--- stdcxx/trunk/tests/numerics/26.valarray.transcend.cpp (added)
+++ stdcxx/trunk/tests/numerics/26.valarray.transcend.cpp Fri Apr 18 08:09:51 2008
@@ -0,0 +1,166 @@
+/***************************************************************************
+ *
+ * 26.valarray.transcend.cpp - verify [lib.valarray.transcend] requirements
+ *
+ * $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.
+ *
+ **************************************************************************/
+
+// disable implicit inclusion to work around a limitation in
+// IBM's VisualAge 5.0.2.0 (see PR#26959)
+#if defined __IBMCPP__ && !defined _RWSTD_NO_IMPLICIT_INCLUSION
+#  define _RWSTD_NO_IMPLICIT_INCLUSION
+#endif   // defined __IBMCPP__ && !defined _RWSTD_NO_IMPLICIT_INCLUSION
+
+#include <cmath>
+#include <cstddef> // for std::size_t
+#include <valarray>
+
+#include <driver.h>
+#include <valcmp.h>
+
+/**************************************************************************/
+
+template <class T>
+static void
+test_val (const char* tname)
+{
+
+#define TEST(fun) {                                                        \
+        rw_info (0, __FILE__, __LINE__, "template <> std::valarray<%s> "   \
+                 "std::" #fun " (std::valarray<%s>)", tname, tname);       \
+                                                                           \
+        std::valarray<T> val (10);                                         \
+        for (std::size_t i = 0; i != val.size (); ++i)                     \
+            val [i] = T (i);                                               \
+                                                                           \
+        const std::valarray<T> result = std::fun (val);                    \
+                                                                           \
+        bool success = 10 == val.size () && val.size () == result.size (); \
+                                                                           \
+        for (std::size_t j = 0; success && j != result.size (); ++j) {     \
+            if (!rw_equal (result [j], T (std::fun (T (j)))))              \
+                success = false;                                           \
+        }                                                                  \
+                                                                           \
+        rw_assert (success, __FILE__, __LINE__,                            \
+                   "template <> std::valarray<%s> std::" #fun              \
+                   "(std::valarray<%s>)", tname, tname);                   \
+    } (void)0
+
+#define TEST_2(fun, x) {                                                   \
+        if (x < 0)                                                         \
+            rw_info (0, __FILE__, __LINE__,                                \
+                     "template <> std::valarray<%s> "                      \
+                     "std::" #fun " (const %s&, const std::"               \
+                     "valarray<%s>&)", tname, tname, tname);               \
+        else if (x > 0)                                                    \
+            rw_info (0, __FILE__, __LINE__,                                \
+                     "template <> std::valarray<%s> "                      \
+                     "std::" #fun " (const std::valarray<%s>&,"            \
+                     "const %s&)", tname, tname, tname);                   \
+        else                                                               \
+            rw_info (0, __FILE__, __LINE__,                                \
+                     "template <> std::valarray<%s> "                      \
+                     "std::" #fun " (const std::valarray<%s>&," \
+                     "const std::valarray<%s>&)", tname, tname, tname);    \
+                                                                           \
+        std::valarray<T> val (10);                                         \
+        for (std::size_t i = 0; i != val.size (); ++i)                     \
+            val [i] = T (i);                                               \
+                                                                           \
+        const std::valarray<T> result =                                    \
+             x < 0 ? std::fun (T (x), val)                                 \
+           : x > 0 ? std::fun (val, T (x))                                 \
+                   : std::fun (val, val);                                  \
+                                                                           \
+        bool success = 10 == val.size () && val.size () == result.size (); \
+                                                                           \
+        for (std::size_t j = 0; success && j != result.size (); ++j) {     \
+            T res;                                                         \
+            if (x < 0) res = T (std::fun (T (x), T (j)));                  \
+            if (x > 0) res = T (std::fun (T (j), T (x)));                  \
+            if (!x) res = T (std::fun (T (j), T (j)));                     \
+            if (!rw_equal (result [j], res))                               \
+                success = false;                                           \
+        }                                                                  \
+                                                                           \
+        rw_assert (success, __FILE__, __LINE__,                            \
+                   "template <> std::valarray<%s> std::" #fun "(...)",     \
+                   tname);                                                 \
+    } (void)0
+
+    TEST (abs);
+    TEST (acos);
+    TEST (abs);
+    TEST (acos);
+    TEST (asin);
+    TEST (atan);
+
+    TEST_2 (atan2, -2);
+    TEST_2 (atan2, +3);
+    TEST_2 (atan2,  0);
+
+    TEST (cos);
+    TEST (cosh);
+    TEST (exp);
+    TEST (log);
+    TEST (log10);
+
+    TEST_2 (pow, -4);
+    TEST_2 (pow, +5);
+    TEST_2 (pow,  0);
+
+    TEST (sin);
+    TEST (sinh);
+    TEST (sqrt);
+    TEST (tan);
+    TEST (tanh);
+}
+
+/**************************************************************************/
+
+static int
+run_test (int /*unused*/, char* /*unused*/ [])
+{
+    test_val<float> ("float");
+    test_val<double> ("double");
+
+#ifndef _RWSTD_NO_LONG_DOUBLE
+
+    test_val<long double> ("long double");
+
+#endif   // _RWSTD_NO_LONG_DOUBLE
+
+    return 0;
+}
+
+/*extern*/ int
+main (int argc, char* argv [])
+{
+    return rw_test (argc, argv, __FILE__,
+                    "lib.valarray.transcend",
+                    0,   // no comment
+                    run_test, "", 0);
+}
+



Mime
View raw message