/
switches.ceylon
89 lines (77 loc) · 2.25 KB
/
switches.ceylon
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
import assert {...}
abstract class SwitchTest1() of testcase1|testcase2|testcase3 {}
object testcase1 extends SwitchTest1(){}
object testcase2 extends SwitchTest1(){}
object testcase3 extends SwitchTest1(){}
String testMatch1(SwitchTest1 st) {
switch (st)
case (testcase1) { return "case1"; }
case (testcase2) { return "case2"; }
else { return "case3"; }
}
String testMatch2(SwitchTest1 st) {
switch(st)
case(testcase1, testcase2) { return "case 1|2"; }
case(testcase3) { return "case 3"; }
}
Integer|Float testIs1(Integer|Float x) {
switch (x)
case (is Integer) { return x+1; }
case (is Float) { return x+1.0; }
else { return infinity; }
}
class TestIs2(Integer|String x) {
Integer|String y = x;
variable shared String z;
switch (y)
case (is Integer) { z := (y+1).string; }
case (is String) { z := y.uppercased; }
else { z := ""; }
shared String f() {
switch (y)
case (is Integer) { return (y+1).string; }
case (is String) { return y.uppercased; }
else { return ""; }
}
}
shared void test() {
value enums = {1, 2.0};
//is cases
value e0 = enums[0];
switch(e0)
case(is Integer) {}
else { fail("FLOAT? WTF?"); }
value e1 = enums[1];
switch(e1)
case(is Integer) { fail("INTEGER? WTF?"); }
case(is Float) {}
else { fail("Nothing!!! WTF?"); }
//is+continue
for (e in enums) {
String result;
switch (e)
case (is Integer) {
result="int";
}
case (is Float) {
continue;
}
assert(result=="int", "is/continue");
}
//matches
assert(testMatch1(testcase1)=="case1", "match1");
assert(testMatch1(testcase2)=="case2", "match 2");
assert(testMatch1(testcase3)=="case3", "match 3");
assert(testMatch2(testcase1)=="case 1|2", "match 4");
assert(testMatch2(testcase2)=="case 1|2", "match 5");
assert(testMatch2(testcase3)=="case 3", "match 6");
//is
assert(testIs1(1) == 2, "is1");
assert(testIs1(1.5) == 2.5, "is2");
assert(TestIs2(1).z == "2", "is3");
assert(TestIs2("ab").z == "AB", "is3");
assert(TestIs2(1).f() == "2", "is3");
assert(TestIs2("ab").f() == "AB", "is3");
//TODO satisfies
results();
}