blob: 0dd82abf6f23be76ff708bf25ca16a5bc4666f58 [file] [log] [blame]
jeffhao5d1ac922011-09-29 17:41:15 -07001/*
2 * Copyright (C) 2007 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17import junit.framework.Assert;
Jeff Hao848f70a2014-01-15 13:49:50 -080018import java.lang.reflect.Method;
Vladimir Marko85bef972017-02-17 10:18:57 +000019import java.util.Locale;
jeffhao5d1ac922011-09-29 17:41:15 -070020
21/**
22 * more string tests
23 */
24public class Main {
Jeff Hao848f70a2014-01-15 13:49:50 -080025 public static void main(String args[]) throws Exception {
jeffhao5d1ac922011-09-29 17:41:15 -070026 String test = "0123456789";
27 String test1 = new String("0123456789"); // different object
28 String test2 = new String("0123456780"); // different value
29 String offset = new String("xxx0123456789yyy");
30 String sub = offset.substring(3, 13);
31 Object blah = new Object();
32
33 Assert.assertTrue(test.equals(test));
34 Assert.assertTrue(test.equals(test1));
35 Assert.assertFalse(test.equals(test2));
36
37 Assert.assertEquals(test.compareTo(test1), 0);
38 Assert.assertTrue(test1.compareTo(test2) > 0);
39 Assert.assertTrue(test2.compareTo(test1) < 0);
40
Alexei Zavjalov4554bfd2014-02-26 17:28:35 +070041 Assert.assertEquals("".compareTo(""), 0);
42 Assert.assertTrue(test.compareTo("") > 0);
43 Assert.assertTrue("".compareTo(test) < 0);
44
jeffhao5d1ac922011-09-29 17:41:15 -070045 /* compare string with a nonzero offset, in left/right side */
46 Assert.assertEquals(test.compareTo(sub), 0);
47 Assert.assertEquals(sub.compareTo(test), 0);
48 Assert.assertTrue(test.equals(sub));
49 Assert.assertTrue(sub.equals(test));
50 /* same base, one is a substring */
51 Assert.assertFalse(offset.equals(sub));
52 Assert.assertFalse(sub.equals(offset));
53 /* wrong class */
54 Assert.assertFalse(test.equals(blah));
55
56 /* null ptr - throw */
57 try {
58 test.compareTo(null);
59 Assert.fail("didn't get expected npe");
60 } catch (NullPointerException npe) {
61 System.out.println("Got expected npe");
62 }
63 /* null ptr - ok */
64 Assert.assertFalse(test.equals(null));
65
66 test = test.substring(1);
67 Assert.assertTrue(test.equals("123456789"));
68 Assert.assertFalse(test.equals(test1));
69
70 test = test.substring(1);
71 Assert.assertTrue(test.equals("23456789"));
72
73 test = test.substring(1);
74 Assert.assertTrue(test.equals("3456789"));
75
76 test = test.substring(1);
77 Assert.assertTrue(test.equals("456789"));
78
79 test = test.substring(3,5);
80 Assert.assertTrue(test.equals("78"));
81
82 test = "this/is/a/path";
83 String[] strings = test.split("/");
84 Assert.assertEquals(4, strings.length);
85
86 Assert.assertEquals("this is a path", test.replaceAll("/", " "));
87 Assert.assertEquals("this is a path", test.replace("/", " "));
Jeff Hao848f70a2014-01-15 13:49:50 -080088
Andreas Gampe166aaee2016-07-18 08:27:23 -070089 Class<?> Strings = Class.forName("com.android.org.bouncycastle.util.Strings");
Jeff Hao848f70a2014-01-15 13:49:50 -080090 Method fromUTF8ByteArray = Strings.getDeclaredMethod("fromUTF8ByteArray", byte[].class);
91 String result = (String) fromUTF8ByteArray.invoke(null, new byte[] {'O', 'K'});
92 System.out.println(result);
Vladimir Marko9c9883b2016-10-17 14:45:29 +010093
94 testCompareToAndEquals();
95 testIndexOf();
Vladimir Marko16850ae2016-12-09 14:01:02 +000096
97 String s0_0 = "\u0000";
98 String s0_1 = new String(s0_0);
99 String s0_2 = new String(new char[] { '\u0000' });
100 String s0_3 = s0_0 + "";
101 System.out.println(
102 " " + $noinline$equals(s0_0, s0_0) +
103 " " + $noinline$equals(s0_0, s0_1) +
104 " " + $noinline$equals(s0_0, s0_2) +
105 " " + $noinline$equals(s0_0, s0_3));
106 System.out.println(
107 " " + $noinline$equals(s0_1, s0_0) +
108 " " + $noinline$equals(s0_1, s0_1) +
109 " " + $noinline$equals(s0_1, s0_2) +
110 " " + $noinline$equals(s0_1, s0_3));
111 System.out.println(
112 " " + $noinline$equals(s0_2, s0_0) +
113 " " + $noinline$equals(s0_2, s0_1) +
114 " " + $noinline$equals(s0_2, s0_2) +
115 " " + $noinline$equals(s0_2, s0_3));
116 System.out.println(
117 " " + $noinline$equals(s0_3, s0_0) +
118 " " + $noinline$equals(s0_3, s0_1) +
119 " " + $noinline$equals(s0_3, s0_2) +
120 " " + $noinline$equals(s0_3, s0_3));
Vladimir Markoe39f14f2017-02-10 15:44:25 +0000121
122 testEqualsConstString();
123 testConstStringEquals();
Vladimir Marko85bef972017-02-17 10:18:57 +0000124
125 // Regression tests for String.setCharAt() breaking string compression invariants.
126 Locale en_US = new Locale("en", "US");
127 Assert.assertEquals("I", /* Small latin dotless i */ "\u0131".toUpperCase());
128 Assert.assertEquals("abc", "a\u0131c".replace('\u0131', 'b'));
129 Assert.assertEquals("a\u0131c", "abc".replace('b', '\u0131'));
jeffhao5d1ac922011-09-29 17:41:15 -0700130 }
Vladimir Marko9c9883b2016-10-17 14:45:29 +0100131
132 public static void testCompareToAndEquals() {
133 String[] strings = {
134 // Special: empty string.
135 "",
136 // Category 0, ASCII strings:
137 // "0123456789abcdef".substring(0, index + 1)
138 "0",
139 "01",
140 "012",
141 "0123",
142 "01234",
143 "012345",
144 "0123456",
145 "01234567",
146 "012345678",
147 "0123456789",
148 "0123456789a",
149 "0123456789ab",
150 "0123456789abc",
151 "0123456789abcd",
152 "0123456789abcde",
153 "0123456789abcdef",
154 // Category 1, ASCII strings:
155 // "0123456789abcdef".substring(0, index) + "x"
156 "x",
157 "0x",
158 "01x",
159 "012x",
160 "0123x",
161 "01234x",
162 "012345x",
163 "0123456x",
164 "01234567x",
165 "012345678x",
166 "0123456789x",
167 "0123456789ax",
168 "0123456789abx",
169 "0123456789abcx",
170 "0123456789abcdx",
171 "0123456789abcdex",
172 // Category 2, ASCII strings,
173 // "0123456789abcdef".substring(0, index) + "x" +
174 // "0123456789abcdef".substring(index + 1)
175 "x123456789abcdef",
176 "0x23456789abcdef",
177 "01x3456789abcdef",
178 "012x456789abcdef",
179 "0123x56789abcdef",
180 "01234x6789abcdef",
181 "012345x789abcdef",
182 "0123456x89abcdef",
183 "01234567x9abcdef",
184 "012345678xabcdef",
185 "0123456789xbcdef",
186 "0123456789axcdef",
187 "0123456789abxdef",
188 "0123456789abcxef",
189 "0123456789abcdxf",
190 "0123456789abcdex",
191 // Category 3, ASCII strings:
192 // "z" + "0123456789abcdef".substring(1, index + 1)
193 "z",
194 "z1",
195 "z12",
196 "z123",
197 "z1234",
198 "z12345",
199 "z123456",
200 "z1234567",
201 "z12345678",
202 "z123456789",
203 "z123456789a",
204 "z123456789ab",
205 "z123456789abc",
206 "z123456789abcd",
207 "z123456789abcde",
208 "z123456789abcdef",
209 // Category 4, non-ASCII strings:
210 // "0123456789abcdef".substring(0, index) + "\u0440"
211 "\u0440",
212 "0\u0440",
213 "01\u0440",
214 "012\u0440",
215 "0123\u0440",
216 "01234\u0440",
217 "012345\u0440",
218 "0123456\u0440",
219 "01234567\u0440",
220 "012345678\u0440",
221 "0123456789\u0440",
222 "0123456789a\u0440",
223 "0123456789ab\u0440",
224 "0123456789abc\u0440",
225 "0123456789abcd\u0440",
226 "0123456789abcde\u0440",
227 // Category 5, non-ASCII strings:
228 // "0123456789abcdef".substring(0, index) + "\u0440" +
229 // "0123456789abcdef".substring(index + 1)
230 "\u0440123456789abcdef",
231 "0\u044023456789abcdef",
232 "01\u04403456789abcdef",
233 "012\u0440456789abcdef",
234 "0123\u044056789abcdef",
235 "01234\u04406789abcdef",
236 "012345\u0440789abcdef",
237 "0123456\u044089abcdef",
238 "01234567\u04409abcdef",
239 "012345678\u0440abcdef",
240 "0123456789\u0440bcdef",
241 "0123456789a\u0440cdef",
242 "0123456789ab\u0440def",
243 "0123456789abc\u0440ef",
244 "0123456789abcd\u0440f",
245 "0123456789abcde\u0440",
246 // Category 6, ASCII strings:
247 // "\u0443" + "0123456789abcdef".substring(1, index + 1)
248 "\u0443",
249 "\u04431",
250 "\u044312",
251 "\u0443123",
252 "\u04431234",
253 "\u044312345",
254 "\u0443123456",
255 "\u04431234567",
256 "\u044312345678",
257 "\u0443123456789",
258 "\u0443123456789a",
259 "\u0443123456789ab",
260 "\u0443123456789abc",
261 "\u0443123456789abcd",
262 "\u0443123456789abcde",
263 "\u0443123456789abcdef",
264 // Category 7, non-ASCII strings:
265 // "0123456789abcdef".substring(0, index) + "\u0482"
266 "\u0482",
267 "0\u0482",
268 "01\u0482",
269 "012\u0482",
270 "0123\u0482",
271 "01234\u0482",
272 "012345\u0482",
273 "0123456\u0482",
274 "01234567\u0482",
275 "012345678\u0482",
276 "0123456789\u0482",
277 "0123456789a\u0482",
278 "0123456789ab\u0482",
279 "0123456789abc\u0482",
280 "0123456789abcd\u0482",
281 "0123456789abcde\u0482",
282 // Category 8, non-ASCII strings:
283 // "0123456789abcdef".substring(0, index) + "\u0482" +
284 // "0123456789abcdef".substring(index + 1)
285 "\u0482123456789abcdef",
286 "0\u048223456789abcdef",
287 "01\u04823456789abcdef",
288 "012\u0482456789abcdef",
289 "0123\u048256789abcdef",
290 "01234\u04826789abcdef",
291 "012345\u0482789abcdef",
292 "0123456\u048289abcdef",
293 "01234567\u04829abcdef",
294 "012345678\u0482abcdef",
295 "0123456789\u0482bcdef",
296 "0123456789a\u0482cdef",
297 "0123456789ab\u0482def",
298 "0123456789abc\u0482ef",
299 "0123456789abcd\u0482f",
300 "0123456789abcde\u0482",
301 // Category 9, ASCII strings:
302 // "\u0489" + "0123456789abcdef".substring(1, index + 1)
303 "\u0489",
304 "\u04891",
305 "\u048912",
306 "\u0489123",
307 "\u04891234",
308 "\u048912345",
309 "\u0489123456",
310 "\u04891234567",
311 "\u048912345678",
312 "\u0489123456789",
313 "\u0489123456789a",
314 "\u0489123456789ab",
315 "\u0489123456789abc",
316 "\u0489123456789abcd",
317 "\u0489123456789abcde",
318 "\u0489123456789abcdef",
319 };
320 int length = strings.length;
321 Assert.assertEquals(1 + 16 * 10, length);
322 for (int i = 0; i != length; ++i) {
323 String lhs = strings[i];
324 for (int j = 0; j != length; ++j) {
325 String rhs = strings[j];
326 int result = $noinline$compareTo(lhs, rhs);
327 final int expected;
328 if (i == 0 || j == 0 || i == j) {
329 // One of the strings is empty or the strings are the same.
330 expected = lhs.length() - rhs.length();
331 } else {
332 int i_category = (i - 1) / 16;
333 int i_index = (i - 1) % 16;
334 int j_category = (j - 1) / 16;
335 int j_index = (j - 1) % 16;
336 int min_ij_index = (i_index < j_index) ? i_index : j_index;
337 if (i_category == j_category) {
338 switch (i_category) {
339 case 0: case 3: case 6: case 9:
340 // Differs in length.
341 expected = lhs.length() - rhs.length();
342 break;
343 case 1: case 2: case 4: case 5: case 7: case 8:
344 // Differs in charAt(min_ij_index).
345 expected = lhs.charAt(min_ij_index) - rhs.charAt(min_ij_index);
346 break;
347 default: throw new Error("Unexpected category.");
348 }
349 } else if (i_category == 3 || i_category == 6 || i_category == 9 ||
350 j_category == 3 || j_category == 6 || j_category == 9) {
351 // In these categories, charAt(0) differs from other categories' strings.
352 expected = lhs.charAt(0) - rhs.charAt(0);
353 } else if (// Category 0 string is a prefix to any longer string in
354 // remaining categories.
355 (i_category == 0 && i_index < j_index) ||
356 (j_category == 0 && j_index < i_index) ||
357 // Category 2 string is a prefix to category 3 string at the same
358 // index. Similar for categories 4 and 5 and also 7 and 8.
359 // This includes matching last strings of these pairs of categories.
360 (i_index == j_index &&
361 ((i_category == 1 && j_category == 2) ||
362 (i_category == 2 && j_category == 1) ||
363 (i_category == 4 && j_category == 5) ||
364 (i_category == 5 && j_category == 4) ||
365 (i_category == 7 && j_category == 8) ||
366 (i_category == 8 && j_category == 7)))) {
367 // Differs in length.
368 expected = lhs.length() - rhs.length();
369 } else {
370 // The remaining cases differ in charAt(min_ij_index), the characters
371 // before that are "0123456789abcdef".substring(0, min_ij_index).
372 for (int k = 0; k < min_ij_index; ++k) {
373 Assert.assertEquals("0123456789abcdef".charAt(k), lhs.charAt(k));
374 Assert.assertEquals("0123456789abcdef".charAt(k), rhs.charAt(k));
375 }
376 expected = lhs.charAt(min_ij_index) - rhs.charAt(min_ij_index);
377 Assert.assertFalse(expected == 0);
378 }
379 }
380 if (expected != result) {
381 throw new Error(
382 "Mismatch at i=" + i + ", j=" + j + ", expected=" + expected +
383 ", result=" + result);
384 }
385 boolean equalsExpected =
386 (i == j) ||
387 // Last string in categories 1 and 2.
388 (i == 32 && j == 48) || (i == 48 && j == 32) ||
389 // Last string in categories 4 and 5.
390 (i == 80 && j == 96) || (i == 96 && j == 80) ||
391 // Last string in categories 7 and 8.
392 (i == 128 && j == 144) || (i == 144 && j == 128);
393 Assert.assertEquals(equalsExpected, $noinline$equals(lhs, rhs));
394 }
395 }
396
397 try {
398 $noinline$compareTo("", null);
399 Assert.fail();
400 } catch (NullPointerException expected) {
401 }
402 try {
403 $noinline$compareTo(null, "");
404 Assert.fail();
405 } catch (NullPointerException expected) {
406 }
407
408 Assert.assertFalse($noinline$equals("", null));
409 try {
410 $noinline$equals(null, "");
411 Assert.fail();
412 } catch (NullPointerException expected) {
413 }
414 }
415
416 public static void testIndexOf() {
417 String[] prefixes = {
418 "",
419 "0",
420 "01",
421 "012",
422 "0123",
423 "01234",
424 "012345",
425 "0123456",
426 "01234567",
427 "012345678",
428 "0123456789",
429 "0123456789a",
430 "0123456789ab",
431 "0123456789abc",
432 "0123456789abcd",
433 "0123456789abcdef",
434 };
435 String[] cores = {
436 "",
437 "x",
438 "xx",
439 "xxx",
440 "xxxx",
441 "xxxxx",
442 "xxxxxx",
443 "xxxxxxx",
444 "xxxxxxxx",
445 "xzx",
446 "xxzx",
447 "xxxzx",
448 "xxxxzx",
449 "xxxxxzx",
450 "xxxxxxzx",
451 "xxxxxxxzx",
452 "xxxxxxxxzx",
453 "\u0440",
454 "\u0440\u0440",
455 "\u0440\u0440\u0440",
456 "\u0440\u0440\u0440\u0440",
457 "\u0440\u0440\u0440\u0440\u0440",
458 "\u0440\u0440\u0440\u0440\u0440\u0440",
459 "\u0440\u0440\u0440\u0440\u0440\u0440\u0440",
460 "\u0440\u0440\u0440\u0440\u0440\u0440\u0440\u0440",
461 "\u0440z\u0440",
462 "\u0440\u0440z\u0440",
463 "\u0440\u0440\u0440z\u0440",
464 "\u0440\u0440\u0440\u0440z\u0440",
465 "\u0440\u0440\u0440\u0440\u0440z\u0440",
466 "\u0440\u0440\u0440\u0440\u0440\u0440z\u0440",
467 "\u0440\u0440\u0440\u0440\u0440\u0440\u0440z\u0440",
468 "\u0440\u0440\u0440\u0440\u0440\u0440\u0440\u0440z\u0440",
Vladimir Markofdaf0f42016-10-13 19:29:53 +0100469 "\u0000",
470 "\u0000\u0000",
471 "\u0000\u0000\u0000",
472 "\u0000\u0000\u0000\u0000",
473 "\u0000\u0000\u0000\u0000\u0000",
474 "\u0000\u0000\u0000\u0000\u0000\u0000",
475 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000",
476 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000",
477 "\u0000z\u0000",
478 "\u0000\u0000z\u0000",
479 "\u0000\u0000\u0000z\u0000",
480 "\u0000\u0000\u0000\u0000z\u0000",
481 "\u0000\u0000\u0000\u0000\u0000z\u0000",
482 "\u0000\u0000\u0000\u0000\u0000\u0000z\u0000",
483 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000z\u0000",
484 "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000z\u0000",
Vladimir Marko9c9883b2016-10-17 14:45:29 +0100485 };
486 String[] suffixes = {
487 "",
488 "y",
489 "yy",
490 "yyy",
491 "yyyy",
492 "yyyyy",
493 "yyyyyy",
494 "yyyyyyy",
495 "yyyyyyyy",
496 "\u0441",
497 "y\u0441",
498 "yy\u0441",
499 "yyy\u0441",
500 "yyyy\u0441",
501 "yyyyy\u0441",
502 "yyyyyy\u0441",
503 "yyyyyyy\u0441",
504 "yyyyyyyy\u0441",
505 };
506 for (String p : prefixes) {
507 for (String c : cores) {
508 for (String s : suffixes) {
509 String full = p + c + s;
510 int expX = (c.isEmpty() || c.charAt(0) != 'x') ? -1 : p.length();
511 int exp0440 = (c.isEmpty() || c.charAt(0) != '\u0440') ? -1 : p.length();
Vladimir Markofdaf0f42016-10-13 19:29:53 +0100512 int exp0000 = (c.isEmpty() || c.charAt(0) != '\u0000') ? -1 : p.length();
Vladimir Marko9c9883b2016-10-17 14:45:29 +0100513 Assert.assertEquals(expX, $noinline$indexOf(full, 'x'));
514 Assert.assertEquals(exp0440, $noinline$indexOf(full, '\u0440'));
Vladimir Markofdaf0f42016-10-13 19:29:53 +0100515 Assert.assertEquals(exp0000, $noinline$indexOf(full, '\u0000'));
Vladimir Marko9c9883b2016-10-17 14:45:29 +0100516 Assert.assertEquals(expX, $noinline$indexOf(full, 'x', -1));
517 Assert.assertEquals(exp0440, $noinline$indexOf(full, '\u0440', -1));
Vladimir Markofdaf0f42016-10-13 19:29:53 +0100518 Assert.assertEquals(exp0000, $noinline$indexOf(full, '\u0000', -1));
Vladimir Marko9c9883b2016-10-17 14:45:29 +0100519 Assert.assertEquals(-1, $noinline$indexOf(full, 'x', full.length() + 1));
520 Assert.assertEquals(-1, $noinline$indexOf(full, '\u0440', full.length() + 1));
Vladimir Markofdaf0f42016-10-13 19:29:53 +0100521 Assert.assertEquals(-1, $noinline$indexOf(full, '\u0000', full.length() + 1));
Vladimir Marko9c9883b2016-10-17 14:45:29 +0100522 for (int from = 0; from != full.length(); ++from) {
523 final int eX;
524 final int e0440;
Vladimir Markofdaf0f42016-10-13 19:29:53 +0100525 final int e0000;
Vladimir Marko9c9883b2016-10-17 14:45:29 +0100526 if (from <= p.length()) {
527 eX = expX;
528 e0440 = exp0440;
Vladimir Markofdaf0f42016-10-13 19:29:53 +0100529 e0000 = exp0000;
Vladimir Marko9c9883b2016-10-17 14:45:29 +0100530 } else if (from >= p.length() + c.length()) {
531 eX = -1;
532 e0440 = -1;
Vladimir Markofdaf0f42016-10-13 19:29:53 +0100533 e0000 = -1;
Vladimir Marko9c9883b2016-10-17 14:45:29 +0100534 } else if (full.charAt(from) == 'z') {
535 eX = (full.charAt(from + 1) != 'x') ? -1 : from + 1;
536 e0440 = (full.charAt(from + 1) != '\u0440') ? -1 : from + 1;
Vladimir Markofdaf0f42016-10-13 19:29:53 +0100537 e0000 = (full.charAt(from + 1) != '\u0000') ? -1 : from + 1;
Vladimir Marko9c9883b2016-10-17 14:45:29 +0100538 } else {
539 eX = (full.charAt(from) != 'x') ? -1 : from;
540 e0440 = (full.charAt(from) != '\u0440') ? -1 : from;
Vladimir Markofdaf0f42016-10-13 19:29:53 +0100541 e0000 = (full.charAt(from) != '\u0000') ? -1 : from;
Vladimir Marko9c9883b2016-10-17 14:45:29 +0100542 }
543 Assert.assertEquals(eX, $noinline$indexOf(full, 'x', from));
544 Assert.assertEquals(e0440, $noinline$indexOf(full, '\u0440', from));
Vladimir Markofdaf0f42016-10-13 19:29:53 +0100545 Assert.assertEquals(e0000, $noinline$indexOf(full, '\u0000', from));
Vladimir Marko9c9883b2016-10-17 14:45:29 +0100546 }
547 }
548 }
549 }
550 }
551
Vladimir Markoe39f14f2017-02-10 15:44:25 +0000552 public static void testEqualsConstString() {
553 Assert.assertTrue($noinline$equalsConstString0(""));
554 Assert.assertFalse($noinline$equalsConstString0("1"));
555
556 Assert.assertTrue($noinline$equalsConstString7("0123456"));
557 Assert.assertFalse($noinline$equalsConstString7("012345"));
558 Assert.assertFalse($noinline$equalsConstString7("01234567"));
559 Assert.assertFalse($noinline$equalsConstString7("012345x"));
560 Assert.assertFalse($noinline$equalsConstString7("012345\u0440"));
561
562 Assert.assertTrue($noinline$equalsConstString14("01234567890123"));
563 Assert.assertFalse($noinline$equalsConstString14("0123456789012"));
564 Assert.assertFalse($noinline$equalsConstString14("012345678901234"));
565 Assert.assertFalse($noinline$equalsConstString14("0123456789012x"));
566 Assert.assertFalse($noinline$equalsConstString14("0123456789012\u0440"));
567
568 Assert.assertTrue($noinline$equalsConstString24("012345678901234567890123"));
569 Assert.assertFalse($noinline$equalsConstString24("01234567890123456789012"));
570 Assert.assertFalse($noinline$equalsConstString24("0123456789012345678901234"));
571 Assert.assertFalse($noinline$equalsConstString24("01234567890123456789012x"));
572 Assert.assertFalse($noinline$equalsConstString24("01234567890123456789012\u0440"));
573
574 Assert.assertTrue($noinline$equalsConstString29("01234567890123456789012345678"));
575 Assert.assertFalse($noinline$equalsConstString29("0123456789012345678901234567"));
576 Assert.assertFalse($noinline$equalsConstString29("012345678901234567890123456789"));
577 Assert.assertFalse($noinline$equalsConstString29("0123456789012345678901234567x"));
578 Assert.assertFalse($noinline$equalsConstString29("0123456789012345678901234567\u0440"));
579
580 Assert.assertTrue($noinline$equalsConstString35("01234567890123456789012345678901234"));
581 Assert.assertFalse($noinline$equalsConstString35("0123456789012345678901234567890123"));
582 Assert.assertFalse($noinline$equalsConstString35("012345678901234567890123456789012345"));
583 Assert.assertFalse($noinline$equalsConstString35("0123456789012345678901234567890123x"));
584 Assert.assertFalse(
585 $noinline$equalsConstString35("0123456789012345678901234567890123\u0440"));
586
587 Assert.assertTrue($noinline$equalsConstNonAsciiString7("\u0440123456"));
588 Assert.assertFalse($noinline$equalsConstNonAsciiString7("\u044012345"));
589 Assert.assertFalse($noinline$equalsConstNonAsciiString7("\u04401234567"));
590 Assert.assertFalse($noinline$equalsConstNonAsciiString7("\u044012345x"));
591 Assert.assertFalse($noinline$equalsConstNonAsciiString7("0123456"));
592
593 Assert.assertTrue($noinline$equalsConstNonAsciiString14("\u04401234567890123"));
594 Assert.assertFalse($noinline$equalsConstNonAsciiString14("\u0440123456789012"));
595 Assert.assertFalse($noinline$equalsConstNonAsciiString14("\u044012345678901234"));
596 Assert.assertFalse($noinline$equalsConstNonAsciiString14("\u0440123456789012x"));
597 Assert.assertFalse($noinline$equalsConstNonAsciiString14("01234567890123"));
598
599 Assert.assertTrue($noinline$equalsConstNonAsciiString24("\u044012345678901234567890123"));
600 Assert.assertFalse($noinline$equalsConstNonAsciiString24("\u04401234567890123456789012"));
601 Assert.assertFalse($noinline$equalsConstNonAsciiString24("\u0440123456789012345678901234"));
602 Assert.assertFalse($noinline$equalsConstNonAsciiString24("\u04401234567890123456789012x"));
603 Assert.assertFalse($noinline$equalsConstNonAsciiString24("\012345678901234567890123"));
604
605 Assert.assertTrue(
606 $noinline$equalsConstNonAsciiString29("\u04401234567890123456789012345678"));
607 Assert.assertFalse(
608 $noinline$equalsConstNonAsciiString29("\u0440123456789012345678901234567"));
609 Assert.assertFalse(
610 $noinline$equalsConstNonAsciiString29("\u044012345678901234567890123456789"));
611 Assert.assertFalse(
612 $noinline$equalsConstNonAsciiString29("\u0440123456789012345678901234567x"));
613 Assert.assertFalse($noinline$equalsConstNonAsciiString29("01234567890123456789012345678"));
614
615 Assert.assertTrue(
616 $noinline$equalsConstNonAsciiString35("\u04401234567890123456789012345678901234"));
617 Assert.assertFalse(
618 $noinline$equalsConstNonAsciiString35("\u0440123456789012345678901234567890123"));
619 Assert.assertFalse(
620 $noinline$equalsConstNonAsciiString35("\u044012345678901234567890123456789012345"));
621 Assert.assertFalse(
622 $noinline$equalsConstNonAsciiString35("\u0440123456789012345678901234567890123x"));
623 Assert.assertFalse(
624 $noinline$equalsConstNonAsciiString35("01234567890123456789012345678901234"));
625 }
626
627 public static void testConstStringEquals() {
628 Assert.assertTrue($noinline$constString0Equals(""));
629 Assert.assertFalse($noinline$constString0Equals("1"));
630
631 Assert.assertTrue($noinline$constString7Equals("0123456"));
632 Assert.assertFalse($noinline$constString7Equals("012345"));
633 Assert.assertFalse($noinline$constString7Equals("01234567"));
634 Assert.assertFalse($noinline$constString7Equals("012345x"));
635 Assert.assertFalse($noinline$constString7Equals("012345\u0440"));
636
637 Assert.assertTrue($noinline$constString14Equals("01234567890123"));
638 Assert.assertFalse($noinline$constString14Equals("0123456789012"));
639 Assert.assertFalse($noinline$constString14Equals("012345678901234"));
640 Assert.assertFalse($noinline$constString14Equals("0123456789012x"));
641 Assert.assertFalse($noinline$constString14Equals("0123456789012\u0440"));
642
643 Assert.assertTrue($noinline$constString24Equals("012345678901234567890123"));
644 Assert.assertFalse($noinline$constString24Equals("01234567890123456789012"));
645 Assert.assertFalse($noinline$constString24Equals("0123456789012345678901234"));
646 Assert.assertFalse($noinline$constString24Equals("01234567890123456789012x"));
647 Assert.assertFalse($noinline$constString24Equals("01234567890123456789012\u0440"));
648
649 Assert.assertTrue($noinline$constString29Equals("01234567890123456789012345678"));
650 Assert.assertFalse($noinline$constString29Equals("0123456789012345678901234567"));
651 Assert.assertFalse($noinline$constString29Equals("012345678901234567890123456789"));
652 Assert.assertFalse($noinline$constString29Equals("0123456789012345678901234567x"));
653 Assert.assertFalse($noinline$constString29Equals("0123456789012345678901234567\u0440"));
654
655 Assert.assertTrue($noinline$constString35Equals("01234567890123456789012345678901234"));
656 Assert.assertFalse($noinline$constString35Equals("0123456789012345678901234567890123"));
657 Assert.assertFalse($noinline$constString35Equals("012345678901234567890123456789012345"));
658 Assert.assertFalse($noinline$constString35Equals("0123456789012345678901234567890123x"));
659 Assert.assertFalse(
660 $noinline$constString35Equals("0123456789012345678901234567890123\u0040"));
661
662 Assert.assertTrue($noinline$constNonAsciiString7Equals("\u0440123456"));
663 Assert.assertFalse($noinline$constNonAsciiString7Equals("\u044012345"));
664 Assert.assertFalse($noinline$constNonAsciiString7Equals("\u04401234567"));
665 Assert.assertFalse($noinline$constNonAsciiString7Equals("\u044012345x"));
666 Assert.assertFalse($noinline$constNonAsciiString7Equals("0123456"));
667
668 Assert.assertTrue($noinline$constNonAsciiString14Equals("\u04401234567890123"));
669 Assert.assertFalse($noinline$constNonAsciiString14Equals("\u0440123456789012"));
670 Assert.assertFalse($noinline$constNonAsciiString14Equals("\u044012345678901234"));
671 Assert.assertFalse($noinline$constNonAsciiString14Equals("\u0440123456789012x"));
672 Assert.assertFalse($noinline$constNonAsciiString14Equals("01234567890123"));
673
674 Assert.assertTrue($noinline$constNonAsciiString24Equals("\u044012345678901234567890123"));
675 Assert.assertFalse($noinline$constNonAsciiString24Equals("\u04401234567890123456789012"));
676 Assert.assertFalse($noinline$constNonAsciiString24Equals("\u0440123456789012345678901234"));
677 Assert.assertFalse($noinline$constNonAsciiString24Equals("\u04401234567890123456789012x"));
678 Assert.assertFalse($noinline$constNonAsciiString24Equals("\012345678901234567890123"));
679
680 Assert.assertTrue(
681 $noinline$constNonAsciiString29Equals("\u04401234567890123456789012345678"));
682 Assert.assertFalse(
683 $noinline$constNonAsciiString29Equals("\u0440123456789012345678901234567"));
684 Assert.assertFalse(
685 $noinline$constNonAsciiString29Equals("\u044012345678901234567890123456789"));
686 Assert.assertFalse(
687 $noinline$constNonAsciiString29Equals("\u0440123456789012345678901234567x"));
688 Assert.assertFalse($noinline$constNonAsciiString29Equals("01234567890123456789012345678"));
689
690 Assert.assertTrue(
691 $noinline$constNonAsciiString35Equals("\u04401234567890123456789012345678901234"));
692 Assert.assertFalse(
693 $noinline$constNonAsciiString35Equals("\u0440123456789012345678901234567890123"));
694 Assert.assertFalse(
695 $noinline$constNonAsciiString35Equals("\u044012345678901234567890123456789012345"));
696 Assert.assertFalse(
697 $noinline$constNonAsciiString35Equals("\u0440123456789012345678901234567890123x"));
698 Assert.assertFalse(
699 $noinline$constNonAsciiString35Equals("01234567890123456789012345678901234"));
700 }
701
702 public static boolean $noinline$equalsConstString0(String s) {
703 if (doThrow) { throw new Error(); }
704 return s.equals("");
705 }
706
707 public static boolean $noinline$equalsConstString7(String s) {
708 if (doThrow) { throw new Error(); }
709 return s.equals("0123456");
710 }
711
712 public static boolean $noinline$equalsConstString14(String s) {
713 if (doThrow) { throw new Error(); }
714 return s.equals("01234567890123");
715 }
716
717 public static boolean $noinline$equalsConstString24(String s) {
718 if (doThrow) { throw new Error(); }
719 return s.equals("012345678901234567890123");
720 }
721
722 public static boolean $noinline$equalsConstString29(String s) {
723 if (doThrow) { throw new Error(); }
724 return s.equals("01234567890123456789012345678");
725 }
726
727 public static boolean $noinline$equalsConstString35(String s) {
728 if (doThrow) { throw new Error(); }
729 return s.equals("01234567890123456789012345678901234");
730 }
731
732 public static boolean $noinline$equalsConstNonAsciiString7(String s) {
733 if (doThrow) { throw new Error(); }
734 return s.equals("\u0440123456");
735 }
736
737 public static boolean $noinline$equalsConstNonAsciiString14(String s) {
738 if (doThrow) { throw new Error(); }
739 return s.equals("\u04401234567890123");
740 }
741
742 public static boolean $noinline$equalsConstNonAsciiString24(String s) {
743 if (doThrow) { throw new Error(); }
744 return s.equals("\u044012345678901234567890123");
745 }
746
747 public static boolean $noinline$equalsConstNonAsciiString29(String s) {
748 if (doThrow) { throw new Error(); }
749 return s.equals("\u04401234567890123456789012345678");
750 }
751
752 public static boolean $noinline$equalsConstNonAsciiString35(String s) {
753 if (doThrow) { throw new Error(); }
754 return s.equals("\u04401234567890123456789012345678901234");
755 }
756
757 public static boolean $noinline$constString0Equals(String s) {
758 if (doThrow) { throw new Error(); }
759 return s.equals("");
760 }
761
762 public static boolean $noinline$constString7Equals(String s) {
763 if (doThrow) { throw new Error(); }
764 return "0123456".equals(s);
765 }
766
767 public static boolean $noinline$constString14Equals(String s) {
768 if (doThrow) { throw new Error(); }
769 return "01234567890123".equals(s);
770 }
771
772 public static boolean $noinline$constString24Equals(String s) {
773 if (doThrow) { throw new Error(); }
774 return "012345678901234567890123".equals(s);
775 }
776
777 public static boolean $noinline$constString29Equals(String s) {
778 if (doThrow) { throw new Error(); }
779 return "01234567890123456789012345678".equals(s);
780 }
781
782 public static boolean $noinline$constString35Equals(String s) {
783 if (doThrow) { throw new Error(); }
784 return "01234567890123456789012345678901234".equals(s);
785 }
786
787 public static boolean $noinline$constNonAsciiString7Equals(String s) {
788 if (doThrow) { throw new Error(); }
789 return "\u0440123456".equals(s);
790 }
791
792 public static boolean $noinline$constNonAsciiString14Equals(String s) {
793 if (doThrow) { throw new Error(); }
794 return "\u04401234567890123".equals(s);
795 }
796
797 public static boolean $noinline$constNonAsciiString24Equals(String s) {
798 if (doThrow) { throw new Error(); }
799 return "\u044012345678901234567890123".equals(s);
800 }
801
802 public static boolean $noinline$constNonAsciiString29Equals(String s) {
803 if (doThrow) { throw new Error(); }
804 return "\u04401234567890123456789012345678".equals(s);
805 }
806
807 public static boolean $noinline$constNonAsciiString35Equals(String s) {
808 if (doThrow) { throw new Error(); }
809 return "\u04401234567890123456789012345678901234".equals(s);
810 }
811
Vladimir Marko9c9883b2016-10-17 14:45:29 +0100812 public static int $noinline$compareTo(String lhs, String rhs) {
813 if (doThrow) { throw new Error(); }
814 return lhs.compareTo(rhs);
815 }
816
817 public static boolean $noinline$equals(String lhs, String rhs) {
818 if (doThrow) { throw new Error(); }
819 return lhs.equals(rhs);
820 }
821
822 public static int $noinline$indexOf(String lhs, int ch) {
823 if (doThrow) { throw new Error(); }
824 return lhs.indexOf(ch);
825 }
826
827 public static int $noinline$indexOf(String lhs, int ch, int fromIndex) {
828 if (doThrow) { throw new Error(); }
829 return lhs.indexOf(ch, fromIndex);
830 }
831
832 public static boolean doThrow = false;
jeffhao5d1ac922011-09-29 17:41:15 -0700833}