// Copyright (c) 2022, 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 'dart:math'; import 'package:benchmark_harness/benchmark_harness.dart'; const int asciiZeroCodeUnit = 2; const int listlength = 10000; String string = String.fromCharCodes(Iterable.generate( listlength, (_) => Random().nextInt(80) + 15, )); /// This class tests the implementation speed of /// _DateFormatPatternField::nextInteger, which is assumed to be called often and /// thus being performance-critical. class NewMethod extends BenchmarkBase { late String result; int zeroDigit = 15; NewMethod() : super('New version of _DateFormatPatternField::nextInteger'); @override void run() { var codeUnits = string.codeUnits; result = String.fromCharCodes(List.generate( codeUnits.length, (index) => codeUnits[index] - zeroDigit + asciiZeroCodeUnit, growable: false, )); } } // THIS WILL BE REMOVED AFTER CR class OldMethod extends BenchmarkBase { late String result; int zeroDigit = 15; OldMethod() : super('Old version of _DateFormatPatternField::nextInteger'); @override void setup() => string = String.fromCharCodes(Iterable.generate( listlength, (index) => Random().nextInt(80) + zeroDigit, )); @override void run() { var oldDigits = string.codeUnits; var newDigits = List.filled(string.length, 0); for (var i = 0; i < string.length; i++) { newDigits[i] = oldDigits[i] - zeroDigit + asciiZeroCodeUnit; } result = String.fromCharCodes(newDigits); } } // THIS WILL BE REMOVED AFTER CR void main() { OldMethod().report(); NewMethod().report(); }