unofficial mirror of bug-guile@gnu.org 
 help / color / mirror / Atom feed
From: Andy Wingo <wingo@pobox.com>
To: taylanbayirli@gmail.com (Taylan Ulrich "Bayırlı/Kammer")
Cc: 22446-done@debbugs.gnu.org
Subject: bug#22446: (rnrs hashtables): Hash functions of eq? and eqv? hashtables
Date: Tue, 21 Jun 2016 09:48:46 +0200	[thread overview]
Message-ID: <87fus73rtt.fsf@pobox.com> (raw)
In-Reply-To: <871t3rqyka.fsf@T420.taylan> ("Taylan Ulrich \"Bayırlı/Kammer\""'s message of "Tue, 21 Jun 2016 00:34:45 +0200")

Applied, thanks :)

On Tue 21 Jun 2016 00:34, taylanbayirli@gmail.com (Taylan Ulrich "Bayırlı/Kammer") writes:

> Also pinging this thread with a (very slightly) updated patch. :-)
>
>
> From 17599f6ce7ba0beb100e80455ff99af07333d871 Mon Sep 17 00:00:00 2001
> From: =?UTF-8?q?Taylan=20Ulrich=20Bay=C4=B1rl=C4=B1/Kammer?=
>  <taylanbayirli@gmail.com>
> Date: Tue, 21 Jun 2016 00:23:29 +0200
> Subject: [PATCH] Hashtable-hash-function returns #f on eq and eqv tables.
>
> * module/rnrs/hashtables.scm (r6rs:hashtable)[type]: New field.
> (r6rs:hashtable-type): New procedure.
> * test-suite/tests/r6rs-hashtables.test: Add related tests.
> ---
>  module/rnrs/hashtables.scm            | 22 +++++++++++++++-------
>  test-suite/tests/r6rs-hashtables.test |  6 +++++-
>  2 files changed, 20 insertions(+), 8 deletions(-)
>
> diff --git a/module/rnrs/hashtables.scm b/module/rnrs/hashtables.scm
> index 98d2d76..08f37e2 100644
> --- a/module/rnrs/hashtables.scm
> +++ b/module/rnrs/hashtables.scm
> @@ -74,8 +74,9 @@
>      (make-record-type-descriptor 
>       'r6rs:hashtable #f #f #t #t 
>       '#((mutable wrapped-table)
> -	(immutable orig-hash-function)
> -	(immutable mutable))))
> +        (immutable orig-hash-function)
> +        (immutable mutable)
> +        (immutable type))))
>  
>    (define hashtable? (record-predicate r6rs:hashtable))
>    (define make-r6rs-hashtable 
> @@ -85,6 +86,7 @@
>    (define r6rs:hashtable-set-wrapped-table! (record-mutator r6rs:hashtable 0))
>    (define r6rs:hashtable-orig-hash-function (record-accessor r6rs:hashtable 1))
>    (define r6rs:hashtable-mutable? (record-accessor r6rs:hashtable 2))
> +  (define r6rs:hashtable-type (record-accessor r6rs:hashtable 3))
>  
>    (define hashtable-mutable? r6rs:hashtable-mutable?)
>  
> @@ -96,13 +98,15 @@
>      (make-r6rs-hashtable 
>       (if k (make-hash-table eq? hashq k) (make-hash-table eq? symbol-hash))
>       symbol-hash
> -     #t))
> +     #t
> +     'eq))
>  
>    (define* (make-eqv-hashtable #:optional k)
>      (make-r6rs-hashtable 
>       (if k (make-hash-table eqv? hashv k) (make-hash-table eqv? hash-by-value))
>       hash-by-value
> -     #t))
> +     #t
> +     'eqv))
>  
>    (define* (make-hashtable hash-function equiv #:optional k)
>      (let ((wrapped-hash-function (wrap-hash-function hash-function)))
> @@ -111,7 +115,8 @@
>  	   (make-hash-table equiv wrapped-hash-function k)
>  	   (make-hash-table equiv wrapped-hash-function))
>         hash-function
> -       #t)))
> +       #t
> +       'custom)))
>   
>    (define (hashtable-size hashtable)
>      (hash-table-size (r6rs:hashtable-wrapped-table hashtable)))
> @@ -143,7 +148,8 @@
>      (make-r6rs-hashtable 
>       (hash-table-copy (r6rs:hashtable-wrapped-table hashtable))
>       (r6rs:hashtable-orig-hash-function hashtable)
> -     (and mutable #t)))
> +     (and mutable #t)
> +     (r6rs:hashtable-type hashtable)))
>  
>    (define* (hashtable-clear! hashtable #:optional k)
>      (if (r6rs:hashtable-mutable? hashtable)
> @@ -178,4 +184,6 @@
>      (hash-table-equivalence-function (r6rs:hashtable-wrapped-table hashtable)))
>  
>    (define (hashtable-hash-function hashtable)
> -    (r6rs:hashtable-orig-hash-function hashtable)))
> +    (case (r6rs:hashtable-type hashtable)
> +      ((eq eqv) #f)
> +      (else (r6rs:hashtable-orig-hash-function hashtable)))))
> diff --git a/test-suite/tests/r6rs-hashtables.test b/test-suite/tests/r6rs-hashtables.test
> index c7812c5..fbc50c9 100644
> --- a/test-suite/tests/r6rs-hashtables.test
> +++ b/test-suite/tests/r6rs-hashtables.test
> @@ -174,7 +174,11 @@
>  (with-test-prefix "hashtable-hash-function"
>    (pass-if "hashtable-hash-function returns hash function"
>      (let ((abs-hashtable (make-hashtable abs eqv?)))
> -      (eq? (hashtable-hash-function abs-hashtable) abs))))
> +      (eq? (hashtable-hash-function abs-hashtable) abs)))
> +  (pass-if "hashtable-hash-function returns #f on eq table"
> +    (eq? #f (hashtable-hash-function (make-eq-hashtable))))
> +  (pass-if "hashtable-hash-function returns #f on eqv table"
> +    (eq? #f (hashtable-hash-function (make-eqv-hashtable)))))
>  
>  (with-test-prefix "hashtable-mutable?"
>    (pass-if "hashtable-mutable? is #t on mutable hashtables"





      reply	other threads:[~2016-06-21  7:48 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-23 21:16 bug#22446: (rnrs hashtables): Hash functions of eq? and eqv? hashtables "Taylan Ulrich Bayırlı/Kammer"
     [not found] ` <handler.22446.B.145358354028626.ack@debbugs.gnu.org>
2016-01-24 11:47   ` Taylan Ulrich Bayırlı/Kammer
2016-06-20 22:34     ` Taylan Ulrich Bayırlı/Kammer
2016-06-21  7:48       ` Andy Wingo [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/guile/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87fus73rtt.fsf@pobox.com \
    --to=wingo@pobox.com \
    --cc=22446-done@debbugs.gnu.org \
    --cc=taylanbayirli@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).