| // 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(); | |
| } |