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: String summary({bool clear: true}) {
    final buffer = new StringBuffer();
    _recordMap.forEach((String key, List<CastRecord> records) {
      buffer.writeln('Key $key:');
      int success = 0;
      int mismatch = 0;
      int error = 0;
  
negative.code: export 'dart_runtime.dart' show Arity, getArity, type;
  
  import 'package:stack_trace/stack_trace.dart';
  
  // Logging / updating CastRecords for cases that alway pass in Dart and DDC
  // is expensive.  They are also less interesting, so filter out by default.
  const bool _skipSuccess = true;
  
  class CastRecord {
    final Type runtimeType;
  