core: declare word's hashcode an integer. Make word not flushable since it's mutable. Add a test case for #1392.

Fixes #1392. @bjourne found this.
db4
Doug Coleman 2015-07-18 00:27:12 -07:00
parent ac0828718f
commit bc0c02acdf
2 changed files with 16 additions and 4 deletions

View File

@ -1,6 +1,5 @@
USING: accessors assocs continuations fry hashtables io kernel
make math namespaces prettyprint sequences sequences.private
tools.test vectors ;
USING: accessors assocs continuations fry hashtables kernel make
math namespaces sequences slots.private tools.test ;
IN: hashtables.tests
{ H{ } } [ { } [ dup ] H{ } map>assoc ] unit-test
@ -186,3 +185,16 @@ H{ } "x" set
! Random test case
{ "A" } [ 100 iota [ dup ] H{ } map>assoc 32 over delete-at "A" 32 pick set-at 32 of ] unit-test
! Bug 1392, word's hashcode was declared a fixnum
! It fails depending on hash growth, so test in a loop
SYMBOL: +bignum-hashcode+
-405534154 +bignum-hashcode+ 1 set-slot
{ t } [
100 iota [
drop
H{ } clone
f +bignum-hashcode+ pick set-at
+bignum-hashcode+ +bignum-hashcode+ pick set-at assoc-size 1 =
] all?
] unit-test

View File

@ -263,7 +263,7 @@ M: word forget*
] if ;
M: word hashcode*
nip 1 slot { fixnum } declare ; inline foldable
nip 1 slot { integer } declare ; inline
M: word literalize <wrapper> ;