From 6d4bf2cedab365411f0aedb373b63291086658e9 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Sat, 7 Jul 2018 15:32:34 -0600 Subject: [PATCH] Add some bignum tests * test/src/data-tests.el (data-tests-bignum, data-tests-+) (data-tests-/, data-tests-number-predicates): New tests. * test/src/fns-tests (test-bignum-eql): New test. * test/src/lread-tests (lread-long-hex-integer): Expect bignum. * test/src/print-tests (print-bignum): New test. --- test/src/data-tests.el | 59 +++++++++++++++++++++++++++++++++++++++++ test/src/fns-tests.el | 8 ++++++ test/src/lread-tests.el | 4 +-- test/src/print-tests.el | 6 +++++ 4 files changed, 74 insertions(+), 3 deletions(-) diff --git a/test/src/data-tests.el b/test/src/data-tests.el index 3cd537859fd..543bb90f73f 100644 --- a/test/src/data-tests.el +++ b/test/src/data-tests.el @@ -515,4 +515,63 @@ comparing the subr with a much slower lisp implementation." (bound-and-true-p data-tests-foo2) (bound-and-true-p data-tests-foo3))))))) +(ert-deftest data-tests-bignum () + (should (bignump (+ most-positive-fixnum 1))) + (let ((f0 (+ (float most-positive-fixnum) 1)) + (f-1 (- (float most-negative-fixnum) 1)) + (b0 (+ most-positive-fixnum 1)) + (b-1 (- most-negative-fixnum 1))) + (should (> b0 -1)) + (should (> b0 f-1)) + (should (> b0 b-1)) + (should (>= b0 -1)) + (should (>= b0 f-1)) + (should (>= b0 b-1)) + (should (>= b-1 b-1)) + + (should (< -1 b0)) + (should (< f-1 b0)) + (should (< b-1 b0)) + (should (<= -1 b0)) + (should (<= f-1 b0)) + (should (<= b-1 b0)) + (should (<= b-1 b-1)) + + (should (= b0 f0)) + (should (= b0 b0)) + + (should (/= b0 f-1)) + (should (/= b0 b-1)))) + +(ert-deftest data-tests-+ () + (should-not (fixnump (+ most-positive-fixnum most-positive-fixnum))) + (should (> (+ most-positive-fixnum most-positive-fixnum) most-positive-fixnum)) + (should (eq (- (+ most-positive-fixnum most-positive-fixnum) + (+ most-positive-fixnum most-positive-fixnum)) + 0))) + +(ert-deftest data-tests-/ () + (let* ((x (* most-positive-fixnum 8)) + (y (* most-negative-fixnum 8)) + (z (- y))) + (should (= most-positive-fixnum (/ x 8))) + (should (= most-negative-fixnum (/ y 8))) + (should (= -1 (/ y z))) + (should (= -1 (/ z y))) + (should (= 0 (/ x (* 2 x)))) + (should (= 0 (/ y (* 2 y)))) + (should (= 0 (/ z (* 2 z)))))) + +(ert-deftest data-tests-number-predicates () + (should (fixnump 0)) + (should (fixnump most-negative-fixnum)) + (should (fixnump most-positive-fixnum)) + (should (integerp (+ most-positive-fixnum 1))) + (should (integer-or-marker-p (+ most-positive-fixnum 1))) + (should (numberp (+ most-positive-fixnum 1))) + (should (number-or-marker-p (+ most-positive-fixnum 1))) + (should (natnump (+ most-positive-fixnum 1))) + (should-not (fixnump (+ most-positive-fixnum 1))) + (should (bignump (+ most-positive-fixnum 1)))) + ;;; data-tests.el ends here diff --git a/test/src/fns-tests.el b/test/src/fns-tests.el index d9cca557cf2..f5f3b892441 100644 --- a/test/src/fns-tests.el +++ b/test/src/fns-tests.el @@ -593,4 +593,12 @@ (should (equal 1 (string-distance "ab" "a我b"))) (should (equal 1 (string-distance "我" "她")))) +(ert-deftest test-bignum-eql () + "Test that `eql' works for bignums." + (let ((x (+ most-positive-fixnum 1)) + (y (+ most-positive-fixnum 1))) + (should (eq x x)) + (should (eql x y)) + (should (equal x y)))) + (provide 'fns-tests) diff --git a/test/src/lread-tests.el b/test/src/lread-tests.el index 639a6da93ae..17381340c7b 100644 --- a/test/src/lread-tests.el +++ b/test/src/lread-tests.el @@ -195,9 +195,7 @@ literals (Bug#20852)." (should (eq x (cdr x))))) (ert-deftest lread-long-hex-integer () - (should-error - (read "#xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff") - :type 'overflow-error)) + (should (bignump (read "#xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")))) (ert-deftest lread-test-bug-31186 () (with-temp-buffer diff --git a/test/src/print-tests.el b/test/src/print-tests.el index c96cb5d2b69..091f1aa1afb 100644 --- a/test/src/print-tests.el +++ b/test/src/print-tests.el @@ -98,5 +98,11 @@ otherwise, use a different charset." (let ((sym '\’bar)) (should (eq (read (prin1-to-string sym)) sym)))) +(ert-deftest print-bignum () + (let* ((str "999999999999999999999999999999999") + (val (read str))) + (should (> val most-positive-fixnum)) + (should (equal (prin1-to-string val) str)))) + (provide 'print-tests) ;;; print-tests.el ends here -- 2.39.2