[libc++] Get rid of <sstream> in the valarray tests
authorLouis Dionne <ldionne@apple.com>
Mon, 19 Oct 2020 20:51:33 +0000 (16:51 -0400)
committerLouis Dionne <ldionne@apple.com>
Tue, 20 Oct 2020 22:15:57 +0000 (18:15 -0400)
20 files changed:
libcxx/test/std/numerics/numarray/valarray.nonmembers/valarray.transcend/acos_valarray.pass.cpp
libcxx/test/std/numerics/numarray/valarray.nonmembers/valarray.transcend/asin_valarray.pass.cpp
libcxx/test/std/numerics/numarray/valarray.nonmembers/valarray.transcend/atan2_valarray_valarray.pass.cpp
libcxx/test/std/numerics/numarray/valarray.nonmembers/valarray.transcend/atan2_valarray_value.pass.cpp
libcxx/test/std/numerics/numarray/valarray.nonmembers/valarray.transcend/atan2_value_valarray.pass.cpp
libcxx/test/std/numerics/numarray/valarray.nonmembers/valarray.transcend/atan_valarray.pass.cpp
libcxx/test/std/numerics/numarray/valarray.nonmembers/valarray.transcend/cos_valarray.pass.cpp
libcxx/test/std/numerics/numarray/valarray.nonmembers/valarray.transcend/cosh_valarray.pass.cpp
libcxx/test/std/numerics/numarray/valarray.nonmembers/valarray.transcend/exp_valarray.pass.cpp
libcxx/test/std/numerics/numarray/valarray.nonmembers/valarray.transcend/log10_valarray.pass.cpp
libcxx/test/std/numerics/numarray/valarray.nonmembers/valarray.transcend/log_valarray.pass.cpp
libcxx/test/std/numerics/numarray/valarray.nonmembers/valarray.transcend/pow_valarray_valarray.pass.cpp
libcxx/test/std/numerics/numarray/valarray.nonmembers/valarray.transcend/pow_valarray_value.pass.cpp
libcxx/test/std/numerics/numarray/valarray.nonmembers/valarray.transcend/pow_value_valarray.pass.cpp
libcxx/test/std/numerics/numarray/valarray.nonmembers/valarray.transcend/sin_valarray.pass.cpp
libcxx/test/std/numerics/numarray/valarray.nonmembers/valarray.transcend/sinh_valarray.pass.cpp
libcxx/test/std/numerics/numarray/valarray.nonmembers/valarray.transcend/sqrt_valarray.pass.cpp
libcxx/test/std/numerics/numarray/valarray.nonmembers/valarray.transcend/tan_valarray.pass.cpp
libcxx/test/std/numerics/numarray/valarray.nonmembers/valarray.transcend/tanh_valarray.pass.cpp
libcxx/test/std/numerics/numarray/valarray.nonmembers/valarray.transcend/valarray_helper.h [new file with mode: 0644]

index 1d67024..ce2d92b 100644 (file)
 
 #include <valarray>
 #include <cassert>
-#include <sstream>
 #include <cstddef>
 
 #include "test_macros.h"
