anchor.diff:  (ql:quickload :tnetstring)
   (ql:quickload :cl-json)
  +
   (defun compare-alists (a b)
  -  (and (equal (length a) (length b))
  +  (and (= (length a) (length b))
          (every (lambda (item) 
                (equalp item (assoc (car item) b))) a)))
   
  +(defun compare-alist-hash (al ht)
  +  (and (= (length al) (hash-table-count ht))
  +       (every (lambda (item)
  +                (equalp (cdr item) (gethash (car item) ht))) al)))
  +
   (defun my-compare (a b)
     (or (equalp a b)
  -          (and (consp a) (consp b)
  -               (consp (car a)) (consp (car b))
  -               (keywordp (caar a))
  -               (keywordp (caar b))
  -               (compare-alists a b))))
  +      (and (consp a) (consp b)
  +           (consp (car a)) (consp (car b))
  +           (keywordp (caar a))
  +           (keywordp (caar b))
  +           (compare-alists a b))
  +      (and (consp a) (hash-table-p b)
  +           (compare-alist-hash a b))))
   
   (defun a-test (a b)
     (if (my-compare a b)
  
positive.code:                                  (tnetstring:dump-tnetstring item)))
                  1 0) into passed
            sum 1 into total
            finally (format t "~D of ~D tests passed~&" passed total))))
  
  (defun benchmark-encode (iters)
    (let ((tests (with-open-file (s "tests/srecs.txt")
  
negative.code:             until (eq item done)
              sum (if (a-test item titem) 1 0) into passed
              sum 1 into total
              finally (progn
                        (format t "~D of ~D tests passed~&" passed total)
                        (return (values passed total))))))))
  
  (defun test-tnet-encode-decode ()
    (let ((tests
  