Skip to content

Commit 4d61b9b

Browse files
committed
or tests
1 parent d42349b commit 4d61b9b

File tree

2 files changed

+70
-32
lines changed

2 files changed

+70
-32
lines changed
Lines changed: 60 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,62 +1,90 @@
1-
import * from "list";
1+
import * from "list"
22

33
export record Rec {
44
foo: List<Number>,
5-
bar: String
6-
};
5+
bar: String,
6+
}
77

88
export enum Poly {
99
PList(List<Number>),
1010
PArray(Array<Poly>),
1111
PAssoc(Rec),
1212
PMulti(List<String>, Number, Rec),
13-
PPoly(List<Poly>)
14-
};
13+
PPoly(List<Poly>),
14+
}
1515

16-
let test = (test) => {
17-
let (input, expected) = test;
16+
let test = test => {
17+
let (input, expected) = test
1818
let result = match (input) {
1919
PList([]) => 1,
20-
PList([a, b]) => a + b,
20+
PList([a, b] | [_, a, b]) => a + b,
2121
PList([a, ..._]) => a,
22-
PAssoc({foo: [], _}) => 1,
23-
PAssoc({foo: [a, b], _}) => a + b,
24-
PAssoc({foo: [a, ..._], _}) => a,
25-
PMulti([], a, {foo: [], _}) => a,
26-
PMulti([_, ..._], a, {foo: [b, ..._], _}) => a + b,
27-
PMulti([], _, {foo: [b, ..._], _}) => b,
28-
PMulti([_, ..._], a, {foo: [b, c, ..._], _}) => a + b + c,
29-
PPoly([PList([a]), PAssoc({foo: [b], _}), PMulti([], c, {foo: [d], _})]) => a + b + c + d,
22+
PAssoc({ foo: [], _ }) => 1,
23+
PAssoc({ foo: [a, b], _ }) => a + b,
24+
PAssoc({ foo: [a, ..._], _ }) => a,
25+
PMulti([], a, { foo: [], _ }) => a,
26+
PMulti([_, ..._], a, { foo: [b, ..._], _ }) => a + b,
27+
PMulti([], _, { foo: [b, ..._], _ }) => b,
28+
PMulti([_, ..._], a, { foo: [b, c, ..._], _ }) => a + b + c,
29+
PPoly(
30+
[PList([a]), PAssoc({ foo: [b], _ }), PMulti([], c, { foo: [d], _ })]
31+
) =>
32+
a +
33+
b +
34+
c +
35+
d,
3036
PPoly([]) => 42,
37+
PPoly([PList([]) | PPoly([])]) => 50,
38+
PPoly([PList([a, b]) | PPoly([PList([a, b]) | PPoly([PList([a, b])])])]) =>
39+
a +
40+
b,
3141
PPoly([_, ..._]) => 43,
32-
PArray([>]) => 44,
42+
PArray([> ]) => 44,
3343
PArray([> PList([a, b])]) => a + b,
3444
PArray([> PPoly([PList([a, b])]), PList([c, d])]) => a + b + c + d,
35-
PArray(_) => 45
36-
};
45+
PArray(_) => 45,
46+
}
47+
if (result != expected) {
48+
print("Failed case " ++ toString(input) ++ ":")
49+
print("Expected " ++ toString(expected) ++ " but got " ++ toString(result))
50+
}
3751
result == expected
38-
};
52+
}
3953

4054
let tests = [
4155
(PList([]), 1),
4256
(PList([2]), 2),
4357
(PList([2, 7]), 9),
44-
(PList([2, 7, 10]), 2),
45-
(PAssoc({foo: [], bar: "bar"}), 1),
46-
(PAssoc({foo: [2], bar: "bar"}), 2),
47-
(PAssoc({foo: [2, 7], bar: "bar"}), 9),
48-
(PAssoc({foo: [2, 7, 10], bar: "bar"}), 2),
49-
(PMulti([], 17, {foo: [], bar: "bar"}), 17),
50-
(PMulti(["foo"], 17, {foo: [3], bar: "bar"}), 20),
51-
(PMulti([], 11, {foo: [4], bar: "bar"}), 4),
52-
(PMulti(["foo"], 17, {foo: [3, 5], bar: "bar"}), 20),
53-
(PPoly([PList([1]), PAssoc({foo: [2], bar: "bar"}), PMulti([], 3, {foo: [4], bar: "bar"})]), 10),
58+
(PList([2, 7, 10]), 17),
59+
(PList([2, 7, 10, 11]), 2),
60+
(PAssoc({ foo: [], bar: "bar" }), 1),
61+
(PAssoc({ foo: [2], bar: "bar" }), 2),
62+
(PAssoc({ foo: [2, 7], bar: "bar" }), 9),
63+
(PAssoc({ foo: [2, 7, 10], bar: "bar" }), 2),
64+
(PMulti([], 17, { foo: [], bar: "bar" }), 17),
65+
(PMulti(["foo"], 17, { foo: [3], bar: "bar" }), 20),
66+
(PMulti([], 11, { foo: [4], bar: "bar" }), 4),
67+
(PMulti(["foo"], 17, { foo: [3, 5], bar: "bar" }), 20),
68+
(
69+
PPoly(
70+
[
71+
PList([1]),
72+
PAssoc({ foo: [2], bar: "bar" }),
73+
PMulti([], 3, { foo: [4], bar: "bar" }),
74+
]
75+
),
76+
10,
77+
),
5478
(PPoly([]), 42),
55-
(PPoly([PPoly([])]), 43),
79+
(PPoly([PPoly([])]), 50),
80+
(PPoly([PList([])]), 50),
81+
(PPoly([PList([7, 8])]), 15),
82+
(PPoly([PPoly([PList([7, 8])])]), 15),
83+
(PPoly([PPoly([PPoly([PList([7, 8])])])]), 15),
5684
(PArray([>]), 44),
5785
(PArray([> PList([3, 4])]), 7),
5886
(PArray([> PPoly([PList([3, 4])]), PList([5, 6])]), 18),
5987
(PArray([> PList([3, 4]), PList([3, 4])]), 45),
60-
];
88+
]
6189

6290
print(every(test, tests))

compiler/test/suites/pattern_matching.re

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,16 @@ describe("pattern matching", ({test}) => {
212212
"constant_match_4",
213213
"match ((\"foo\", 5)) { (\"foo\", n) when n == 7 => false, (\"foo\", 9) when true => false, (\"foo\", n) when n == 5 => true, _ => false }",
214214
);
215+
// Or patterns
216+
assertSnapshot("or_match_1", "match (true) { true | false => 3 }");
217+
assertSnapshot(
218+
"or_match_2",
219+
"match (Some(5)) { Some(3 | 4) => false, Some(5) | None => true, _ => false }",
220+
);
221+
assertSnapshot(
222+
"or_match_3",
223+
"match ([5]) { [a, _] | [_, a, _] | [a] => true, _ => false }",
224+
);
215225
assertFileRun("mixed_matching", "mixedPatternMatching", "true\n");
216226
assertWarning(
217227
"bool_exhaustiveness1",

0 commit comments

Comments
 (0)