summaryrefslogtreecommitdiffstats
path: root/runtime/syntax/testdir/input/java_switch.java
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;
		});
	}
}