anchor.diff:    }
   
     bool containsKey(K key) {
  -    if (!isEmpty) {
  -      splay_(key);
  -      if (_root.key.compareTo(key) == 0) return true;
  -    }
  -    return false;
  +    return _splay(key) == 0;
     }
   
     bool containsValue(V value) {
  
positive.code:    * key, the last node on the search path is moved to the top of the
     * tree. This is the simplified top-down splaying algorithm from:
     * "Self-adjusting Binary Search Trees" by Sleator and Tarjan.
     */
    void splay_(K key) {
      if (isEmpty) return;
  
      // The right child of the dummy node will hold
      // the L tree of the algorithm.  The left child of the dummy node
  
negative.code:   }
  
    void forEach(void f(K key, V value)) {
      Iterator<SplayTreeNode<K, V>> nodes =
          new _SplayTreeNodeIterator<K, V>(this);
      while (nodes.moveNext()) {
        SplayTreeNode<K, V> node = nodes.current;
        f(node.key, node.value);
      }
    }
  
  