[libcxx-commits] [PATCH] D57778: std::abs should not return double (2735)
Zoe Carver via Phabricator via libcxx-commits
libcxx-commits at lists.llvm.org
Tue Feb 5 19:24:46 PST 2019
zoecarver updated this revision to Diff 185473.
zoecarver added a comment.
Remove additional `abs` declaration. Fix tests.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D57778/new/
https://reviews.llvm.org/D57778
Files:
test/std/numerics/c.math/abs.fail.cpp
test/std/numerics/c.math/abs.pass.cpp
Index: test/std/numerics/c.math/abs.pass.cpp
===================================================================
--- /dev/null
+++ test/std/numerics/c.math/abs.pass.cpp
@@ -0,0 +1,52 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include <math.h>
+#include <assert.h>
+
+#include "test_macros.h"
+
+#ifndef _LIBCPP_VERSION
+#error _LIBCPP_VERSION not defined
+#endif
+
+template <class T>
+void test_abs()
+{
+ T val = -5;
+ T pos_val = 5;
+
+ assert(abs(val) == 5);
+ assert(abs(pos_val) == 5);
+
+ ASSERT_SAME_TYPE(decltype(abs(val)), T);
+}
+
+void test_big()
+{
+ long long int big_value = 9223372036854775800; // a value to big for ints to store
+ long long int negative_big_value = -big_value;
+ assert(abs(negative_big_value) == big_value); // make sure it doesnt get casted to a smaller type
+}
+
+int main()
+{
+ test_abs<int>();
+ test_abs<long int>();
+ test_abs<long long int>();
+ test_abs<long double>();
+ test_abs<double>();
+ test_abs<float>();
+ test_abs<short int>();
+ test_abs<char>();
+
+ test_big();
+
+ return 0;
+}
+
Index: test/std/numerics/c.math/abs.fail.cpp
===================================================================
--- /dev/null
+++ test/std/numerics/c.math/abs.fail.cpp
@@ -0,0 +1,24 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include <cstdlib>
+
+#include "test_macros.h"
+
+#ifndef _LIBCPP_VERSION
+#error _LIBCPP_VERSION not defined
+#endif
+
+int main()
+{
+ unsigned int ui = -5;
+ abs(ui); // expected-error {{Call to 'abs' is ambiguous}}
+
+ return 0;
+}
+
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D57778.185473.patch
Type: text/x-patch
Size: 2264 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libcxx-commits/attachments/20190206/959b600f/attachment.bin>
More information about the libcxx-commits
mailing list