blob: 614112872cc4ae9e092d2729ec8d0e2cd51f0a5b [file] [log] [blame]
J. Duke319a3b92007-12-01 00:00:00 +00001/*
2 * Copyright 1998 Sun Microsystems, Inc. All Rights Reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
20 * CA 95054 USA or visit www.sun.com if you need additional information or
21 * have any questions.
22 */
23
24/*
25 * @test
26 * @bug 4120694
27 * @summary Test new methods in StringBuffer
28 *
29 */
30
31import java.lang.*;
32import java.util.*;
33
34public class SBBasher {
35 public static void main(String[] args) throws Exception {
36 SBBasher basher = new SBBasher();
37
38 for (int iterations=0; iterations<100; iterations++) {
39 String testString = basher.generateTestString();
40 boolean result = basher.Test1(testString);
41 if (result == false)
42 throw new RuntimeException("Substring or replace failure.");
43 }
44
45 for (int iterations=0; iterations<100; iterations++) {
46 String testString = basher.generateTestString();
47 boolean result = basher.Test2(testString);
48 if (result == false)
49 throw new RuntimeException("Insert or delete failure.");
50 }
51
52 for (int iterations=0; iterations<100; iterations++) {
53 String testString = basher.generateTestString();
54 boolean result = basher.Test3(testString);
55 if (result == false)
56 throw new RuntimeException("Insert, delete or replace failure.");
57 }
58
59 }
60
61 private int getRandomIndex(int constraint1, int constraint2) {
62 int range = constraint2 - constraint1;
63 int x = generator.nextInt();
64 return constraint1 + Math.abs(x % range);
65 }
66
67 static Random generator = new Random();
68
69 private String generateTestString() {
70 StringBuffer aNewString = new StringBuffer(120);
71 int aNewLength = getRandomIndex(1,100);
72 for(int y=0; y<aNewLength; y++) {
73 int achar = generator.nextInt();
74 char test = (char)(achar);
75 aNewString.append(test);
76 }
77 return aNewString.toString();
78 }
79
80 /**
81 * first test, get substring of a random string
82 * and replace same spot with same substring
83 * then check for equality with original
84 * this tests both substrings and the replace method
85 */
86 private boolean Test1(String before) {
87 StringBuffer bashed = new StringBuffer(before);
88 String slice;
89 for (int i=0; i<100; i++) {
90 int startIndex = getRandomIndex(0, before.length());
91 int endIndex = getRandomIndex(startIndex, before.length());
92 if (endIndex < bashed.length()) {
93 slice = bashed.substring(startIndex, endIndex);
94 }
95 else {
96 slice = bashed.substring(startIndex);
97 }
98 bashed.replace(startIndex, endIndex, slice);
99 }
100 String after = bashed.toString();
101 if (!before.equals(after))
102 return false;
103 else
104 return true;
105 }
106
107 /**
108 * second test, delete random section of string
109 * then insert same section back again
110 * then check for equality with original
111 * this tests both substrings, both deletes and insert method
112 */
113 private boolean Test2(String before) {
114 StringBuffer bashed = new StringBuffer(before);
115 String slice;
116 for (int i=0; i<100; i++) {
117 int startIndex = getRandomIndex(0, before.length());
118 int endIndex = getRandomIndex(startIndex, before.length());
119 if (endIndex < bashed.length())
120 slice = bashed.substring(startIndex, endIndex);
121 else
122 slice = bashed.substring(startIndex);
123 if (slice.length() == 1)
124 bashed.deleteCharAt(startIndex);
125 else
126 bashed.delete(startIndex, endIndex);
127 bashed.insert(startIndex, slice.toCharArray(), 0, slice.length());
128 }
129 String after = bashed.toString();
130 if (!before.equals(after))
131 return false;
132 else
133 return true;
134 }
135
136 /**
137 * Third test, clone string and make sure that the
138 * replace operation is equivalent to a delete followed
139 * by an insert with the equivalent arguments
140 * this tests replace, delete and insert
141 */
142 private boolean Test3(String before) {
143 StringBuffer bashed1 = new StringBuffer(before);
144 StringBuffer bashed2 = new StringBuffer(before);
145 int startIndex = getRandomIndex(0, bashed1.length());
146 int endIndex = getRandomIndex(startIndex, bashed2.length());
147
148 String insertString = generateTestString();
149
150 bashed1.delete(startIndex, endIndex);
151 bashed1.insert(startIndex, insertString);
152 bashed2.replace(startIndex, endIndex, insertString);
153
154 String result1 = bashed1.toString();
155 String result2 = bashed2.toString();
156 if (!result1.equals(result2))
157 return false;
158 else
159 return true;
160 }
161
162}