anchor.diff:        row.addAll(matrix[i].map(f));
         data.add(row);
       }
  +    CoverageScore coverageScore = computeCoverageScore(this);
       return {
         'title': title,
         'data': data,
  -      'legend': legend
  +      'legend': legend,
  +      'reachable-score': coverageScore.reachablePathsPercentage,
  +      'covered-score': coverageScore.coverageScore
       };
  +  }
  +}
  +
  +class CoverageScore {
  +  NumberFormat _scoreFormat;
  +  final double _reachablePathsPercentage;
  +  final double _coverageScore;
  +
  +  String get reachablePathsPercentage
  +    => _scoreFormat.format(_reachablePathsPercentage);
  +
  +  String get coverageScore
  +    => _scoreFormat.format(_coverageScore);
  +
  +  CoverageScore(this._reachablePathsPercentage, this._coverageScore) {
  +    this._scoreFormat = new NumberFormat('%##.0#', 'en_US');
     }
   }
   
  
positive.code:     = _countNumberInCoverageMatrix(matrix, (int e) => e != cannotBeCovered);
    int coveredCombinationNum
      = _countNumberInCoverageMatrix(matrix, (int e) => e > isNotCovered);
    StringBuffer scoreReport = new StringBuffer();
    NumberFormat percentFormat = new NumberFormat('%##.0#', 'en_US');
    scoreReport.writeln('App-Device Path Coverage (ADPC) score:');
    double reachableCoverageScore = reachableCombinationNum / totalPathNum;
    scoreReport.writeln(
      'Reachable ADPC score: ${percentFormat.format(reachableCoverageScore)}, '
      'defined by #reachable / #total.'
    );
    double coveredCoverageScore
      = coveredCombinationNum / reachableCombinationNum;
    scoreReport.writeln(
      'Covered ADPC score: ${percentFormat.format(coveredCoverageScore)}, '
      'defined by #covered / #reachable.'
    );
    print(scoreReport.toString());
  }
  
  const String legend =
  
negative.code:     }
    );
    printLegend();
    printCoverageScore(
      computeCoverageScore(coverageMatrix)
    );
  }
  
  void printMatrix(String title, CoverageMatrix coverageMatrix, f(int e)) {
  