fix hashing on C pointers and missing tests
This commit is contained in:
parent
470ed7c996
commit
1034c9be4e
|
@ -239,6 +239,21 @@
|
|||
(ptr-set! v _pointer (ptr-add #f 107))
|
||||
(test 107 ptr-ref v _intptr))
|
||||
|
||||
;; Test equality and hashing of c pointers:
|
||||
(let ([seventeen1 (cast 17 _long _pointer)]
|
||||
[seventeen2 (cast 17 _long _pointer)]
|
||||
[seventeen3 (ptr-add (cast 13 _long _pointer) 4)]
|
||||
[sixteen (cast 16 _long _pointer)])
|
||||
(test #t equal? seventeen1 seventeen2)
|
||||
(test #t equal? seventeen1 seventeen3)
|
||||
(test #f equal? sixteen seventeen1)
|
||||
(test #t = (equal-hash-code seventeen1) (equal-hash-code seventeen2))
|
||||
(test #t = (equal-hash-code seventeen1) (equal-hash-code seventeen3))
|
||||
(let ([ht (make-hash)])
|
||||
(hash-set! ht seventeen1 'hello)
|
||||
(test 'hello hash-ref ht seventeen2 #f)
|
||||
(test 'hello hash-ref ht seventeen3 #f)))
|
||||
|
||||
(delete-test-files)
|
||||
|
||||
(report-errs)
|
||||
|
|
|
@ -1080,7 +1080,7 @@ static long equal_hash_key(Scheme_Object *o, long k, Hash_Info *hi)
|
|||
{
|
||||
k = (k << 3) + k;
|
||||
k += (long)((char *)SCHEME_CPTR_VAL(o) + SCHEME_CPTR_OFFSET(o));
|
||||
break;
|
||||
return k;
|
||||
}
|
||||
case scheme_vector_type:
|
||||
case scheme_fxvector_type:
|
||||
|
|
Loading…
Reference in New Issue
Block a user