anchor.diff:        (when (funcall test key slot-key)
   	(return (values offset free-slot))))))
   
  -(defun hash-table-rehash (hash-table &optional (size-multiplier 3))
  +(defun hash-table-rehash (hash-table resize-p)
     "Resize and rehash HASH-TABLE so that there are no tombstones the usage
   is below the rehash-threshold."
  -  (let ((new-size (* (hash-table-size hash-table) size-multiplier))
  +  (let ((new-size (if resize-p
  +                      (if (floatp (hash-table-rehash-size hash-table))
  +                          (ceiling (* (hash-table-size hash-table) (hash-table-rehash-size hash-table)))
  +                          (+ (hash-table-size hash-table) (hash-table-rehash-size hash-table)))
  +                      (hash-table-size hash-table)))
   	(old-size (hash-table-size hash-table))
   	(old-storage (hash-table-storage hash-table)))
       (setf (hash-table-storage hash-table) (make-array (* new-size 2)
  
positive.code: (deftype hash-table ()
    `(satisfies hash-table-p))
  
  (defun make-hash-table (&key (test 'eql) (size 101) (rehash-size 50) (rehash-threshold 1))
    ;; Canonicalize and check the test function
    (cond ((eql test #'eq) (setf test 'eq))
  	((eql test #'eql) (setf test 'eql))
  
negative.code: The second return value is the first available/empty slot in the hash-table for KEY.
  Requires at least one completely unbound slot to terminate."
    (when (hash-table-rehash-required hash-table)
      (hash-table-rehash hash-table nil))
    (do* ((free-slot nil)
          (size (hash-table-size hash-table))
          (test (hash-table-test hash-table))
  