GNU bug report logs - #56255
28.1.50; sxhash-equal does not change when object is modified

Previous Next

Package: emacs;

Reported by: Ihor Radchenko <yantar92 <at> gmail.com>

Date: Mon, 27 Jun 2022 12:27:02 UTC

Severity: normal

Found in version 28.1.50

Fixed in version 29.1

Done: Lars Ingebrigtsen <larsi <at> gnus.org>

Bug is archived. No further changes may be made.

Full log


Message #8 received at 56255 <at> debbugs.gnu.org (full text, mbox):

From: Lars Ingebrigtsen <larsi <at> gnus.org>
To: Ihor Radchenko <yantar92 <at> gmail.com>
Cc: 56255 <at> debbugs.gnu.org
Subject: Re: bug#56255: 28.1.50; sxhash-equal does not change when object is
 modified
Date: Tue, 28 Jun 2022 00:56:48 +0200
Ihor Radchenko <yantar92 <at> gmail.com> writes:

> The result of sxhash-equal does not change despite `a' object being
> changed.

Here's a self-contained example:

(require 'org-element)
(setq c (avl-tree--create #'org-element--cache-compare))
(avl-tree-enter c '(headline (:begin 2)))

(setq d (avl-tree--create #'org-element--cache-compare))
(avl-tree-enter d '(headline (:begin 5)))

(equal c d)
nil

(sxhash-equal c)
1776904311275
(sxhash-equal d)
1776904311275

This is due to:

/* Maximum depth up to which to dive into Lisp structures.  */
#define SXHASH_MAX_DEPTH 3

Since this record nests to a depth of 4, and that's where the difference
is.

So I think the doc string overstates things. 

--
If (equal A B), then (= (sxhash-equal A) (sxhash-equal B)).
--

Is not remotely true, but:

--
If (= (sxhash-equal A) (sxhash-equal B)) then it's quite likely that
(equal A B), but the opposite is not true for deeply nested structures.
--



-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no




This bug report was last modified 3 years and 58 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.