[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 20:40:31 PST 2019


zoecarver updated this revision to Diff 185488.

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,54 @@
+//===----------------------------------------------------------------------===//
+//
+// 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 <assert.h>
+#include <cmath>
+#include <type_traits>
+
+#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(std::abs(val) == 5);
+    assert(std::abs(pos_val) == 5);
+}
+
+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(std::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();
+    
+    // make sure that short is upgraded to int
+    ASSERT_SAME_TYPE(decltype(std::abs((short int) -5)), int);
+    
+    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.185488.patch
Type: text/x-patch
Size: 2368 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libcxx-commits/attachments/20190206/ea65ff81/attachment-0001.bin>


More information about the libcxx-commits mailing list