Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/jdk/java/lang/String/concat/ImplicitStringConcatShapesTestGen.java
41153 views
1
/*
2
* Copyright (c) 2015, 2020, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*/
23
24
import java.io.IOException;
25
import java.io.PrintWriter;
26
import java.nio.file.Files;
27
import java.nio.file.Paths;
28
import java.util.*;
29
30
public class ImplicitStringConcatShapesTestGen {
31
public static String escapeToUnicode(String str) {
32
StringBuilder b = new StringBuilder();
33
for (char c : str.toCharArray()) {
34
if (c < 128) {
35
b.append(c);
36
} else {
37
b.append("\\u").append(String.format("%04X", (int) c));
38
}
39
}
40
return b.toString();
41
}
42
43
public static void main(String... args) throws IOException {
44
PrintWriter pw = new PrintWriter(System.out);
45
46
String[] types = {
47
"boolean",
48
"byte",
49
"byteMinus",
50
"char",
51
"short",
52
"shortMinus",
53
"int",
54
"intMinus",
55
"integer",
56
"integerNull",
57
"float",
58
"floatMinus",
59
"long",
60
"longMinus",
61
"double",
62
"doubleMinus",
63
"object",
64
"objectNull",
65
"objectNullToString",
66
"String",
67
"StringUTF16",
68
"StringU1",
69
"StringU2",
70
"intArrayNull",
71
"objectArrayNull",
72
};
73
74
for (String t : Files.readAllLines(Paths.get("ImplicitStringConcatShapes-head.template"))) {
75
pw.println(t);
76
}
77
78
Map<String, String> values = new HashMap<>();
79
80
Random current = new Random(12345);
81
for (int mode = 0; mode <= 2; mode++) {
82
for (String type : types) {
83
int i = current.nextInt(100);
84
boolean isStatic = (mode | 1) == 1;
85
boolean isFinal = (mode | 2) == 2;
86
String fieldName = (isStatic ? "s" : "") + (isFinal ? "f" : "") + "_" + typeSig(type);
87
String value = initValue(type, i);
88
String stringValue = stringValue(type, i);
89
values.put(fieldName, stringValue);
90
pw.printf(" %s %s %s %s = %s;%n", isStatic ? "static" : "", isFinal ? "final" : "", typeValue(type, i), fieldName, value);
91
}
92
}
93
94
pw.println();
95
96
List<String> lines = new ArrayList<>();
97
List<String> l = new ArrayList<>(values.keySet());
98
99
for (String l1 : l) {
100
lines.add(String.format("test(\"%s\", \"\" + %s);",
101
escapeToUnicode(values.get(l1)),
102
l1
103
));
104
lines.add(String.format("test(\"%s\", \"prefix\" + %s);",
105
escapeToUnicode("prefix" + values.get(l1)),
106
l1
107
));
108
lines.add(String.format("test(\"%s\", %s + \"suffix\");",
109
escapeToUnicode(values.get(l1) + "suffix"),
110
l1
111
));
112
lines.add(String.format("test(\"%s\", \"prefix\" + %s + \"suffix\");",
113
escapeToUnicode("prefix" + values.get(l1) + "suffix"),
114
l1
115
));
116
}
117
118
for (String l1 : l) {
119
for (String l2 : l) {
120
lines.add(String.format("test(\"%s\", \"\" + %s + %s);",
121
escapeToUnicode(values.get(l1) + values.get(l2)),
122
l1, l2
123
));
124
lines.add(String.format("test(\"%s\", \"\" + %s + %s + \"suffix\");",
125
escapeToUnicode(values.get(l1) + values.get(l2) + "suffix"),
126
l1, l2
127
));
128
lines.add(String.format("test(\"%s\", \"prefix\" + %s + \"suffix1\" + %s + \"suffix2\");",
129
escapeToUnicode("prefix" + values.get(l1) + "suffix1" + values.get(l2) + "suffix2"),
130
l1, l2
131
));
132
}
133
}
134
135
final int STRIDE = 1000;
136
int strides = lines.size() / STRIDE + 1;
137
138
pw.println(" public void run() {");
139
for (int c = 0; c < strides; c++) {
140
pw.println(" run" + c + "();");
141
}
142
pw.println(" }");
143
pw.println();
144
145
for (int c = 0; c < strides; c++) {
146
pw.println(" public void run" + c + "() {");
147
for (String line : lines.subList(c * STRIDE, Math.min(lines.size(), (c+1) * STRIDE))) {
148
pw.println(" " + line);
149
}
150
pw.println(" }");
151
pw.println();
152
}
153
154
pw.println("}");
155
156
pw.flush();
157
pw.close();
158
}
159
160
private static String typeSig(String type) {
161
switch (type) {
162
case "boolean": return "bl";
163
case "byte": return "b";
164
case "byteMinus": return "bM";
165
case "short": return "s";
166
case "shortMinus": return "sM";
167
case "char": return "c";
168
case "int": return "i";
169
case "intMinus": return "iM";
170
case "integer": return "I";
171
case "integerNull": return "IN";
172
case "float": return "f";
173
case "floatMinus": return "fM";
174
case "long": return "l";
175
case "longMinus": return "lM";
176
case "double": return "d";
177
case "doubleMinus": return "dM";
178
case "String": return "str";
179
case "StringUTF16": return "strU";
180
case "StringU1": return "strU1";
181
case "StringU2": return "strU2";
182
case "object": return "o";
183
case "objectNull": return "oN";
184
case "objectNullToString": return "oNtS";
185
case "intArrayNull": return "iAN";
186
case "objectArrayNull": return "oAN";
187
default:
188
throw new IllegalStateException();
189
}
190
}
191
192
private static String typeValue(String type, int i) {
193
switch (type) {
194
case "boolean":
195
case "byte":
196
case "byteMinus":
197
case "char":
198
case "short":
199
case "shortMinus":
200
case "int":
201
case "intMinus":
202
case "float":
203
case "floatMinus":
204
case "long":
205
case "longMinus":
206
case "double":
207
case "doubleMinus":
208
return type.replace("Minus", "");
209
case "String":
210
case "StringUTF16":
211
case "StringU1":
212
case "StringU2":
213
return "String";
214
case "object":
215
case "objectNull":
216
case "objectNullToString":
217
return "Object";
218
case "integer":
219
case "integerNull":
220
return "Integer";
221
case "intArrayNull":
222
return "int[]";
223
case "objectArrayNull":
224
return "Object[]";
225
default:
226
throw new IllegalStateException();
227
}
228
}
229
230
private static String initValue(String type, int i) {
231
switch (type) {
232
case "boolean":
233
return String.valueOf((i & 1) == 1);
234
case "byte":
235
return String.valueOf(i);
236
case "byteMinus":
237
return String.valueOf(-i);
238
case "short":
239
return String.valueOf(i*100);
240
case "shortMinus":
241
return String.valueOf(-i*100);
242
case "intMinus":
243
return String.valueOf(-i*1_000_000);
244
case "int":
245
case "integer":
246
return String.valueOf(i*1_000_000);
247
case "long":
248
return String.valueOf(i*1_000_000_000) + "L";
249
case "longMinus":
250
return String.valueOf(-i*1_000_000_000) + "L";
251
case "char":
252
return "'" + (char)(i % 26 + 65) + "'";
253
case "double":
254
return String.valueOf(i) + ".0d";
255
case "doubleMinus":
256
return "-" + String.valueOf(i) + ".0d";
257
case "float":
258
return String.valueOf(i) + ".0f";
259
case "floatMinus":
260
return "-" + String.valueOf(i) + ".0f";
261
case "object":
262
return "new MyClass(" + i + ")";
263
case "objectNullToString":
264
return "new MyClassNullToString()";
265
case "integerNull":
266
case "objectNull":
267
case "intArrayNull":
268
case "objectArrayNull":
269
return "null";
270
case "String":
271
return "\"" + i + "\"";
272
case "StringUTF16":
273
return "\"\\u0451" + i + "\"";
274
case "StringU1":
275
return "\"\\u0001" + i + "\"";
276
case "StringU2":
277
return "\"\\u0002" + i + "\"";
278
default:
279
throw new IllegalStateException();
280
}
281
}
282
283
private static String stringValue(String type, int i) {
284
switch (type) {
285
case "boolean":
286
return String.valueOf((i & 1) == 1);
287
case "byte":
288
return String.valueOf(i);
289
case "byteMinus":
290
return String.valueOf(-i);
291
case "short":
292
return String.valueOf(i*100);
293
case "shortMinus":
294
return String.valueOf(-i*100);
295
case "intMinus":
296
return String.valueOf(-i*1_000_000);
297
case "int":
298
case "integer":
299
return String.valueOf(i*1_000_000);
300
case "long":
301
return String.valueOf(i*1_000_000_000);
302
case "longMinus":
303
return String.valueOf(-i*1_000_000_000);
304
case "char":
305
return String.valueOf((char) (i % 26 + 65));
306
case "double":
307
case "float":
308
return String.valueOf(i) + ".0";
309
case "doubleMinus":
310
case "floatMinus":
311
return "-" + String.valueOf(i) + ".0";
312
case "object":
313
return "C(" + i + ")";
314
case "integerNull":
315
case "objectNull":
316
case "objectNullToString":
317
case "intArrayNull":
318
case "objectArrayNull":
319
return "null";
320
case "String":
321
return "" + i;
322
case "StringUTF16":
323
return "\u0451" + i;
324
case "StringU1":
325
return "\u0001" + i;
326
case "StringU2":
327
return "\u0002" + i;
328
default:
329
throw new IllegalStateException();
330
}
331
}
332
333
}
334
335