anchor.diff:  
   
   (defgeneric %test-suite-tests (suite))
  +(defgeneric %test-suite-test-lock (suite))
   
   (defgeneric test-suite-default-test-class (suite))
   (defgeneric (setf test-suite-default-test-class) (new-value suite))
  
positive.code: 
  (defgeneric map-test-suites (function)
    (:method (function)
      (map-tests (coerce function 'function) suite))
    (:method ((function function))
      (map-objects fn (find-class 'test-suite))))
  
  
  (defgeneric add-test (test suite)
    (:method ((test test) (suite test-suite))
      (register-object test suite)))
  
  (defgeneric remove-test (test suite)
    (:method ((test test) (suite test-suite))
      (remove-object test suite)))
  
  (defgeneric find-test (name suite &optional errorp)
    (:method ((name symbol) (suite test-suite) &optional (errorp t))
      (find-object name suite errorp)))
  
  (defgeneric map-tests (function suite)
    (:method (function (suite test-suite))
      (map-objects function suite)))
  
negative.code:   ((%tests
      :reader %test-suite-tests
      :initform (make-hash-table :test #'eq))
     (%tests-lock
      ;; NB: The TEST-SUITE registry functions will use a lock contained
      ;; in the the class TEST-SUITE, when accessing the global, top
      ;; level registry for test suites.
      ;;
      ;; This slot provides a lock for test registry within any single
      ;; test suite.
      :reader %test-suite-test-lock
      :initform (make-lock "%tests-lock"))
     (default-test-class
         :initarg :default-test-class
       :initform (find-class 'lisp-test)
       :type class-designator 
       :accessor test-suite-default-test-class))
    (:metaclass associative-class)
    (:key-slot . mcicl.utils::name)
    (:default-initargs :key-function #'object-name))
  
  
  