<div dir="auto">FYI I have patches to fix abs in flight. you may want to hold off for now</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri., Apr. 5, 2019, 8:47 p.m. Zoe Carver via Phabricator, <<a href="mailto:reviews@reviews.llvm.org">reviews@reviews.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">zoecarver created this revision.<br>
zoecarver added reviewers: mclow.lists, EricWF.<br>
Herald added subscribers: libcxx-commits, ldionne.<br>
<br>
**Why?**<br>
<br>
1. Because there was a lack of `abs` tests<br>
2. Because these tests make it very clear what `abs` declarations are where<br>
<br>
<br>
Repository:<br>
  rCXX libc++<br>
<br>
<a href="https://reviews.llvm.org/D60350" rel="noreferrer noreferrer" target="_blank">https://reviews.llvm.org/D60350</a><br>
<br>
Files:<br>
  test/std/numerics/numerics.abs/abs_tests.h<br>
  test/std/numerics/numerics.abs/cinttypes.pass.cpp<br>
  test/std/numerics/numerics.abs/cmath.pass.cpp<br>
  test/std/numerics/numerics.abs/cstdlib.pass.cpp<br>
  test/std/numerics/numerics.abs/stdlib.h.pass.cpp<br>
<br>
<br>
Index: test/std/numerics/numerics.abs/stdlib.h.pass.cpp<br>
===================================================================<br>
--- /dev/null<br>
+++ test/std/numerics/numerics.abs/stdlib.h.pass.cpp<br>
@@ -0,0 +1,9 @@<br>
+#include "abs_tests.h"<br>
+<br>
+#include <stdlib.h><br>
+<br>
+int main()<br>
+{<br>
+    general_test<long,           long>(abs);<br>
+    general_test<long long, long long>(abs);<br>
+}<br>
\ No newline at end of file<br>
Index: test/std/numerics/numerics.abs/cstdlib.pass.cpp<br>
===================================================================<br>
--- /dev/null<br>
+++ test/std/numerics/numerics.abs/cstdlib.pass.cpp<br>
@@ -0,0 +1,13 @@<br>
+#include "abs_tests.h"<br>
+<br>
+#include <cstdlib><br>
+    <br>
+int main()<br>
+{<br>
+    general_test<int,             int>(std::abs);<br>
+    general_test<long,           long>(std::abs);<br>
+    general_test<long long, long long>(std::abs);<br>
+<br>
+    general_test<long,           long>(std::labs);<br>
+    general_test<long long, long long>(std::llabs);<br>
+}<br>
\ No newline at end of file<br>
Index: test/std/numerics/numerics.abs/cmath.pass.cpp<br>
===================================================================<br>
--- /dev/null<br>
+++ test/std/numerics/numerics.abs/cmath.pass.cpp<br>
@@ -0,0 +1,13 @@<br>
+#include "abs_tests.h"<br>
+<br>
+#include <cmath><br>
+<br>
+int main()<br>
+{<br>
+    general_test<float,             float>(std::abs);    <br>
+    general_test<float,             float>(std::fabs);<br>
+    general_test<float,             float>(std::fabsf);<br>
+    general_test<double,           double>(std::fabs);<br>
+    general_test<long double, long double>(std::fabs);<br>
+    general_test<long double, long double>(std::fabsl);<br>
+}<br>
Index: test/std/numerics/numerics.abs/cinttypes.pass.cpp<br>
===================================================================<br>
--- /dev/null<br>
+++ test/std/numerics/numerics.abs/cinttypes.pass.cpp<br>
@@ -0,0 +1,9 @@<br>
+#include "abs_tests.h"<br>
+<br>
+#include <cinttypes><br>
+<br>
+int main()<br>
+{<br>
+    // general_test<std::intmax_t, std::intmax_t>(std::abs);<br>
+    general_test<std::intmax_t, std::intmax_t>(std::imaxabs);<br>
+}<br>
Index: test/std/numerics/numerics.abs/abs_tests.h<br>
===================================================================<br>
--- /dev/null<br>
+++ test/std/numerics/numerics.abs/abs_tests.h<br>
@@ -0,0 +1,16 @@<br>
+#include <test_macros.h><br>
+#include <cassert><br>
+<br>
+template<class In, class Out> <br>
+void general_test(Out f(In))<br>
+{<br>
+    for (In i = -50; i < 50; ++i)<br>
+    {<br>
+        auto res = f(i);<br>
+        ASSERT_SAME_TYPE(decltype(res), Out);<br>
+               if (i > 0)<br>
+                       assert(res == i);<br>
+               else<br>
+                       assert(res == i - (i * 2));<br>
+    }<br>
+}<br>
<br>
<br>
</blockquote></div>