Skip to content

Commit 67729a9

Browse files
committed
Add guard default tests
1 parent 300d796 commit 67729a9

File tree

2 files changed

+325
-0
lines changed

2 files changed

+325
-0
lines changed
Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
guard-default-basic-1-1 {
2+
case: 1;
3+
}
4+
guard-default-basic-1-2 {
5+
default: 2;
6+
}
7+
guard-default-basic-2-0 {
8+
default: 0;
9+
}
10+
guard-default-basic-2-2 {
11+
case: 2;
12+
}
13+
guard-default-basic-3-0 {
14+
default: 0;
15+
}
16+
guard-default-basic-3-2 {
17+
case: 2;
18+
}
19+
guard-default-basic-3-3 {
20+
case: 3;
21+
}
22+
guard-default-definition-order-0 {
23+
default: 0;
24+
}
25+
guard-default-definition-order-2 {
26+
case: 2;
27+
case: 3;
28+
}
29+
guard-default-out-of-guard-0 {
30+
case-0: default();
31+
case-1: 1;
32+
default: 2;
33+
case-2: default();
34+
}
35+
guard-default-out-of-guard-1 {
36+
default: default();
37+
}
38+
guard-default-out-of-guard-2 {
39+
default: default();
40+
}
41+
guard-default-expr-not-1 {
42+
case: 1;
43+
default: 1;
44+
}
45+
guard-default-expr-not-2 {
46+
default: 2;
47+
}
48+
guard-default-expr-eq-true {
49+
case: true;
50+
}
51+
guard-default-expr-eq-false {
52+
case: false;
53+
default: false;
54+
}
55+
guard-default-expr-or-1 {
56+
case: 1;
57+
}
58+
guard-default-expr-or-2 {
59+
case: 2;
60+
default: 2;
61+
}
62+
guard-default-expr-or-3 {
63+
default: 3;
64+
}
65+
guard-default-expr-and-1 {
66+
case: 1;
67+
}
68+
guard-default-expr-and-2 {
69+
case: 2;
70+
}
71+
guard-default-expr-and-3 {
72+
default: 3;
73+
}
74+
guard-default-expr-always-1 {
75+
case: 1;
76+
default: 1;
77+
}
78+
guard-default-expr-always-2 {
79+
default: 2;
80+
}
81+
guard-default-expr-never-1 {
82+
case: 1;
83+
}
84+
guard-default-multi-1-0 {
85+
case: 0;
86+
}
87+
guard-default-multi-1-1 {
88+
default-1: 1;
89+
}
90+
guard-default-multi-2-1 {
91+
default-1: no;
92+
}
93+
guard-default-multi-2-2 {
94+
default-2: no;
95+
}
96+
guard-default-multi-2-3 {
97+
default-3: 3;
98+
}
99+
guard-default-multi-3-blue {
100+
case-2: darkblue;
101+
}
102+
guard-default-multi-3-green {
103+
default-color: green;
104+
}
105+
guard-default-multi-3-foo {
106+
case-1: I am 'foo';
107+
}
108+
guard-default-multi-3-baz {
109+
default-string: I am 'baz';
110+
}
111+
guard-default-multi-4 {
112+
always: 1;
113+
always: 2;
114+
case: 2;
115+
}
116+
guard-default-not-ambiguos-2 {
117+
case: 1;
118+
not-default: 2;
119+
}
120+
guard-default-not-ambiguos-3 {
121+
case: 1;
122+
not-default-1: 2;
123+
not-default-2: 2;
124+
}
125+
guard-default-scopes-3 {
126+
3: when default;
127+
}
128+
guard-default-scopes-1 {
129+
1: no condition;
130+
}
Lines changed: 195 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,195 @@
1+
2+
// basics:
3+
4+
guard-default-basic-1 {
5+
.m(1) {case: 1}
6+
.m(@x) when (default()) {default: @x}
7+
8+
&-1 {.m(1)}
9+
&-2 {.m(2)}
10+
}
11+
12+
guard-default-basic-2 {
13+
.m(1) {case: 1}
14+
.m(2) {case: 2}
15+
.m(3) {case: 3}
16+
.m(@x) when (default()) {default: @x}
17+
18+
&-0 {.m(0)}
19+
&-2 {.m(2)}
20+
}
21+
22+
guard-default-basic-3 {
23+
.m(@x) when (@x = 1) {case: 1}
24+
.m(2) {case: 2}
25+
.m(@x) when (@x = 3) {case: 3}
26+
.m(@x) when (default()) {default: @x}
27+
28+
&-0 {.m(0)}
29+
&-2 {.m(2)}
30+
&-3 {.m(3)}
31+
}
32+
33+
guard-default-definition-order {
34+
.m(@x) when (default()) {default: @x}
35+
.m(@x) when (@x = 1) {case: 1}
36+
.m(2) {case: 2}
37+
.m(@x) when (@x = 3) {case: 3}
38+
39+
&-0 {.m(0)}
40+
&-2 {.m(2)}
41+
&-2 {.m(3)}
42+
}
43+
44+
// out of guard:
45+
46+
guard-default-out-of-guard {
47+
.m(1) {case-1: 1}
48+
.m(@x: default()) when (default()) {default: @x}
49+
50+
&-0 {
51+
case-0: default();
52+
.m(1);
53+
.m(2);
54+
case-2: default();
55+
}
56+
&-1 {.m(default())}
57+
&-2 {.m()}
58+
}
59+
60+
// expressions:
61+
62+
guard-default-expr-not {
63+
.m(1) {case: 1}
64+
.m(@x) when not(default()) {default: @x}
65+
66+
&-1 {.m(1)}
67+
&-2 {.m(2)}
68+
}
69+
70+
guard-default-expr-eq {
71+
.m(@x) when (@x = true) {case: @x}
72+
.m(@x) when (@x = false) {case: @x}
73+
.m(@x) when (@x = default()) {default: @x}
74+
75+
&-true {.m(true)}
76+
&-false {.m(false)}
77+
}
78+
79+
guard-default-expr-or {
80+
.m(1) {case: 1}
81+
.m(2) {case: 2}
82+
.m(@x) when (default()), (@x = 2) {default: @x}
83+
84+
&-1 {.m(1)}
85+
&-2 {.m(2)}
86+
&-3 {.m(3)}
87+
}
88+
89+
guard-default-expr-and {
90+
.m(1) {case: 1}
91+
.m(2) {case: 2}
92+
.m(@x) when (default()) and (@x = 3) {default: @x}
93+
94+
&-1 {.m(1)}
95+
&-2 {.m(2)}
96+
&-3 {.m(3)}
97+
&-4 {.m(4)}
98+
}
99+
100+
guard-default-expr-always {
101+
.m(1) {case: 1}
102+
.m(@x) when (default()), not(default()) {default: @x} // always match
103+
104+
&-1 {.m(1)}
105+
&-2 {.m(2)}
106+
}
107+
108+
guard-default-expr-never {
109+
.m(1) {case: 1}
110+
.m(@x) when (default()) and not(default()) {default: @x} // never match
111+
112+
&-1 {.m(1)}
113+
&-2 {.m(2)}
114+
}
115+
116+
117+
// not conflicting multiple default() uses:
118+
119+
guard-default-multi-1 {
120+
.m(0) {case: 0}
121+
.m(@x) when (default()) {default-1: @x}
122+
.m(2) when (default()) {default-2: @x}
123+
124+
&-0 {.m(0)}
125+
&-1 {.m(1)}
126+
}
127+
128+
guard-default-multi-2 {
129+
.m(1, @x) when (default()) {default-1: @x}
130+
.m(2, @x) when (default()) {default-2: @x}
131+
.m(@x, yes) when (default()) {default-3: @x}
132+
133+
&-1 {.m(1, no)}
134+
&-2 {.m(2, no)}
135+
&-3 {.m(3, yes)}
136+
}
137+
138+
guard-default-multi-3 {
139+
.m(red) {case-1: darkred}
140+
.m(blue) {case-2: darkblue}
141+
.m(@x) when (iscolor(@x)) and (default()) {default-color: @x}
142+
.m('foo') {case-1: I am 'foo'}
143+
.m('bar') {case-2: I am 'bar'}
144+
.m(@x) when (isstring(@x)) and (default()) {default-string: I am @x}
145+
146+
&-blue {.m(blue)}
147+
&-green {.m(green)}
148+
&-foo {.m('foo')}
149+
&-baz {.m('baz')}
150+
}
151+
152+
guard-default-multi-4 {
153+
.m(@x) when (default()), not(default()) {always: @x}
154+
.m(@x) when (default()) and not(default()) {never: @x}
155+
.m(2) {case: 2}
156+
157+
.m(1);
158+
.m(2);
159+
}
160+
161+
guard-default-not-ambiguos-2 {
162+
.m(@x) {case: 1}
163+
.m(@x) when (default()) {default: @x}
164+
.m(@x) when not(default()) {not-default: @x}
165+
166+
.m(2);
167+
}
168+
169+
guard-default-not-ambiguos-3 {
170+
.m(@x) {case: 1}
171+
.m(@x) when not(default()) {not-default-1: @x}
172+
.m(@x) when not(default()) {not-default-2: @x}
173+
174+
.m(2);
175+
}
176+
177+
// default & scope
178+
179+
guard-default-scopes {
180+
.s1() {.m(@v) {1: no condition}}
181+
.s2() {.m(@v) when (@v) {2: when true}}
182+
.s3() {.m(@v) when (default()) {3: when default}}
183+
184+
&-3 {
185+
.s2();
186+
.s3();
187+
.m(false);
188+
}
189+
190+
&-1 {
191+
.s1();
192+
.s3();
193+
.m(false);
194+
}
195+
}

0 commit comments

Comments
 (0)