blob: 14b2e1149d95cca49ca9508a634a50656e6ddc64 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
class SwitchTests // JDK 21+.
{
static void echo(Object o) { System.out.println(o); }
static {
interface Yieldable<T>
{
T yield();
default Yieldable<T> default_() { return this; }
default Yieldable<T> when() { return this; }
}
// There are 80 bytes (\@80<!) between "::" and "yield;".
Yieldable<?> y = ((Yieldable<?>) () -> 0)::
yield;
((Yieldable<?>) () -> 0).when().default_().yield();
enum Letters { OTHER, ALPHA, BETA }
Letters when = Letters.OTHER;
switch (when) {
case ALPHA: { echo(Letters.ALPHA); break; }
case BETA: { echo(Letters.BETA); break; }
default: { echo(Letters.OTHER); }
}
echo(switch (when) {
case ALPHA -> Letters.ALPHA;
case BETA -> Letters.BETA;
default -> { yield(Letters.OTHER); }
});
String yield = null;
switch (yield) {
case "A": case "B": { echo("A or B"); break; }
case ":": { echo("Colon"); break; }
case String str when !str.equals(""):
{ echo("<non-empty>"); break; }
case null: default: { echo("Other"); }
}
echo(switch (yield) {
case "A", "B" -> { yield("A or B"); }
case "->" -> "Arrow";
case String str when !str.equals("")
-> "<non-empty>";
case null, default -> "Other";
});
Object o = new Object();
switch (o) {
case null: { echo("null"); break; }
case Letters[] ll: { echo("SwitchTests$1Letters[]"); break; }
default: { echo("java.lang.Object"); break; }
};
echo(switch (o) {
case null -> "null";
case Letters[] ll -> "SwitchTests$1Letters[]";
default -> "java.lang.Object";
});
char ch = 'c';
switch (ch) {
case 'a': { echo('a'); break; }
case 'b': { echo('b'); break; }
default: { echo('\u0000'); break; }
};
echo(switch (ch) {
case 'a' -> 'a';
case 'b' -> 'b';
default -> '\u0000';
});
byte b = (byte) 2;
switch (b) {
case ((byte) 0): { echo((byte) 0); break; }
case ((byte) 1): { echo((byte) 1); break; }
default: { echo((byte) -1); break; }
};
echo(switch (b) {
case ((byte) 0) -> (byte) 0;
case ((byte) 1) -> (byte) 1;
default -> (byte) -1;
});
short sh = (short) 2;
switch (sh) {
case ((short) 0): { echo((short) 0); break; }
case ((short) 1): { echo((short) 1); break; }
default: { echo((short) -1); break; }
};
echo(switch (sh) {
case ((short) 0) -> (short) 0;
case ((short) 1) -> (short) 1;
default -> (short) -1;
});
int i = 2;
switch (i) {
case 0b0__00___000: { echo(0); break; }
case 0x000___00__1: { echo(1); break; }
default: { echo(-1); break; }
};
echo(switch (i) {
case 0_0_0_0_0 -> 0;
case 1 -> 1;
default -> -1;
});
}
}
|