test/jdk/java/lang/StringBuilder/CompactStringBuilder.java
author mikael
Tue, 02 Oct 2018 22:36:08 -0700
changeset 51994 7577686cc9bd
parent 47216 71c04702a3d5
permissions -rw-r--r--
8211350: Remove jprt support Reviewed-by: dholmes, erikj, mchung, alanb, jjg
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
33663
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
     1
/*
51994
7577686cc9bd 8211350: Remove jprt support
mikael
parents: 47216
diff changeset
     2
 * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved.
33663
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
     4
 *
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
     7
 * published by the Free Software Foundation.
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
     8
 *
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    13
 * accompanied this code).
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    14
 *
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    18
 *
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    21
 * questions.
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    22
 */
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    23
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    24
import java.util.Arrays;
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    25
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    26
import org.testng.annotations.Test;
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    27
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    28
import static org.testng.Assert.assertEquals;
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    29
import static org.testng.Assert.assertTrue;
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    30
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    31
/*
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    32
 * @test
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    33
 * @bug 8054307 8077559
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    34
 * @summary Tests Compact String. This test is testing StringBuilder
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    35
 *          behavior related to Compact String.
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    36
 * @run testng/othervm -XX:+CompactStrings CompactStringBuilder
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    37
 * @run testng/othervm -XX:-CompactStrings CompactStringBuilder
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    38
 */
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    39
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    40
public class CompactStringBuilder {
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    41
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    42
    /*
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    43
     * Tests for "A"
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    44
     */
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    45
    @Test
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    46
    public void testCompactStringBuilderForLatinA() {
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    47
        final String ORIGIN = "A";
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    48
        /*
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    49
         * Because right now ASCII is the default encoding parameter for source
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    50
         * code in JDK build environment, so we escape them. same as below.
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    51
         */
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    52
        check(new StringBuilder(ORIGIN).append(new char[] { '\uFF21' }),
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    53
                "A\uFF21");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    54
        check(new StringBuilder(ORIGIN).append(new StringBuffer("\uFF21")),
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    55
                "A\uFF21");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    56
        check(new StringBuilder(ORIGIN).append("\uFF21"), "A\uFF21");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    57
        check(new StringBuilder(ORIGIN).append(new StringBuffer("\uFF21")),
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    58
                "A\uFF21");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    59
        check(new StringBuilder(ORIGIN).delete(0, 1), "");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    60
        check(new StringBuilder(ORIGIN).delete(0, 0), "A");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    61
        check(new StringBuilder(ORIGIN).deleteCharAt(0), "");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    62
        assertEquals(new StringBuilder(ORIGIN).indexOf("A", 0), 0);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    63
        assertEquals(new StringBuilder(ORIGIN).indexOf("\uFF21", 0), -1);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    64
        assertEquals(new StringBuilder(ORIGIN).indexOf("", 0), 0);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    65
        assertEquals(new StringBuilder(ORIGIN).insert(1, "\uD801\uDC00")
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    66
                .indexOf("A", 0), 0);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    67
        assertEquals(new StringBuilder(ORIGIN).insert(0, "\uD801\uDC00")
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    68
                .indexOf("A", 0), 2);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    69
        check(new StringBuilder(ORIGIN).insert(0, new char[] {}), "A");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    70
        check(new StringBuilder(ORIGIN).insert(1, new char[] { '\uFF21' }),
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    71
                "A\uFF21");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    72
        check(new StringBuilder(ORIGIN).insert(0, new char[] { '\uFF21' }),
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    73
                "\uFF21A");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    74
        check(new StringBuilder(ORIGIN).insert(0, new StringBuffer("\uFF21")),
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    75
                "\uFF21A");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    76
        check(new StringBuilder(ORIGIN).insert(1, new StringBuffer("\uFF21")),
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    77
                "A\uFF21");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    78
        check(new StringBuilder(ORIGIN).insert(0, ""), "A");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    79
        check(new StringBuilder(ORIGIN).insert(0, "\uFF21"), "\uFF21A");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    80
        check(new StringBuilder(ORIGIN).insert(1, "\uFF21"), "A\uFF21");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    81
        assertEquals(new StringBuilder(ORIGIN).lastIndexOf("A"), 0);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    82
        assertEquals(new StringBuilder(ORIGIN).lastIndexOf("\uFF21"), -1);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    83
        assertEquals(new StringBuilder(ORIGIN).lastIndexOf(""), 1);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    84
        check(new StringBuilder(ORIGIN).replace(0, 0, "\uFF21"), "\uFF21A");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    85
        check(new StringBuilder(ORIGIN).replace(0, 1, "\uFF21"), "\uFF21");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    86
        checkSetCharAt(new StringBuilder(ORIGIN), 0, '\uFF21', "\uFF21");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    87
        checkSetLength(new StringBuilder(ORIGIN), 0, "");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    88
        checkSetLength(new StringBuilder(ORIGIN), 1, "A");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    89
        check(new StringBuilder(ORIGIN).substring(0), "A");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    90
        check(new StringBuilder(ORIGIN).substring(1), "");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    91
    }
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    92
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    93
    /*
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    94
     * Tests for "\uFF21"
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    95
     */
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    96
    @Test
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    97
    public void testCompactStringBuilderForNonLatinA() {
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    98
        final String ORIGIN = "\uFF21";
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
    99
        check(new StringBuilder(ORIGIN).append(new char[] { 'A' }), "\uFF21A");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   100
        check(new StringBuilder(ORIGIN).append(new StringBuffer("A")), "\uFF21A");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   101
        check(new StringBuilder(ORIGIN).append("A"), "\uFF21A");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   102
        check(new StringBuilder(ORIGIN).append(new StringBuffer("A")), "\uFF21A");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   103
        check(new StringBuilder(ORIGIN).delete(0, 1), "");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   104
        check(new StringBuilder(ORIGIN).delete(0, 0), "\uFF21");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   105
        check(new StringBuilder(ORIGIN).deleteCharAt(0), "");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   106
        assertEquals(new StringBuilder(ORIGIN).indexOf("A", 0), -1);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   107
        assertEquals(new StringBuilder(ORIGIN).indexOf("\uFF21", 0), 0);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   108
        assertEquals(new StringBuilder(ORIGIN).indexOf("", 0), 0);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   109
        check(new StringBuilder(ORIGIN).insert(0, new char[] {}), "\uFF21");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   110
        check(new StringBuilder(ORIGIN).insert(1, new char[] { 'A' }), "\uFF21A");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   111
        check(new StringBuilder(ORIGIN).insert(0, new char[] { 'A' }), "A\uFF21");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   112
        check(new StringBuilder(ORIGIN).insert(0, new StringBuffer("A")),
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   113
                "A\uFF21");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   114
        check(new StringBuilder(ORIGIN).insert(1, new StringBuffer("A")),
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   115
                "\uFF21A");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   116
        check(new StringBuilder(ORIGIN).insert(0, ""), "\uFF21");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   117
        check(new StringBuilder(ORIGIN).insert(0, "A"), "A\uFF21");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   118
        check(new StringBuilder(ORIGIN).insert(1, "A"), "\uFF21A");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   119
        assertEquals(new StringBuilder(ORIGIN).lastIndexOf("A"), -1);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   120
        assertEquals(new StringBuilder(ORIGIN).lastIndexOf("\uFF21"), 0);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   121
        assertEquals(new StringBuilder(ORIGIN).lastIndexOf(""), 1);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   122
        check(new StringBuilder(ORIGIN).replace(0, 0, "A"), "A\uFF21");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   123
        check(new StringBuilder(ORIGIN).replace(0, 1, "A"), "A");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   124
        checkSetCharAt(new StringBuilder(ORIGIN), 0, 'A', "A");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   125
        checkSetLength(new StringBuilder(ORIGIN), 0, "");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   126
        checkSetLength(new StringBuilder(ORIGIN), 1, "\uFF21");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   127
        check(new StringBuilder(ORIGIN).substring(0), "\uFF21");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   128
        check(new StringBuilder(ORIGIN).substring(1), "");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   129
    }
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   130
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   131
    /*
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   132
     * Tests for "\uFF21A"
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   133
     */
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   134
    @Test
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   135
    public void testCompactStringBuilderForMixedA1() {
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   136
        final String ORIGIN = "\uFF21A";
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   137
        check(new StringBuilder(ORIGIN).delete(0, 1), "A");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   138
        check(new StringBuilder(ORIGIN).delete(1, 2), "\uFF21");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   139
        check(new StringBuilder(ORIGIN).deleteCharAt(1), "\uFF21");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   140
        check(new StringBuilder(ORIGIN).deleteCharAt(0), "A");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   141
        assertEquals(new StringBuilder(ORIGIN).indexOf("A", 0), 1);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   142
        assertEquals(new StringBuilder(ORIGIN).indexOf("\uFF21", 0), 0);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   143
        assertEquals(new StringBuilder(ORIGIN).indexOf("", 0), 0);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   144
        check(new StringBuilder(ORIGIN).insert(1, new char[] { 'A' }),
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   145
                "\uFF21AA");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   146
        check(new StringBuilder(ORIGIN).insert(0, new char[] { '\uFF21' }),
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   147
                "\uFF21\uFF21A");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   148
        assertEquals(new StringBuilder(ORIGIN).lastIndexOf("A"), 1);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   149
        assertEquals(new StringBuilder(ORIGIN).lastIndexOf("\uFF21"), 0);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   150
        assertEquals(new StringBuilder(ORIGIN).lastIndexOf(""), 2);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   151
        check(new StringBuilder(ORIGIN).replace(0, 0, "A"), "A\uFF21A");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   152
        check(new StringBuilder(ORIGIN).replace(0, 1, "A"), "AA");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   153
        checkSetCharAt(new StringBuilder(ORIGIN), 0, 'A', "AA");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   154
        checkSetLength(new StringBuilder(ORIGIN), 0, "");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   155
        checkSetLength(new StringBuilder(ORIGIN), 1, "\uFF21");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   156
        check(new StringBuilder(ORIGIN).substring(0), "\uFF21A");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   157
        check(new StringBuilder(ORIGIN).substring(1), "A");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   158
    }
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   159
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   160
    /*
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   161
     * Tests for "A\uFF21"
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   162
     */
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   163
    @Test
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   164
    public void testCompactStringBuilderForMixedA2() {
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   165
        final String ORIGIN = "A\uFF21";
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   166
        check(new StringBuilder(ORIGIN).replace(1, 2, "A"), "AA");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   167
        checkSetLength(new StringBuilder(ORIGIN), 1, "A");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   168
        check(new StringBuilder(ORIGIN).substring(0), "A\uFF21");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   169
        check(new StringBuilder(ORIGIN).substring(1), "\uFF21");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   170
        check(new StringBuilder(ORIGIN).substring(0, 1), "A");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   171
    }
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   172
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   173
    /*
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   174
     * Tests for "\uFF21A\uFF21A\uFF21A\uFF21A\uFF21A"
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   175
     */
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   176
    @Test
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   177
    public void testCompactStringBuilderForDuplicatedMixedA1() {
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   178
        final String ORIGIN = "\uFF21A\uFF21A\uFF21A\uFF21A\uFF21A";
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   179
        checkSetLength(new StringBuilder(ORIGIN), 1, "\uFF21");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   180
        assertEquals(new StringBuilder(ORIGIN).indexOf("A", 5), 5);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   181
        assertEquals(new StringBuilder(ORIGIN).indexOf("\uFF21", 5), 6);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   182
        assertEquals(new StringBuilder(ORIGIN).lastIndexOf("A"), 9);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   183
        assertEquals(new StringBuilder(ORIGIN).lastIndexOf("\uFF21"), 8);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   184
        assertEquals(new StringBuilder(ORIGIN).lastIndexOf(""), 10);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   185
        check(new StringBuilder(ORIGIN).substring(9), "A");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   186
        check(new StringBuilder(ORIGIN).substring(8), "\uFF21A");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   187
    }
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   188
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   189
    /*
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   190
     * Tests for "A\uFF21A\uFF21A\uFF21A\uFF21A\uFF21"
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   191
     */
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   192
    @Test
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   193
    public void testCompactStringBuilderForDuplicatedMixedA2() {
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   194
        final String ORIGIN = "A\uFF21A\uFF21A\uFF21A\uFF21A\uFF21";
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   195
        checkSetLength(new StringBuilder(ORIGIN), 1, "A");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   196
        assertEquals(new StringBuilder(ORIGIN).indexOf("A", 5), 6);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   197
        assertEquals(new StringBuilder(ORIGIN).indexOf("\uFF21", 5), 5);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   198
        assertEquals(new StringBuilder(ORIGIN).lastIndexOf("A"), 8);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   199
        assertEquals(new StringBuilder(ORIGIN).lastIndexOf("\uFF21"), 9);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   200
        check(new StringBuilder(ORIGIN).substring(9), "\uFF21");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   201
        check(new StringBuilder(ORIGIN).substring(8), "A\uFF21");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   202
    }
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   203
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   204
    /*
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   205
     * Tests for "\uD801\uDC00\uD801\uDC01"
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   206
     */
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   207
    @Test
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   208
    public void testCompactStringForSupplementaryCodePoint() {
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   209
        final String ORIGIN = "\uD801\uDC00\uD801\uDC01";
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   210
        check(new StringBuilder(ORIGIN).append("A"), "\uD801\uDC00\uD801\uDC01A");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   211
        check(new StringBuilder(ORIGIN).append("\uFF21"),
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   212
                "\uD801\uDC00\uD801\uDC01\uFF21");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   213
        check(new StringBuilder(ORIGIN).appendCodePoint('A'),
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   214
                "\uD801\uDC00\uD801\uDC01A");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   215
        check(new StringBuilder(ORIGIN).appendCodePoint('\uFF21'),
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   216
                "\uD801\uDC00\uD801\uDC01\uFF21");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   217
        assertEquals(new StringBuilder(ORIGIN).charAt(0), '\uD801');
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   218
        assertEquals(new StringBuilder(ORIGIN).codePointAt(0),
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   219
                Character.codePointAt(ORIGIN, 0));
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   220
        assertEquals(new StringBuilder(ORIGIN).codePointAt(1),
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   221
                Character.codePointAt(ORIGIN, 1));
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   222
        assertEquals(new StringBuilder(ORIGIN).codePointBefore(2),
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   223
                Character.codePointAt(ORIGIN, 0));
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   224
        assertEquals(new StringBuilder(ORIGIN).codePointCount(1, 3), 2);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   225
        check(new StringBuilder(ORIGIN).delete(0, 2), "\uD801\uDC01");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   226
        check(new StringBuilder(ORIGIN).delete(0, 3), "\uDC01");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   227
        check(new StringBuilder(ORIGIN).deleteCharAt(1), "\uD801\uD801\uDC01");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   228
        checkGetChars(new StringBuilder(ORIGIN), 0, 3, new char[] { '\uD801',
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   229
                '\uDC00', '\uD801' });
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   230
        assertEquals(new StringBuilder(ORIGIN).indexOf("\uD801\uDC01"), 2);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   231
        assertEquals(new StringBuilder(ORIGIN).indexOf("\uDC01"), 3);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   232
        assertEquals(new StringBuilder(ORIGIN).indexOf("\uFF21"), -1);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   233
        assertEquals(new StringBuilder(ORIGIN).indexOf("A"), -1);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   234
        check(new StringBuilder(ORIGIN).insert(0, "\uFF21"),
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   235
                "\uFF21\uD801\uDC00\uD801\uDC01");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   236
        check(new StringBuilder(ORIGIN).insert(1, "\uFF21"),
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   237
                "\uD801\uFF21\uDC00\uD801\uDC01");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   238
        check(new StringBuilder(ORIGIN).insert(1, "A"),
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   239
                "\uD801A\uDC00\uD801\uDC01");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   240
        assertEquals(new StringBuilder(ORIGIN).lastIndexOf("\uDC00\uD801"), 1);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   241
        assertEquals(new StringBuilder(ORIGIN).lastIndexOf("\uD801"), 2);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   242
        assertEquals(new StringBuilder(ORIGIN).lastIndexOf("\uFF21"), -1);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   243
        assertEquals(new StringBuilder(ORIGIN).lastIndexOf("A"), -1);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   244
        assertEquals(new StringBuilder(ORIGIN).length(), 4);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   245
        assertEquals(new StringBuilder(ORIGIN).offsetByCodePoints(1, 1), 2);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   246
        assertEquals(new StringBuilder(ORIGIN).offsetByCodePoints(0, 1), 2);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   247
        check(new StringBuilder(ORIGIN).replace(0, 2, "A"), "A\uD801\uDC01");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   248
        check(new StringBuilder(ORIGIN).replace(0, 3, "A"), "A\uDC01");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   249
        check(new StringBuilder(ORIGIN).replace(0, 2, "\uFF21"),
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   250
                "\uFF21\uD801\uDC01");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   251
        check(new StringBuilder(ORIGIN).replace(0, 3, "\uFF21"), "\uFF21\uDC01");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   252
        check(new StringBuilder(ORIGIN).reverse(), "\uD801\uDC01\uD801\uDC00");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   253
        checkSetCharAt(new StringBuilder(ORIGIN), 1, '\uDC01',
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   254
                "\uD801\uDC01\uD801\uDC01");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   255
        checkSetCharAt(new StringBuilder(ORIGIN), 1, 'A', "\uD801A\uD801\uDC01");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   256
        checkSetLength(new StringBuilder(ORIGIN), 2, "\uD801\uDC00");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   257
        checkSetLength(new StringBuilder(ORIGIN), 3, "\uD801\uDC00\uD801");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   258
        check(new StringBuilder(ORIGIN).substring(1, 3), "\uDC00\uD801");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   259
    }
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   260
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   261
    /*
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   262
     * Tests for "A\uD801\uDC00\uFF21"
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   263
     */
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   264
    @Test
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   265
    public void testCompactStringForSupplementaryCodePointMixed1() {
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   266
        final String ORIGIN = "A\uD801\uDC00\uFF21";
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   267
        assertEquals(new StringBuilder(ORIGIN).codePointBefore(3),
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   268
                Character.codePointAt(ORIGIN, 1));
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   269
        assertEquals(new StringBuilder(ORIGIN).codePointBefore(2), '\uD801');
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   270
        assertEquals(new StringBuilder(ORIGIN).codePointBefore(1), 'A');
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   271
        assertEquals(new StringBuilder(ORIGIN).codePointCount(0, 3), 2);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   272
        assertEquals(new StringBuilder(ORIGIN).codePointCount(0, 4), 3);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   273
        check(new StringBuilder(ORIGIN).delete(0, 1), "\uD801\uDC00\uFF21");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   274
        check(new StringBuilder(ORIGIN).delete(0, 1).delete(2, 3),
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   275
                "\uD801\uDC00");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   276
        check(new StringBuilder(ORIGIN).deleteCharAt(3).deleteCharAt(0),
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   277
                "\uD801\uDC00");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   278
        assertEquals(new StringBuilder(ORIGIN).indexOf("\uFF21"), 3);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   279
        assertEquals(new StringBuilder(ORIGIN).indexOf("A"), 0);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   280
        assertEquals(new StringBuilder(ORIGIN).lastIndexOf("\uFF21"), 3);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   281
        assertEquals(new StringBuilder(ORIGIN).lastIndexOf("A"), 0);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   282
        assertEquals(new StringBuilder(ORIGIN).offsetByCodePoints(0, 1), 1);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   283
        assertEquals(new StringBuilder(ORIGIN).offsetByCodePoints(1, 1), 3);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   284
        check(new StringBuilder(ORIGIN).replace(1, 3, "A"), "AA\uFF21");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   285
        check(new StringBuilder(ORIGIN).replace(1, 4, "A"), "AA");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   286
        check(new StringBuilder(ORIGIN).replace(1, 4, ""), "A");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   287
        check(new StringBuilder(ORIGIN).reverse(), "\uFF21\uD801\uDC00A");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   288
        checkSetLength(new StringBuilder(ORIGIN), 1, "A");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   289
        check(new StringBuilder(ORIGIN).substring(0, 1), "A");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   290
    }
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   291
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   292
    /*
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   293
     * Tests for "\uD801\uDC00\uFF21A"
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   294
     */
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   295
    @Test
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   296
    public void testCompactStringForSupplementaryCodePointMixed2() {
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   297
        final String ORIGIN = "\uD801\uDC00\uFF21A";
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   298
        assertEquals(new StringBuilder(ORIGIN).codePointBefore(3),
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   299
                Character.codePointAt(ORIGIN, 2));
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   300
        assertEquals(new StringBuilder(ORIGIN).codePointBefore(2),
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   301
                Character.codePointAt(ORIGIN, 0));
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   302
        assertEquals(new StringBuilder(ORIGIN).codePointBefore(1), '\uD801');
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   303
        assertEquals(new StringBuilder(ORIGIN).codePointCount(0, 3), 2);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   304
        assertEquals(new StringBuilder(ORIGIN).codePointCount(0, 4), 3);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   305
        check(new StringBuilder(ORIGIN).delete(0, 2), "\uFF21A");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   306
        check(new StringBuilder(ORIGIN).delete(0, 3), "A");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   307
        check(new StringBuilder(ORIGIN).deleteCharAt(0).deleteCharAt(0)
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   308
                .deleteCharAt(0), "A");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   309
        assertEquals(new StringBuilder(ORIGIN).indexOf("A"), 3);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   310
        assertEquals(new StringBuilder(ORIGIN).delete(0, 3).indexOf("A"), 0);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   311
        assertEquals(new StringBuilder(ORIGIN).replace(0, 3, "B").indexOf("A"),
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   312
                1);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   313
        assertEquals(new StringBuilder(ORIGIN).substring(3, 4).indexOf("A"), 0);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   314
        assertEquals(new StringBuilder(ORIGIN).offsetByCodePoints(1, 1), 2);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   315
        assertEquals(new StringBuilder(ORIGIN).offsetByCodePoints(0, 1), 2);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   316
        assertEquals(new StringBuilder(ORIGIN).offsetByCodePoints(2, 1), 3);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   317
        check(new StringBuilder(ORIGIN).replace(0, 3, "B"), "BA");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   318
        check(new StringBuilder(ORIGIN).reverse(), "A\uFF21\uD801\uDC00");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   319
    }
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   320
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   321
    /*
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   322
     * Tests for "\uD801A\uDC00\uFF21"
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   323
     */
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   324
    @Test
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   325
    public void testCompactStringForSupplementaryCodePointMixed3() {
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   326
        final String ORIGIN = "\uD801A\uDC00\uFF21";
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   327
        assertEquals(new StringBuilder(ORIGIN).codePointAt(1), 'A');
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   328
        assertEquals(new StringBuilder(ORIGIN).codePointAt(3), '\uFF21');
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   329
        assertEquals(new StringBuilder(ORIGIN).codePointBefore(1), '\uD801');
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   330
        assertEquals(new StringBuilder(ORIGIN).codePointBefore(2), 'A');
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   331
        assertEquals(new StringBuilder(ORIGIN).codePointBefore(3), '\uDC00');
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   332
        assertEquals(new StringBuilder(ORIGIN).codePointCount(0, 3), 3);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   333
        assertEquals(new StringBuilder(ORIGIN).codePointCount(1, 3), 2);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   334
        assertEquals(new StringBuilder(ORIGIN).delete(0, 1).delete(1, 3)
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   335
                .indexOf("A"), 0);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   336
        assertEquals(
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   337
                new StringBuilder(ORIGIN).replace(0, 1, "B").replace(2, 4, "C")
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   338
                        .indexOf("A"), 1);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   339
        assertEquals(new StringBuilder(ORIGIN).substring(1, 4).substring(0, 1)
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   340
                .indexOf("A"), 0);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   341
        assertEquals(new StringBuilder(ORIGIN).offsetByCodePoints(0, 1), 1);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   342
        assertEquals(new StringBuilder(ORIGIN).offsetByCodePoints(1, 1), 2);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   343
        assertEquals(new StringBuilder(ORIGIN).offsetByCodePoints(2, 1), 3);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   344
        check(new StringBuilder(ORIGIN).reverse(), "\uFF21\uDC00A\uD801");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   345
    }
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   346
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   347
    /*
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   348
     * Tests for "A\uDC01\uFF21\uD801"
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   349
     */
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   350
    @Test
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   351
    public void testCompactStringForSupplementaryCodePointMixed4() {
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   352
        final String ORIGIN = "A\uDC01\uFF21\uD801";
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   353
        assertEquals(new StringBuilder(ORIGIN).codePointAt(1), '\uDC01');
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   354
        assertEquals(new StringBuilder(ORIGIN).codePointAt(3), '\uD801');
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   355
        assertEquals(new StringBuilder(ORIGIN).codePointBefore(1), 'A');
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   356
        assertEquals(new StringBuilder(ORIGIN).codePointBefore(2), '\uDC01');
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   357
        assertEquals(new StringBuilder(ORIGIN).codePointBefore(3), '\uFF21');
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   358
        assertEquals(new StringBuilder(ORIGIN).codePointCount(0, 3), 3);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   359
        assertEquals(new StringBuilder(ORIGIN).codePointCount(1, 3), 2);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   360
        assertEquals(new StringBuilder(ORIGIN).delete(1, 4).indexOf("A"), 0);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   361
        assertEquals(new StringBuilder(ORIGIN).replace(1, 4, "B").indexOf("A"),
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   362
                0);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   363
        assertEquals(new StringBuilder(ORIGIN).substring(0, 1).indexOf("A"), 0);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   364
        assertEquals(new StringBuilder(ORIGIN).offsetByCodePoints(0, 1), 1);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   365
        assertEquals(new StringBuilder(ORIGIN).offsetByCodePoints(1, 1), 2);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   366
        assertEquals(new StringBuilder(ORIGIN).offsetByCodePoints(2, 1), 3);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   367
        check(new StringBuilder(ORIGIN).reverse(), "\uD801\uFF21\uDC01A");
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   368
    }
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   369
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   370
    private void checkGetChars(StringBuilder sb, int srcBegin, int srcEnd,
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   371
            char expected[]) {
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   372
        char[] dst = new char[srcEnd - srcBegin];
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   373
        sb.getChars(srcBegin, srcEnd, dst, 0);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   374
        assertTrue(Arrays.equals(dst, expected));
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   375
    }
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   376
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   377
    private void checkSetCharAt(StringBuilder sb, int index, char ch,
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   378
            String expected) {
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   379
        sb.setCharAt(index, ch);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   380
        check(sb, expected);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   381
    }
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   382
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   383
    private void checkSetLength(StringBuilder sb, int newLength, String expected) {
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   384
        sb.setLength(newLength);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   385
        check(sb, expected);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   386
    }
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   387
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   388
    private void check(StringBuilder sb, String expected) {
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   389
        check(sb.toString(), expected);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   390
    }
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   391
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   392
    private void check(String str, String expected) {
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   393
        assertTrue(str.equals(expected), String.format(
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   394
                "Get (%s) but expect (%s), ", escapeNonASCIIs(str),
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   395
                escapeNonASCIIs(expected)));
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   396
    }
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   397
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   398
    /*
51994
7577686cc9bd 8211350: Remove jprt support
mikael
parents: 47216
diff changeset
   399
     * Escape non-ASCII characters since not all systems support them.
33663
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   400
     */
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   401
    private String escapeNonASCIIs(String str) {
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   402
        StringBuilder sb = new StringBuilder();
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   403
        for (int i = 0; i < str.length(); i++) {
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   404
            char c = str.charAt(i);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   405
            if (c > 0x7F) {
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   406
                sb.append("\\u").append(Integer.toHexString((int) c));
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   407
            } else {
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   408
                sb.append(c);
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   409
            }
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   410
        }
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   411
        return sb.toString();
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   412
    }
2cd62a4bd471 8141132: JEP 254: Compact Strings
thartmann
parents:
diff changeset
   413
}