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