// 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.
//
// Measure performance of string comparison.

// Using string interpolation could change what this test is measuring.
// ignore_for_file: prefer_interpolation_to_compose_strings

import 'package:benchmark_harness/benchmark_harness.dart';

int equalCount = 0;

class LongStringCompare extends BenchmarkBase {
  final int reps;
  final List<String> s = [];

  String generateLongString(int lengthPower) {
    return 'abc' * (1 << lengthPower) + 'def';
  }

  LongStringCompare(int lengthPower, this.reps)
      : super('LongStringCompare.${1 << lengthPower}.${reps}reps') {
    final single = generateLongString(lengthPower);
    s.add(single + '.' + single);
    s.add(single + '!' + single);
  }

  @override
  void run() {
    for (int i = 0; i < reps; i++) {
      // Make string comparison code hoisting harder for the compiler to do.
      final bool comparison = s[i % 2] == s[(i + 1) % 2];
      if (comparison) {
        equalCount++;
      }
    }
  }
}

void main() {
  LongStringCompare(1, 3000).report();
  LongStringCompare(5, 1000).report();
  LongStringCompare(10, 30).report();
  if (equalCount > 0) throw StateError('Unexpected equalCount: $equalCount');
}
