blob: a4564c34de6fc12c7926add43b4af5d20487cd49 [file] [log] [blame] [edit]
// Copyright (c) 2014, 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.
import 'package:benchmark_harness/benchmark_harness.dart';
import 'package:string_scanner/string_scanner.dart';
final _string = 'This is a test string with some typical content.\n' * 50000;
final _word = RegExp(r'\w+');
final _space = RegExp(r'\s+');
class StringScannerReadCharBenchmark extends BenchmarkBase {
StringScannerReadCharBenchmark() : super('StringScanner readChar');
@override
void run() {
final scanner = StringScanner(_string);
while (!scanner.isDone) {
scanner.readChar();
}
}
}
class LineScannerReadCharBenchmark extends BenchmarkBase {
LineScannerReadCharBenchmark() : super('LineScanner readChar');
@override
void run() {
final scanner = LineScanner(_string);
while (!scanner.isDone) {
scanner.readChar();
}
}
}
class SpanScannerReadCharBenchmark extends BenchmarkBase {
SpanScannerReadCharBenchmark() : super('SpanScanner readChar');
@override
void run() {
final scanner = SpanScanner(_string);
while (!scanner.isDone) {
scanner.readChar();
}
}
}
class StringScannerScanBenchmark extends BenchmarkBase {
StringScannerScanBenchmark() : super('StringScanner scan');
@override
void run() {
final scanner = StringScanner(_string);
while (!scanner.isDone) {
if (!scanner.scan(_word) &&
!scanner.scanChar(10) &&
!scanner.scan(_space)) {
scanner.readChar();
}
}
}
}
class LineScannerScanBenchmark extends BenchmarkBase {
LineScannerScanBenchmark() : super('LineScanner scan');
@override
void run() {
final scanner = LineScanner(_string);
while (!scanner.isDone) {
if (!scanner.scan(_word) &&
!scanner.scanChar(10) &&
!scanner.scan(_space)) {
scanner.readChar();
}
}
}
}
class SpanScannerScanBenchmark extends BenchmarkBase {
SpanScannerScanBenchmark() : super('SpanScanner scan');
@override
void run() {
final scanner = SpanScanner(_string);
while (!scanner.isDone) {
if (!scanner.scan(_word) &&
!scanner.scanChar(10) &&
!scanner.scan(_space)) {
scanner.readChar();
}
}
}
}
void main() {
print('String length: ${_string.length}');
StringScannerReadCharBenchmark().report();
LineScannerReadCharBenchmark().report();
SpanScannerReadCharBenchmark().report();
StringScannerScanBenchmark().report();
LineScannerScanBenchmark().report();
SpanScannerScanBenchmark().report();
}