| // 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. | |
| // | |
| // Verifies that string equal implementation correctly handles strings of | |
| // various lengths. | |
| import 'dart:math'; | |
| import "package:expect/expect.dart"; | |
| compare(List<int> ints, String s_piece, String t_piece, bool expectedEquality) { | |
| final s = String.fromCharCodes(ints); | |
| String s_mid = s + s_piece + s; | |
| String t_mid = s + t_piece + s; | |
| Expect.isFalse(identical(s_mid, t_mid)); | |
| Expect.equals(s_mid == t_mid, expectedEquality); | |
| String s_tail = s + s_piece; | |
| String t_tail = s + t_piece; | |
| Expect.isFalse(identical(s_tail, t_tail)); | |
| Expect.equals(s_tail == t_tail, expectedEquality); | |
| String s_head = s_piece + s; | |
| String t_head = t_piece + s; | |
| Expect.isFalse(identical(s_head, t_head)); | |
| Expect.equals(s_head == t_head, expectedEquality); | |
| } | |
| main() { | |
| const int maxStringLength = 128; | |
| // OneByteString | |
| for (int i = 0; i < maxStringLength; i++) { | |
| final l = List.generate(i, (n) => (Random().nextInt(30) + 40)); | |
| compare(l, 'a', 'b', false); | |
| compare(l, 'a', 'a', true); | |
| } | |
| // TwoByteString | |
| for (int i = 0; i < maxStringLength; i++) { | |
| final l = List.generate(i, (n) => (Random().nextInt(1024) + 1024)); | |
| compare( | |
| l, | |
| String.fromCharCodes(<int>[1042]), | |
| String.fromCharCodes(<int>[1043]), | |
| false, | |
| ); | |
| compare( | |
| l, | |
| String.fromCharCodes(<int>[1042]), | |
| String.fromCharCodes(<int>[1042]), | |
| true, | |
| ); | |
| } | |
| } |