-
-bool is_about(double x, double y, int p)
-{
-    std::ostringstream o;
-    o.precision(p);
-    scientific(o);
-    o << x;
-    std::string a = o.str();
-    o.str("");
-    o << y;
-    return a == o.str();
-}
+#include "valarray_helper.h"
 
 int main(int, char**)
 {
index e11a40c..e8d467b 100644 (file)
 
 #include <valarray>
 #include <cassert>
-#include <sstream>
 #include <cstddef>
 
 #include "test_macros.h"
-
-bool is_about(double x, double y, int p)
-{
-    std::ostringstream o;
-    o.precision(p);
-    scientific(o);
-    o << x;
-    std::string a = o.str();
-    o.str("");
-    o << y;
-    return a == o.str();
-}
+#include "valarray_helper.h"
 
 int main(int, char**)
 {
index 12d33c0..bebc40f 100644 (file)
 
 #include <valarray>
 #include <cassert>
-#include <sstream>
 #include <cstddef>
 
 #include "test_macros.h"
-
-bool is_about(double x, double y, int p)
-{
-    std::ostringstream o;
-    o.precision(p);
-    scientific(o);
-    o << x;
-    std::string a = o.str();
-    o.str("");
-    o << y;
-    return a == o.str();
-}
+#include "valarray_helper.h"
 
 int main(int, char**)
 {
index 1195b76..b8be254 100644 (file)
 
 #include <valarray>
 #include <cassert>
-#include <sstream>
 #include <cstddef>
 
 #include "test_macros.h"
-
-bool is_about(double x, double y, int p)
-{
-    std::ostringstream o;
-    o.precision(p);
-    scientific(o);
-    o << x;
-    std::string a = o.str();
-    o.str("");
-    o << y;
-    return a == o.str();
-}
+#include "valarray_helper.h"
 
 int main(int, char**)
 {
index c670aba..4cba88b 100644 (file)
 
 #include <valarray>
 #include <cassert>
-#include <sstream>
 #include <cstddef>
 
 #include "test_macros.h"
-
-bool is_about(double x, double y, int p)
-{
-    std::ostringstream o;
-    o.precision(p);
-    scientific(o);
-    o << x;
-    std::string a = o.str();
-    o.str("");
-    o << y;
-    return a == o.str();
-}
+#include "valarray_helper.h"
 
 int main(int, char**)
 {
index a491c25..daf1b2c 100644 (file)
 
 #include <valarray>
 #include <cassert>
-#include <sstream>
 #include <cstddef>
 
 #include "test_macros.h"
-
-bool is_about(double x, double y, int p)
-{
-    std::ostringstream o;
-    o.precision(p);
-    scientific(o);
-    o << x;
-    std::string a = o.str();
-    o.str("");
-    o << y;
-    return a == o.str();
-}
+#include "valarray_helper.h"
 
 int main(int, char**)
 {
index e5faa7e..d9e85e4 100644 (file)
 
 #include <valarray>
 #include <cassert>
-#include <sstream>
 #include <cstddef>
 
 #include "test_macros.h"
-
-bool is_about(double x, double y, int p)
-{
-    std::ostringstream o;
-    o.precision(p);
-    scientific(o);
-    o << x;
-    std::string a = o.str();
-    o.str("");
-    o << y;
-    return a == o.str();
-}
+#include "valarray_helper.h"
 
 int main(int, char**)
 {
index e3d8006..7ecde1b 100644 (file)
 
 #include <valarray>
 #include <cassert>
-#include <sstream>
 #include <cstddef>
 
 #include "test_macros.h"
-
-bool is_about(double x, double y, int p)
-{
-    std::ostringstream o;
-    o.precision(p);
-    scientific(o);
-    o << x;
-    std::string a = o.str();
-    o.str("");
-    o << y;
-    return a == o.str();
-}
+#include "valarray_helper.h"
 
 int main(int, char**)
 {
index 68456ca..6df7666 100644 (file)
 
 #include <valarray>
 #include <cassert>
-#include <sstream>
 #include <cstddef>
 
 #include "test_macros.h"
-
-bool is_about(double x, double y, int p)
-{
-    std::ostringstream o;
-    o.precision(p);
-    scientific(o);
-    o << x;
-    std::string a = o.str();
-    o.str("");
-    o << y;
-    return a == o.str();
-}
+#include "valarray_helper.h"
 
 int main(int, char**)
 {
index 1550eb1..b644e0f 100644 (file)
 
 #include <valarray>
 #include <cassert>
-#include <sstream>
 #include <cstddef>
 
 #include "test_macros.h"
-
-bool is_about(double x, double y, int p)
-{
-    std::ostringstream o;
-    o.precision(p);
-    scientific(o);
-    o << x;
-    std::string a = o.str();
-    o.str("");
-    o << y;
-    return a == o.str();
-}
+#include "valarray_helper.h"
 
 int main(int, char**)
 {
index 36d69b5..da66195 100644 (file)
 
 #include <valarray>
 #include <cassert>
-#include <sstream>
 #include <cstddef>
 
 #include "test_macros.h"
-
-bool is_about(double x, double y, int p)
-{
-    std::ostringstream o;
-    o.precision(p);
-    scientific(o);
-    o << x;
-    std::string a = o.str();
-    o.str("");
-    o << y;
-    return a == o.str();
-}
+#include "valarray_helper.h"
 
 int main(int, char**)
 {
index e2e92a2..4f1d726 100644 (file)
 
 #include <valarray>
 #include <cassert>
-#include <sstream>
 #include <cstddef>
 
 #include "test_macros.h"
-
-bool is_about(double x, double y, int p)
-{
-    std::ostringstream o;
-    o.precision(p);
-    scientific(o);
-    o << x;
-    std::string a = o.str();
-    o.str("");
-    o << y;
-    return a == o.str();
-}
+#include "valarray_helper.h"
 
 int main(int, char**)
 {
index 145ce85..4a7502b 100644 (file)
 
 #include <valarray>
 #include <cassert>
-#include <sstream>
 #include <cstddef>
 
 #include "test_macros.h"
-
-bool is_about(double x, double y, int p)
-{
-    std::ostringstream o;
-    o.precision(p);
-    scientific(o);
-    o << x;
-    std::string a = o.str();
-    o.str("");
-    o << y;
-    return a == o.str();
-}
+#include "valarray_helper.h"
 
 int main(int, char**)
 {
index 799ac1c..019984b 100644 (file)
 
 #include <valarray>
 #include <cassert>
-#include <sstream>
 #include <cstddef>
 
 #include "test_macros.h"
-
-bool is_about(double x, double y, int p)
-{
-    std::ostringstream o;
-    o.precision(p);
-    scientific(o);
-    o << x;
-    std::string a = o.str();
-    o.str("");
-    o << y;
-    return a == o.str();
-}
+#include "valarray_helper.h"
 
 int main(int, char**)
 {
index f713b9f..1a619b6 100644 (file)
 
 #include <valarray>
 #include <cassert>
-#include <sstream>
 #include <cstddef>
 
 #include "test_macros.h"
-
-bool is_about(double x, double y, int p)
-{
-    std::ostringstream o;
-    o.precision(p);
-    scientific(o);
-    o << x;
-    std::string a = o.str();
-    o.str("");
-    o << y;
-    return a == o.str();
-}
+#include "valarray_helper.h"
 
 int main(int, char**)
 {
index 0691735..cf9ff46 100644 (file)
 
 #include <valarray>
 #include <cassert>
-#include <sstream>
 #include <cstddef>
 
 #include "test_macros.h"
-
-bool is_about(double x, double y, int p)
-{
-    std::ostringstream o;
-    o.precision(p);
-    scientific(o);
-    o << x;
-    std::string a = o.str();
-    o.str("");
-    o << y;
-    return a == o.str();
-}
+#include "valarray_helper.h"
 
 int main(int, char**)
 {
index 9d7fc72..d4e71dd 100644 (file)
 
 #include <valarray>
 #include <cassert>
-#include <sstream>
 #include <cstddef>
 
 #include "test_macros.h"
-
-bool is_about(double x, double y, int p)
-{
-    std::ostringstream o;
-    o.precision(p);
-    scientific(o);
-    o << x;
-    std::string a = o.str();
-    o.str("");
-    o << y;
-    return a == o.str();
-}
+#include "valarray_helper.h"
 
 int main(int, char**)
 {
index 6d87fd8..3d60fc9 100644 (file)
 
 #include <valarray>
 #include <cassert>
-#include <sstream>
 #include <cstddef>
 
 #include "test_macros.h"
-
-bool is_about(double x, double y, int p)
-{
-    std::ostringstream o;
-    o.precision(p);
-    scientific(o);
-    o << x;
-    std::string a = o.str();
-    o.str("");
-    o << y;
-    return a == o.str();
-}
+#include "valarray_helper.h"
 
 int main(int, char**)
 {
index 2000655..fe6566d 100644 (file)
 
 #include <valarray>
 #include <cassert>
-#include <sstream>
 #include <cstddef>
 
 #include "test_macros.h"
-
-bool is_about(double x, double y, int p)
-{
-    std::ostringstream o;
-    o.precision(p);
-    scientific(o);
-    o << x;
-    std::string a = o.str();
-    o.str("");
-    o << y;
-    return a == o.str();
-}
+#include "valarray_helper.h"
 
 int main(int, char**)
 {
diff --git a/libcxx/test/std/numerics/numarray/valarray.nonmembers/valarray.transcend/valarray_helper.h b/libcxx/test/std/numerics/numarray/valarray.nonmembers/valarray.transcend/valarray_helper.h
new file mode 100644 (file)
index 0000000..d68dac0
--- /dev/null
@@ -0,0 +1,18 @@
+#ifndef LIBCPP_TEST_VALARRAY_HELPER_H
+#define LIBCPP_TEST_VALARRAY_HELPER_H
+
+#include <cmath>
+
+// Returns whether `x` and `y` are equal, up to the given number of
+// significant digits after the decimal.
+//
+// Specifically, we look whether `abs(x - y) < epsilon`, where epsilon
+// is `(1 / 10)^p`, assuming p is the number of digits we care about.
+// This means we're basically looking whether `abs(x - y)` is less
+// than `0.00..001` for some number of digits.
+inline bool is_about(double x, double y, int significant_digits) {
+    double epsilon = std::pow(1.0 / 10.0, significant_digits);
+    return std::abs(x - y) < epsilon;
+}
+
+#endif /* LIBCPP_TEST_VALARRAY_HELPER */