| Index: frog/leg/scanner/scanner_bench.dart
|
| ===================================================================
|
| --- frog/leg/scanner/scanner_bench.dart (revision 5925)
|
| +++ frog/leg/scanner/scanner_bench.dart (working copy)
|
| @@ -1,150 +0,0 @@
|
| -// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
|
| -// for details. All rights reserved. Use of this source code is governed by a
|
| -// BSD-style license that can be found in the LICENSE file.
|
| -
|
| -#library('scanner_bench');
|
| -#import('scannerlib.dart');
|
| -#import('scanner_implementation.dart');
|
| -#source('source_list.dart');
|
| -
|
| -/**
|
| - * A common superclass for scanner benchmarks.
|
| - */
|
| -class ScannerBench {
|
| - void main(List<String> arguments) {
|
| - for (String argument in arguments) {
|
| - checkExistence(argument);
|
| - }
|
| - tokenizeAll(print, 10, arguments);
|
| - tokenizeAll((x) {}, 1000, arguments);
|
| - tokenizeAll(print, 10, arguments);
|
| - }
|
| -
|
| - void tokenizeAll(void log(String s), int iterations, List<String> arguments) {
|
| - VerboseProgressBar bar = new VerboseProgressBar(iterations);
|
| - bar.begin();
|
| - for (int i = 0; i < iterations; i++) {
|
| - bar.tick();
|
| - Stopwatch timer = new Stopwatch();
|
| - timer.start();
|
| - int charCount = 0;
|
| - for (final String argument in arguments) {
|
| - charCount += tokenizeOne(argument);
|
| - }
|
| - timer.stop();
|
| - bar.recordScore(charCount / timer.elapsedInMs());
|
| - log("Tokenized ${arguments.length} files " +
|
| - "(total size = ${charCount} chars) " +
|
| - "in ${timer.elapsedInMs()}ms");
|
| - }
|
| - bar.end();
|
| - }
|
| -
|
| - int tokenizeOne(String filename) {
|
| - return getBytes(filename, (bytes) {
|
| - Scanner scanner = makeScanner(bytes);
|
| - try {
|
| - printTokens(scanner.tokenize());
|
| - } catch (MalformedInputException e) {
|
| - print("${filename}: ${e}");
|
| - }
|
| - });
|
| - }
|
| -
|
| - void printTokens(Token token) {
|
| - // TODO(ahe): Turn this into a proper test.
|
| - return;
|
| - StringBuffer sb = new StringBuffer();
|
| - for (; token != null; token = token.next) {
|
| - if (token.kind < 127) {
|
| - sb.add(new String.fromCharCodes([token.kind]));
|
| - } else {
|
| - sb.add(token.kind);
|
| - }
|
| - sb.add(":");
|
| - sb.add(token);
|
| - sb.add(" ");
|
| - }
|
| - print(sb.toString());
|
| - }
|
| -
|
| - abstract int getBytes(String filename, void callback(bytes));
|
| - abstract Scanner makeScanner(bytes);
|
| - abstract void checkExistence(String filename);
|
| -}
|
| -
|
| -class ProgressBar {
|
| - static final String hashes = "##############################################";
|
| - static final String spaces = " ";
|
| - static final int GEOMEAN_COUNT = 50;
|
| -
|
| - final String esc;
|
| - final String up;
|
| - final String clear;
|
| - final int total;
|
| - final List<num> scores;
|
| - int ticks = 0;
|
| -
|
| - ProgressBar(int total) : this.escape(total, new String.fromCharCodes([27]));
|
| -
|
| - ProgressBar.escape(this.total, String esc)
|
| - : esc = esc, up = "$esc[1A", clear = "$esc[K", scores = new List<num>();
|
| -
|
| - void begin() {
|
| - if (total > 10) {
|
| - print("[$spaces] 0%");
|
| - print("$up[${hashes.substring(0, ticks * spaces.length ~/ total)}");
|
| - }
|
| - }
|
| -
|
| - void tick() {
|
| - if (total > 10 && ticks % 5 === 0) {
|
| - print("$up$clear[$spaces] ${ticks * 100 ~/ total}% ${score()}");
|
| - print("$up[${hashes.substring(0, ticks * spaces.length ~/ total)}");
|
| - }
|
| - ++ticks;
|
| - }
|
| -
|
| - void end() {
|
| - if (total > 10) {
|
| - print("$up$clear[$hashes] 100% ${score()}");
|
| - }
|
| - }
|
| -
|
| - void recordScore(num score) {
|
| - scores.addLast(score);
|
| - }
|
| -
|
| - int score() {
|
| - num geoMean = 1;
|
| - int count = Math.min(scores.length, GEOMEAN_COUNT);
|
| - for (int i = scores.length - count; i < scores.length; i++) {
|
| - geoMean *= scores[i];
|
| - }
|
| - geoMean = Math.pow(geoMean, 1/Math.max(count, 1));
|
| - return geoMean.round().toInt();
|
| - }
|
| -}
|
| -
|
| -class VerboseProgressBar {
|
| - final int total;
|
| - int ticks = 0;
|
| -
|
| - VerboseProgressBar(int this.total);
|
| -
|
| - void begin() {
|
| - }
|
| -
|
| - void tick() {
|
| - ++ticks;
|
| - }
|
| -
|
| - void end() {
|
| - }
|
| -
|
| - void recordScore(num score) {
|
| - if (total > 10) {
|
| - print("$ticks, $score, ${ticks * 100 ~/ total}%");
|
| - }
|
| - }
|
| -}
|
|
|