@@ -34,6 +34,173 @@ Rebol [
34
34
--assert 2 = switch @b [@a [1 ] @b [2 ]]
35
35
===end-group===
36
36
37
+ ;- using tests from Red language...
38
+ ===start-group=== "switch basics"
39
+
40
+ --test-- "switch-basic-1"
41
+ sb1-i: 1
42
+ sb1-j: -1
43
+ switch sb1-i [
44
+ 0 [sb1-j: 0 ]
45
+ 1 [sb1-j: 1 ]
46
+ 2 [sb1-j: 2 ]
47
+ ]
48
+ --assert sb1-j = 1
49
+
50
+ --test-- "switch-basic-2"
51
+ sb2-i: "Nenad"
52
+ sb2-j: "REBOL"
53
+ switch sb2-i [
54
+ "Andreas" [sb2-j: "Earl" ]
55
+ "Nenad" [sb2-j: "Red" ]
56
+ "Peter" [sb2-j: "Peter" ]
57
+ ]
58
+ --assert sb2-j = "Red"
59
+
60
+ --test-- "switch-basic-3"
61
+ sb3-i: "Χαῖρε, κόσμε"
62
+ sb3-j: "REBOL"
63
+ switch sb3-i [
64
+ "Andreas" [sb3-j: "Earl" ]
65
+ "Nenad" [sb3-j: "Red" ]
66
+ "Peter" [sb3-j: "Peter" ]
67
+ "Χαῖρε, κόσμε" [sb3-j: "Zorba" ]
68
+ ]
69
+ --assert sb3-j = "Zorba"
70
+
71
+ --test-- "switch-basic-4"
72
+ sb4-i: "Zorba"
73
+ sb4-j: "REBOL"
74
+ switch sb4-i [
75
+ "Andreas" [sb4-j: "Earl" ]
76
+ "Nenad" [sb4-j: "Red" ]
77
+ "Peter" [sb4-j: "Peter" ]
78
+ "Zorba" [sb4-j: "Χαῖρε, κόσμε" ]
79
+ ]
80
+ --assert sb4-j = "Χαῖρε, κόσμε"
81
+
82
+ --test-- "switch-basic-5"
83
+ ;@@ R3 does not support UCS4 chars yet!
84
+ ; sb5-i: "abcde^(010000)"
85
+ ; sb5-j: "REBOL"
86
+ ; switch sb5-i [
87
+ ; "Andreas" [sb5-j: "Earl"]
88
+ ; "Nenad" [sb5-j: "Red"]
89
+ ; "Peter" [sb5-j: "Peter"]
90
+ ; "Zorba" [sb5-j: "Χαῖρε, κόσμε"]
91
+ ; "abcde^(010000)" [sb5-j: "boron"]
92
+ ; ]
93
+ ; --assert sb5-j = "boron"
94
+
95
+ --test-- "switch-basic-6"
96
+ ;@@ R3 does not support UCS4 chars yet!
97
+ ; sb6-i: #"^(010000)"
98
+ ; sb6-j: "REBOL"
99
+ ; switch sb6-i [
100
+ ; #"a" [sb6-j: "Earl"]
101
+ ; #"b" [sb6-j: "Red"]
102
+ ; #"c" [sb6-j: "Peter"]
103
+ ; #"d" [sb6-j: "Χαῖρε, κόσμε"]
104
+ ; #"^(010000)" [sb6-j: "boron"]
105
+ ; ]
106
+ ; --assert sb6-j = "boron"
107
+
108
+ --test-- "switch-basic-8"
109
+ sb8-i: %Nenad
110
+ sb8-j: "REBOL"
111
+ switch sb8-i [
112
+ %Andreas [sb8-j: "Earl" ]
113
+ %Nenad [sb8-j: "Red" ]
114
+ %Peter [sb8-j: "Peter" ]
115
+ ]
116
+ --assert sb8-j = "Red"
117
+
118
+ --test-- "switch-basic-9"
119
+ sb9-i: #Nenad
120
+ sb9-j: "REBOL"
121
+ switch sb9-i [
122
+ #Andreas [sb9-j: "Earl" ]
123
+ #Nenad [sb9-j: "Red" ]
124
+ #Peter [sb9-j: "Peter" ]
125
+ ]
126
+ --assert sb9-j = "Red"
127
+
128
+ --test-- "switch-basic-10"
129
+ sb10-i: true
130
+ sb10-j: "REBOL"
131
+ switch sb10-i [
132
+ #[false] [sb10-j: "Earl" ]
133
+ #[true] [sb10-j: "Red" ]
134
+ #[true] [sb10-j: "Peter" ]
135
+ ]
136
+ --assert sb10-j = "Red"
137
+
138
+ --test-- "switch-basic-11"
139
+ sb11-i: first [(1 2 3 )]
140
+ sb11-j: "REBOL"
141
+ switch sb11-i [
142
+ (3 2 1 ) [sb11-j: "Earl" ]
143
+ (1 2 3 ) [sb11-j: "Red" ]
144
+ (2 3 1 ) [sb11-j: "Peter" ]
145
+ ]
146
+ --assert sb11-j = "Red"
147
+
148
+ --test-- "switch-basic-13"
149
+ sb13-i: first [(2 )]
150
+ sb13-j: "REBOL"
151
+ switch sb13-i [
152
+ (1 ) [sb13-j: "Earl" ]
153
+ (2 ) [sb13-j: "Red" ]
154
+ (3 ) [sb13-j: "Peter" ]
155
+ ]
156
+ --assert sb13-j = "Red"
157
+
158
+ --test-- "switch-basic-14"
159
+ sb14-i: [2 ]
160
+ sb14-j: "REBOL"
161
+ switch first sb14-i [
162
+ 1 [sb14-j: "Earl" ]
163
+ 2 [sb14-j: "Red" ]
164
+ 3 [sb14-j: "Peter" ]
165
+ ]
166
+ --assert sb14-j = "Red"
167
+
168
+ --test-- "switch-basic-15"
169
+ sb15-i: integer!
170
+ sb15-j: "REBOL"
171
+ switch sb15-i [
172
+ 1 [sb15-j: "Earl" ]
173
+ integer! [sb15-j: "Peter" ]
174
+ #[datatype! integer! ] [sb15-j: "Red" ]
175
+ #[datatype! char! ] [sb15-j: "Blue" ]
176
+ ]
177
+ --assert sb15-j = "Red"
178
+
179
+ --test-- "switch-basic-16"
180
+ sb16-i: number!
181
+ sb16-j: "REBOL"
182
+ do [switch sb16-i reduce [
183
+ 1 [sb16-j: "Earl" ]
184
+ 'number! [sb16-j: "Peter" ]
185
+ number! [sb16-j: "Red" ] ;@@ no idea how to encode a typeset literally, have to evaluate
186
+ char! [sb16-j: "Blue" ]
187
+ ]]
188
+ --assert sb16-j = "Red"
189
+
190
+ ; --test-- "switch-basic-17"
191
+ ;@@ having unset! as a switch value is not allowed in R3.. should it be?
192
+ ; sb17-j: "REBOL"
193
+ ; do [switch () reduce [
194
+ ; unset! [sb17-j: "Earl"]
195
+ ; 100 [sb17-j: "Peter"]
196
+ ; () [sb17-j: "Red"] ;@@ no idea how to encode `unset` literally, have to evaluate
197
+ ; char! [sb17-j: "Blue"]
198
+ ; ]]
199
+ ; --assert sb17-j = "Red"
200
+
201
+
202
+ ===end-group===
203
+
37
204
===start-group=== "switch basics local" ;; one "direct" type & one "indirect"
38
205
;; should be sufficient
39
206
0 commit comments