Subject: bug#21701: closed (Re: Fwd: cl-typecase broken (was 25.0.50; ert explainer for equal can't handle negative numbers))

From: [email-masked] (GNU bug Tracking System)
Date: Fri, 04 Dec 2015 13:31:02 +0000

Your bug report

#21701: 25.0.50; ert explainer for equal can't handle negative numbers (work in 24.5)

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
21701: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=21701
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: Fwd: cl-typecase broken (was 25.0.50; ert explainer for equal can't handle negative numbers)
From: Stefan Monnier <[email-masked]>
To: Anders Lindgren <[email-masked]>
Cc: [email-masked]
Date: Fri, 04 Dec 2015 08:30:47 -0500
List-Id: <debbugs-submit.debbugs.gnu.org>

> I just realised that the underlying problem is a change to `cl-typecase'.
> It treats -50 as a character.
>
> (cl-typecase -50
>   (character "A character")
>   (fixnum "A fixnum")
>   (t "Something else"))
>
> Emacs 25 returns "A character" and emacs 24 "A fixnum".

I installed the patch below which should fix this.

        Stefan

diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el
index 09d2d3f..c8aad3a 100644
--- a/lisp/emacs-lisp/cl-macs.el
+++ b/lisp/emacs-lisp/cl-macs.el
@@ -2885,7 +2885,7 @@ cl--macroexp-fboundp
 (put 'real 'cl-deftype-satisfies #'numberp)
 (put 'fixnum 'cl-deftype-satisfies #'integerp)
 (put 'base-char 'cl-deftype-satisfies #'characterp)
-(put 'character 'cl-deftype-satisfies #'integerp)
+(put 'character 'cl-deftype-satisfies #'natnump)

 ;;;###autoload

Subject: 25.0.50; ert explainer for equal can't handle negative numbers (work in 24.5)
From: Anders Lindgren <[email-masked]>
To: [email-masked]
Date: Sun, 18 Oct 2015 10:56:58 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

Steps to repeat, eval the following and run `ert'.

(ert-deftest bad-equal ()
  (should (equal 23 -50)))

Instead of a normal Ert error, the following is reported:

A bad-equal
    aborted

When placing the cursor on the error and press "d" (to run the test case in
the debugger), the following call stack is presented:

  apply(debug (error (wrong-type-argument characterp -50)))
  ert--run-test-debugger([cl-struct-ert--test-execution-info...
  #[128 "\301\300\"\207" [[cl-struct-ert--test-execution-info ...
  format("?%c" -50)
  ert--explain-format-atom(-50)
  ert--explain-equal-rec(23 -50)
  ert--explain-equal(23 -50)
  apply(ert--explain-equal (23 -50))
  (list :explanation (apply -explainer- args-1))

Clearly, the code is trying to print -50 as a character.

This worked in Emacs 24.5, where Ert reported:

F bad-equal
    (ert-test-failed
     ((should
       (equal 23 -50))
      :form
      (equal 23 -50)
      :value nil :explanation
      (different-atoms
       (23 "#x17" "?")
       (-50 "#x3fffffffffffffce"))))

Sincerely,
    Anders Lindgren

In GNU Emacs 25.0.50.158 (x86_64-apple-darwin14.5.0, NS appkit-1348.17
Version 10.10.5 (Build 14F27))
 of 2015-10-16
Repository revision: ff4798b8b493ba1ec51dcb1c59a11824865124b8
Windowing system distributor 'Apple', version 10.3.1348
Configured using:
 'configure --with-ns --without-dbus'

Configured features:
ACL ZLIB TOOLKIT_SCROLL_BARS NS

Important settings:
  value of $LC_CTYPE: UTF-8
  locale-coding-system: utf-8-unix

Major mode: ERT-Results

Minor modes in effect:
  tooltip-mode: t
  global-eldoc-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  buffer-read-only: t
  line-number-mode: t
  transient-mark-mode: t

Recent messages:
For information about GNU Emacs and the GNU system, type C-h C-a.
bad-equal
Ran 1 tests, 0 results were as expected, 1 unexpected
Running test bad-equal...
Entering debugger...

Load-path shadows:
None found.

Features:
(shadow sort gnus-util mail-extr emacsbug message dired format-spec
rfc822 mml mml-sec mm-decode mm-bodies mm-encode mail-parse rfc2231
mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums
mm-util help-fns mail-prsvr mail-utils pp cl-extra help-mode cl-macs gv
ert find-func ewoc easymenu debug cl-loaddefs pcase cl-lib time-date
mule-util tooltip eldoc electric uniquify ediff-hook vc-hooks
lisp-float-type mwheel ns-win term/common-win tool-bar dnd fontset image
regexp-opt fringe tabulated-list newcomment elisp-mode lisp-mode
prog-mode register page menu-bar rfn-eshadow timer select scroll-bar
mouse jit-lock font-lock syntax facemenu font-core frame cl-generic cham
georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao
korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech
european ethiopic indian cyrillic chinese charscript case-table epa-hook
jka-cmpr-hook help simple abbrev minibuffer cl-preloaded nadvice
loaddefs button faces cus-face macroexp files text-properties overlay
sha1 md5 base64 format env code-pages mule custom widget
hashtable-print-readable backquote cocoa ns multi-tty
make-network-process emacs)

Memory information:
((conses 16 89635 5963)
 (symbols 48 19436 0)
 (miscs 40 78 159)
 (strings 32 15385 4052)
 (string-bytes 1 463936)
 (vectors 16 12257)
 (vector-slots 8 415700 5035)
 (floats 8 162 183)
 (intervals 56 271 6)
 (buffers 976 14))