Another issue is with `hash-table=?`. The spec says

(hash-table=? value-comparator hash-table1 hash-table2)

Returns #t if hash-table1 and hash-table2 have the same keys (in the sense of their common equality predicate) and each key has the same value (in the sense of value-comparator), and #f otherwise.

The sentence in parenthesis suggests both hash tables should have the same equality predicate. That is, the following two tests are also glass boxes:

(test (begin (hash-table-union! ht-eqv2 ht-fixnum)
             (hash-table=? default-comparator ht-eqv2 ht-fixnum))
      #t)

(test (begin (hash-table-intersection! ht-eqv2 ht-fixnum)
             (hash-table=? default-comparator ht-eqv2 ht-fixnum))
      #t)

Regards,
Jéssica 

Em sáb, 5 de jan de 2019 às 19:04, Jéssica Milaré <xxxxxx@gmail.com> escreveu:
While implementing SRFI-125 procedures for Guile, I stumbled across a few incompatibilities between the reference implementation and the SRFI-125 specification.

- Spec says hash-table returns an immutable hash table (if that is supported) and signal an error if there are duplicate keys, but standard implementation returns a mutable hash table and signals no error with duplicate keys
- Spec says hash-table-set! must go left to right, but in standard implementation it goes right to left
- Spec says hash-table-empty-copy returns a mutable hash table, but in standard implementation it returns an immutable hash table if the given hash table is immutable

Plus, hash-table-delete! seems to loop infinitely once it finds a key.

The attached patch is an attempt to fix them.