GNU bug report logs -
#71116
30.0.50; comp-normalize-valset doesn't sort consistently
Previous Next
Reported by: Daniel Clemente <n142857 <at> gmail.com>
Date: Wed, 22 May 2024 13:28:01 UTC
Severity: normal
Found in version 30.0.50
Done: Andrea Corallo <acorallo <at> gnu.org>
Bug is archived. No further changes may be made.
Full log
Message #8 received at submit <at> debbugs.gnu.org (full text, mbox):
Daniel Clemente <n142857 <at> gmail.com> writes:
> Current code from comp-cstr.el:
>
> (defun comp-normalize-valset (valset)
> "Sort and remove duplicates from VALSET then return it."
> (cl-sort (cl-remove-duplicates valset :test #'eq)
> (lambda (x y)
> (cond
> ((and (symbolp x) (symbolp y))
> (string< x y))
> ((and (symbolp x) (not (symbolp y)))
> t)
> ((and (not (symbolp x)) (symbolp y))
> nil)
> ((or (consp x) (consp y)
> nil))
> (t
> (< (sxhash-equal x)
> (sxhash-equal y)))))))
>
> This part:
> ((or (consp x) (consp y)
> nil))
>
> Seems like a typo; as if this was intended:
> ((or (consp x) (consp y))
> nil)
>
> In practice, it means it's not sorting well. The presence of a cons can even change how the other elements are sorted:
>
> ;; This produces: ((a . 1) 2 3)
> (comp-normalize-valset '(
> 2
> 3
> (a . 1)
> ))
>
> ;; This produces: (2 3 (a . 1))
> (comp-normalize-valset '(
> (a . 1)
> 2
> 3
> ))
>
> ;; This produces: (3 (a . 1) 2)
> (comp-normalize-valset '(
> 2
> (a . 1)
> 3
> ))
>
> Since all three examples use a list with the same elements, I would expect the same result after sorting: a sorted list
> (by some definition of sorted). Otherwise the function documentation must be adjusted.
>
> I'm just reporting this because I was reading new code and found this part hard to understand. I'm not familiar with the
> comp-cstr.el code or with how this affects native compilation, or whether there's any bug. My example doesn't represent
> how the actual code is used.
>
> For context, the original intention was to avoid comparing conses with sxhash-equal.
> https://lists.gnu.org/archive/html/emacs-devel/2024-02/msg00406.html
Yes this is my todo list, I think for how the code is now sorting should
not even be necessary anymore, so I want to give it a try at remove it
entirely.
Andrea
This bug report was last modified 1 year and 53 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.