[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] feature/bignum 025adce 13/24: Make abs handle bignums
From: |
Tom Tromey |
Subject: |
[Emacs-diffs] feature/bignum 025adce 13/24: Make abs handle bignums |
Date: |
Fri, 13 Jul 2018 00:25:08 -0400 (EDT) |
branch: feature/bignum
commit 025adce2cf43f4ce9f3c543c1b8973541e1414d2
Author: Tom Tromey <address@hidden>
Commit: Tom Tromey <address@hidden>
Make abs handle bignums
* src/floatfns.c (Fabs): Handle bignums.
* test/src/floatfns-tests.el (bignum-abs): New test.
---
src/floatfns.c | 19 +++++++++++++++++--
test/src/floatfns-tests.el | 4 ++++
2 files changed, 21 insertions(+), 2 deletions(-)
diff --git a/src/floatfns.c b/src/floatfns.c
index bd3f2de..6d7fc14 100644
--- a/src/floatfns.c
+++ b/src/floatfns.c
@@ -275,9 +275,24 @@ DEFUN ("abs", Fabs, Sabs, 1, 1, 0,
doc: /* Return the absolute value of ARG. */)
(register Lisp_Object arg)
{
- CHECK_FIXNUM_OR_FLOAT (arg);
+ CHECK_NUMBER (arg);
- if (FLOATP (arg))
+ if (BIGNUMP (arg))
+ {
+ mpz_t val;
+ mpz_init (val);
+ mpz_abs (val, XBIGNUM (arg)->value);
+ arg = make_number (val);
+ mpz_clear (val);
+ }
+ else if (FIXNUMP (arg) && XINT (arg) == MOST_NEGATIVE_FIXNUM)
+ {
+ mpz_t val;
+ mpz_init_set_si (val, - MOST_NEGATIVE_FIXNUM);
+ arg = make_number (val);
+ mpz_clear (val);
+ }
+ else if (FLOATP (arg))
arg = make_float (fabs (XFLOAT_DATA (arg)));
else if (XINT (arg) < 0)
XSETINT (arg, - XINT (arg));
diff --git a/test/src/floatfns-tests.el b/test/src/floatfns-tests.el
index c87445b..0911ff4 100644
--- a/test/src/floatfns-tests.el
+++ b/test/src/floatfns-tests.el
@@ -38,4 +38,8 @@
(should (eql (float (+ most-positive-fixnum 1))
(+ (float most-positive-fixnum) 1))))
+(ert-deftest bignum-abs ()
+ (should (= most-positive-fixnum
+ (- (abs most-negative-fixnum) 1))))
+
(provide 'floatfns-tests)
- [Emacs-diffs] branch feature/bignum created (now cc3d758), Tom Tromey, 2018/07/13
- [Emacs-diffs] feature/bignum eefa65e 07/24: Make comparison operators handle bignums, Tom Tromey, 2018/07/13
- [Emacs-diffs] feature/bignum b2f3f4e 04/24: Provide new functions to create bignums, Tom Tromey, 2018/07/13
- [Emacs-diffs] feature/bignum 580d173 05/24: Make eql work for bignums, Tom Tromey, 2018/07/13
- [Emacs-diffs] feature/bignum a0f2adb 03/24: Introduce the bignum type, Tom Tromey, 2018/07/13
- [Emacs-diffs] feature/bignum 23eab9a 10/24: Make number-to-string work for bignums, Tom Tromey, 2018/07/13
- [Emacs-diffs] feature/bignum 025adce 13/24: Make abs handle bignums,
Tom Tromey <=
- [Emacs-diffs] feature/bignum 6d4bf2c 09/24: Add some bignum tests, Tom Tromey, 2018/07/13
- [Emacs-diffs] feature/bignum 872faab 12/24: Allow conversion of bignums to floats, Tom Tromey, 2018/07/13
- [Emacs-diffs] feature/bignum 5875fba 08/24: Make arithmetic work with bignums, Tom Tromey, 2018/07/13
- [Emacs-diffs] feature/bignum a770fb4 16/24: Make logcount handle bignums, Tom Tromey, 2018/07/13
- [Emacs-diffs] feature/bignum 0d86891 14/24: Make 1+ and 1- handle bignums, Tom Tromey, 2018/07/13
- [Emacs-diffs] feature/bignum 8fb995b 17/24: Make min and max handle bignums, Tom Tromey, 2018/07/13
- [Emacs-diffs] feature/bignum 3dea8f8 19/24: Make % and mod handle bignums, Tom Tromey, 2018/07/13
- [Emacs-diffs] feature/bignum d14808c 11/24: Make format handle bignums, Tom Tromey, 2018/07/13
- [Emacs-diffs] feature/bignum c7e393b 15/24: Make lognot handle bignums, Tom Tromey, 2018/07/13
- [Emacs-diffs] feature/bignum 1e8ae6c 06/24: Make the reader accept bignums, Tom Tromey, 2018/07/13