Various additional assertions for the Flix programming language.
1// SPDX-FileCopyrightText: Copyright 2023 Roland Csaszar
2// SPDX-License-Identifier: Apache-2.0
3//
4// Project: flix-assertions
5// File: TestMain.flix
6// Date: 02.May.2023
7//
8// =============================================================================
9/// All tests fail!
10
11// The same test in 4 different versions =======================================
12// `FlixAssertion.eq`
13
14@Test
15def testEq01(): Bool =
16 FlixAssertion.eq(3, 1 + 1, "Something went wrong: '1 + 1'")
17
18@Test
19def testEq02(): Bool =
20 use FlixAssertion.{eq};
21 "Something went wrong: '1 + 1'" |> (3 `eq` (1 + 1))
22
23@Test
24def testEq03(): Bool =
25 use FlixAssertion.{eq, <|};
26 (3 `eq` (1 + 1)) <| "Something went wrong: '1 + 1'"
27
28@Test
29def testEq04(): Bool =
30 use FlixAssertion.{$==, <|};
31 (3 $== (1 + 1)) <| "Something went wrong: '1 + 1'"
32
33// The same test in 4 different versions =======================================
34// `FlixAssertion.neq`
35
36@Test
37def testNeq01(): Bool =
38 FlixAssertion.neq(2, 1 + 1, "Something went wrong: '1 + 1'")
39
40@Test
41def testNeq02(): Bool =
42 use FlixAssertion.{neq};
43 "Something went wrong: '1 + 1'" |> (2 `neq` (1 + 1))
44
45@Test
46def testNeq03(): Bool =
47 use FlixAssertion.{neq, <|};
48 (2 `neq` (1 + 1)) <| "Something went wrong: '1 + 1'"
49
50@Test
51def testNeq04(): Bool =
52 use FlixAssertion.{$!=, <|};
53 (2 $!= (1 + 1)) <| "Something went wrong: '1 + 1'"
54
55// The same test in 4 different versions =======================================
56// `FlixAssertion.lt`
57
58@Test
59def testLt01(): Bool =
60 FlixAssertion.lt(2, 1 + 1, "Something went wrong: '1 + 1'")
61
62@Test
63def testLt02(): Bool =
64 use FlixAssertion.{lt };
65 "Something went wrong: '1 + 1'" |> (2 `lt` (1 + 1))
66
67@Test
68def testLt03(): Bool =
69 use FlixAssertion.{lt, <|};
70 (2 `lt` (1 + 1)) <| "Something went wrong: '1 + 1'"
71
72@Test
73def testLt04(): Bool =
74 use FlixAssertion.{$<, <|};
75 (2 $< (1 + 1)) <| "Something went wrong: '1 + 1'"
76
77// The same test in 4 different versions =======================================
78// `FlixAssertion.lte`
79
80@Test
81def testLte01(): Bool =
82 FlixAssertion.lte(3, 1 + 1, "Something went wrong: '1 + 1'")
83
84@Test
85def testLte02(): Bool =
86 use FlixAssertion.{lte};
87 "Something went wrong: '1 + 1'" |> (3 `lte` (1 + 1))
88
89@Test
90def testLte03(): Bool =
91 use FlixAssertion.{lte, <|};
92 (3 `lte` (1 + 1)) <| "Something went wrong: '1 + 1'"
93
94@Test
95def testLte04(): Bool =
96 use FlixAssertion.{$<=, <|};
97 (3 $<= (1 + 1)) <| "Something went wrong: '1 + 1'"
98
99// The same test in 4 different versions =======================================
100// `FlixAssertion.gt`
101
102@Test
103def testGt01(): Bool =
104 FlixAssertion.gt(2, 1 + 1, "Something went wrong: '1 + 1'")
105
106@Test
107def testGt02(): Bool =
108 use FlixAssertion.{gt};
109 "Something went wrong: '1 + 1'" |> (2 `gt` (1 + 1))
110
111@Test
112def testGt03(): Bool =
113 use FlixAssertion.{gt, <|};
114 (2 `gt` (1 + 1)) <| "Something went wrong: '1 + 1'"
115
116@Test
117def testGt04(): Bool =
118 use FlixAssertion.{$>, <|};
119 (2 $> (1 + 1)) <| "Something went wrong: '1 + 1'"
120
121// The same test in 4 different versions =======================================
122// `FlixAssertion.gte`
123
124@Test
125def testGte01(): Bool =
126 FlixAssertion.gte(1, 1 + 1, "Something went wrong: '1 + 1'")
127
128@Test
129def testGte02(): Bool =
130 use FlixAssertion.{gte};
131 "Something went wrong: '1 + 1'" |> (1 `gte` (1 + 1))
132
133@Test
134def testGte03(): Bool =
135 use FlixAssertion.{gte, <|};
136 (1 `gte` (1 + 1)) <| "Something went wrong: '1 + 1'"
137
138@Test
139def testGte04(): Bool =
140 use FlixAssertion.{$>=, <|};
141 (1 $>= (1 + 1)) <| "Something went wrong: '1 + 1'"
142
143// End: the same test in 4 different versions ==================================
144
145@Test
146def testContainsString(): Bool =
147 FlixAssertion.containsString("subString",
148 "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean et est a dui semper facilisis. Pellentesque placerat elit a nunc. Nullam tortor odio, rutrum quis, egestas ut, posuere sed, felis. Vestibulum placerat feugiat nisl. Suspendisse lacinia, odio non feugiat vestibulum, sem erat blandit metus, ac nonummy magna odio pharetra felis. Vivamus vehicula velit non metus faucibus auctor. Nam sed augue. Donec orci. Cras eget diam et dolor dapibus sollicitudin. In lacinia, tellus vitae laoreet ultrices, lectus ligula dictum dui, eget condimentum velit dui vitae ante. Nulla nonummy augue nec pede. Pellentesque ut nulla. Donec at libero. Pellentesque at nisl ac nisi fermentum viverra. Praesent odio. Phasellus tincidunt diam ut ipsum. Donec eget est.",
149 "Substring not found! :(")
150
151@Test
152def testNotContainsString(): Bool =
153 FlixAssertion.notContainsString("facilisis",
154 "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean et est a dui semper facilisis. Pellentesque placerat elit a nunc. Nullam tortor odio, rutrum quis, egestas ut, posuere sed, felis. Vestibulum placerat feugiat nisl. Suspendisse lacinia, odio non feugiat vestibulum, sem erat blandit metus, ac nonummy magna odio pharetra felis. Vivamus vehicula velit non metus faucibus auctor. Nam sed augue. Donec orci. Cras eget diam et dolor dapibus sollicitudin. In lacinia, tellus vitae laoreet ultrices, lectus ligula dictum dui, eget condimentum velit dui vitae ante. Nulla nonummy augue nec pede. Pellentesque ut nulla. Donec at libero. Pellentesque at nisl ac nisi fermentum viverra. Praesent odio. Phasellus tincidunt diam ut ipsum. Donec eget est.",
155 "Substring found! :(")
156
157@Test
158def testMatchesString(): Bool =
159 FlixAssertion.matchesString("ipsum.*",
160 "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean et est a dui semper facilisis. Pellentesque placerat elit a nunc. Nullam tortor odio, rutrum quis, egestas ut, posuere sed, felis. Vestibulum placerat feugiat nisl. Suspendisse lacinia, odio non feugiat vestibulum, sem erat blandit metus, ac nonummy magna odio pharetra felis. Vivamus vehicula velit non metus faucibus auctor. Nam sed augue. Donec orci. Cras eget diam et dolor dapibus sollicitudin. In lacinia, tellus vitae laoreet ultrices, lectus ligula dictum dui, eget condimentum velit dui vitae ante. Nulla nonummy augue nec pede. Pellentesque ut nulla. Donec at libero. Pellentesque at nisl ac nisi fermentum viverra. Praesent odio. Phasellus tincidunt diam ut ipsum. Donec eget est.",
161 "Regex does not match! :(")
162
163@Test
164def testNotMatchesString(): Bool =
165 FlixAssertion.notMatchesString("Lorem.*est.",
166 "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean et est a dui semper facilisis. Pellentesque placerat elit a nunc. Nullam tortor odio, rutrum quis, egestas ut, posuere sed, felis. Vestibulum placerat feugiat nisl. Suspendisse lacinia, odio non feugiat vestibulum, sem erat blandit metus, ac nonummy magna odio pharetra felis. Vivamus vehicula velit non metus faucibus auctor. Nam sed augue. Donec orci. Cras eget diam et dolor dapibus sollicitudin. In lacinia, tellus vitae laoreet ultrices, lectus ligula dictum dui, eget condimentum velit dui vitae ante. Nulla nonummy augue nec pede. Pellentesque ut nulla. Donec at libero. Pellentesque at nisl ac nisi fermentum viverra. Praesent odio. Phasellus tincidunt diam ut ipsum. Donec eget est.",
167 "Regex does match! :(")
168
169@Test
170def testMatchesSubString(): Bool =
171 FlixAssertion.matchesSubString("[0-9]+",
172 "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean et est a dui semper facilisis. Pellentesque placerat elit a nunc. Nullam tortor odio, rutrum quis, egestas ut, posuere sed, felis. Vestibulum placerat feugiat nisl. Suspendisse lacinia, odio non feugiat vestibulum, sem erat blandit metus, ac nonummy magna odio pharetra felis. Vivamus vehicula velit non metus faucibus auctor. Nam sed augue. Donec orci. Cras eget diam et dolor dapibus sollicitudin. In lacinia, tellus vitae laoreet ultrices, lectus ligula dictum dui, eget condimentum velit dui vitae ante. Nulla nonummy augue nec pede. Pellentesque ut nulla. Donec at libero. Pellentesque at nisl ac nisi fermentum viverra. Praesent odio. Phasellus tincidunt diam ut ipsum. Donec eget est.",
173 "Regex does not match! :(")
174
175@Test
176def testNotMatchesSubString(): Bool =
177 FlixAssertion.notMatchesSubString("\\S+",
178 "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean et est a dui semper facilisis. Pellentesque placerat elit a nunc. Nullam tortor odio, rutrum quis, egestas ut, posuere sed, felis. Vestibulum placerat feugiat nisl. Suspendisse lacinia, odio non feugiat vestibulum, sem erat blandit metus, ac nonummy magna odio pharetra felis. Vivamus vehicula velit non metus faucibus auctor. Nam sed augue. Donec orci. Cras eget diam et dolor dapibus sollicitudin. In lacinia, tellus vitae laoreet ultrices, lectus ligula dictum dui, eget condimentum velit dui vitae ante. Nulla nonummy augue nec pede. Pellentesque ut nulla. Donec at libero. Pellentesque at nisl ac nisi fermentum viverra. Praesent odio. Phasellus tincidunt diam ut ipsum. Donec eget est.",
179 "Regex does match! :(")
180
181@Test
182def testContains01(): Bool =
183 use FlixAssertion.{contains, <|};
184 (Map#{"foo" => 12, "bar" => 42} `contains` 43) <| "Does Map contain 43?"
185
186@Test
187def testNotContains01(): Bool =
188 use FlixAssertion.{notContains, <|};
189 (Map#{"foo" => 12, "bar" => 42} `notContains` 42) <| "Does Map not contain 42?"
190
191@Test
192def testContainsEff01(): Bool =
193 region r {
194 let set = MutSet.new(r);
195 MutSet.add!(5, set);
196 MutSet.add!(2, set);
197 FlixAssertion.containsEff(set, 43, "Does MutSet contain 43?", MutSet.toString)
198 }
199
200@Test
201def testNotContainsEff01(): Bool =
202 region r {
203 let set = MutSet.new(r);
204 MutSet.add!(5, set);
205 MutSet.add!(42, set);
206 FlixAssertion.notContainsEff(set, 42, "Does MutSet not contain 42?", MutSet.toString)
207 }
208
209@Test
210def testEmpty01(): Bool =
211 FlixAssertion.isEmpty(1 :: Nil, "This should be empty!")
212
213@Test
214def testNotEmpty01(): Bool =
215 FlixAssertion.isNotEmpty(Vector#{}: Vector[Int32], "This should not be the empty vector!")
216
217@Test
218def testEmptyEff01(): Bool =
219 region r {
220 FlixAssertion.isEmptyEff(Array#{1, 2} @ r, "This should be empty!", Array.toString)
221 }
222
223@Test
224def testNotEmptyEff01(): Bool =
225 region r {
226 let emptyList = MutList.new(r): MutList[Int32, r];
227 FlixAssertion.isNotEmptyEff(emptyList, "This should not be the empty MutList!", MutList.toString)
228 }
229
230pub def main(): Unit \ IO = println("main")