anchor.diff:          }
         }
       }
  -    buffer.writeln(' - static type: $staticType');
  -    if (runtimeTypes.length > 10) {
  -      buffer.writeln(' - runtime types: (${runtimeTypes.length} types)');
  -    } else {
  -      buffer.writeln(' - runtime types: $runtimeTypes');
  -    }
       final total = success + mismatch + error + failure;
       assert(total != 0);
  -    final category = (String cat, int val) =>
  +    if (success < total) {
  +      buffer.writeln('Key $key:');
  +      buffer.writeln(' - static type: $staticType');
  +      buffer.writeln(' - runtime types: $runtimeTypes');
  +      final category = (String cat, int val) =>
           buffer.writeln(' - $cat: $val (${val / total})');
  -    category('success', success);
  -    category('failure', failure);
  -    category('mismatch', mismatch);
  -    category('error', error);
  +      category('success', success);
  +      category('failure', failure);
  +      category('mismatch', mismatch);
  +      category('error', error);
  +    }
     });
     if (clear) {
       _recordMap.clear();
  
positive.code: typedef void CastRecordHandler(String key, CastRecord record);
  CastRecordHandler castRecordHandler = _record;
  
  dynamic cast(dynamic obj, Type staticType, {String key}) {
    if (key == null) {
      // If no key is past in, use the caller's frame as a key.
      final trace = new Trace.current(1);
      final frame = trace.frames.first;
      key = frame.toString();
    }
    bool ddcSuccess = true;
    bool dartSuccess = true;
    // TODO(vsm): Use instanceOf once we settle on nullability.
    try {
      rt.cast(obj, staticType);
    } catch (e) {
      ddcSuccess = false;
    }
    if (obj == null) {
      dartSuccess = true;
    } else {
      // TODO(vsm): We could avoid mirror code by requiring the caller to pass
      // in obj is TypeLiteral as a parameter.  We can't do that once we have a
      // Type object instead.
      final staticMirror = mirrors.reflectType(staticType);
      final instanceMirror = mirrors.reflect(obj);
      final classMirror = instanceMirror.type;
      dartSuccess = classMirror.isSubtypeOf(staticMirror);
    }
    var record =
        new CastRecord(obj.runtimeType, staticType, ddcSuccess, dartSuccess);
    castRecordHandler(key, record);
    return obj;
  }
  
negative.code: String summary({bool clear: true}) {
    final buffer = new StringBuffer();
    _recordMap.forEach((String key, List<CastRecord> records) {
      int success = 0;
      int mismatch = 0;
      int error = 0;
  