forked from reingart/exercism
-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathmeetup_test.py
333 lines (226 loc) · 17.1 KB
/
meetup_test.py
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
# These tests are auto-generated with test data from:
# https://github.com/exercism/problem-specifications/tree/main/exercises/meetup/canonical-data.json
# File last updated on 2023-07-19
from datetime import date
import unittest
from meetup import (
meetup,
MeetupDayException,
)
class MeetupTest(unittest.TestCase):
def test_when_teenth_monday_is_the_13th_the_first_day_of_the_teenth_week(self):
self.assertEqual(meetup(2013, 5, "teenth", "Monday"), date(2013, 5, 13))
def test_when_teenth_monday_is_the_19th_the_last_day_of_the_teenth_week(self):
self.assertEqual(meetup(2013, 8, "teenth", "Monday"), date(2013, 8, 19))
def test_when_teenth_monday_is_some_day_in_the_middle_of_the_teenth_week(self):
self.assertEqual(meetup(2013, 9, "teenth", "Monday"), date(2013, 9, 16))
def test_when_teenth_tuesday_is_the_19th_the_last_day_of_the_teenth_week(self):
self.assertEqual(meetup(2013, 3, "teenth", "Tuesday"), date(2013, 3, 19))
def test_when_teenth_tuesday_is_some_day_in_the_middle_of_the_teenth_week(self):
self.assertEqual(meetup(2013, 4, "teenth", "Tuesday"), date(2013, 4, 16))
def test_when_teenth_tuesday_is_the_13th_the_first_day_of_the_teenth_week(self):
self.assertEqual(meetup(2013, 8, "teenth", "Tuesday"), date(2013, 8, 13))
def test_when_teenth_wednesday_is_some_day_in_the_middle_of_the_teenth_week(self):
self.assertEqual(meetup(2013, 1, "teenth", "Wednesday"), date(2013, 1, 16))
def test_when_teenth_wednesday_is_the_13th_the_first_day_of_the_teenth_week(self):
self.assertEqual(meetup(2013, 2, "teenth", "Wednesday"), date(2013, 2, 13))
def test_when_teenth_wednesday_is_the_19th_the_last_day_of_the_teenth_week(self):
self.assertEqual(meetup(2013, 6, "teenth", "Wednesday"), date(2013, 6, 19))
def test_when_teenth_thursday_is_some_day_in_the_middle_of_the_teenth_week(self):
self.assertEqual(meetup(2013, 5, "teenth", "Thursday"), date(2013, 5, 16))
def test_when_teenth_thursday_is_the_13th_the_first_day_of_the_teenth_week(self):
self.assertEqual(meetup(2013, 6, "teenth", "Thursday"), date(2013, 6, 13))
def test_when_teenth_thursday_is_the_19th_the_last_day_of_the_teenth_week(self):
self.assertEqual(meetup(2013, 9, "teenth", "Thursday"), date(2013, 9, 19))
def test_when_teenth_friday_is_the_19th_the_last_day_of_the_teenth_week(self):
self.assertEqual(meetup(2013, 4, "teenth", "Friday"), date(2013, 4, 19))
def test_when_teenth_friday_is_some_day_in_the_middle_of_the_teenth_week(self):
self.assertEqual(meetup(2013, 8, "teenth", "Friday"), date(2013, 8, 16))
def test_when_teenth_friday_is_the_13th_the_first_day_of_the_teenth_week(self):
self.assertEqual(meetup(2013, 9, "teenth", "Friday"), date(2013, 9, 13))
def test_when_teenth_saturday_is_some_day_in_the_middle_of_the_teenth_week(self):
self.assertEqual(meetup(2013, 2, "teenth", "Saturday"), date(2013, 2, 16))
def test_when_teenth_saturday_is_the_13th_the_first_day_of_the_teenth_week(self):
self.assertEqual(meetup(2013, 4, "teenth", "Saturday"), date(2013, 4, 13))
def test_when_teenth_saturday_is_the_19th_the_last_day_of_the_teenth_week(self):
self.assertEqual(meetup(2013, 10, "teenth", "Saturday"), date(2013, 10, 19))
def test_when_teenth_sunday_is_the_19th_the_last_day_of_the_teenth_week(self):
self.assertEqual(meetup(2013, 5, "teenth", "Sunday"), date(2013, 5, 19))
def test_when_teenth_sunday_is_some_day_in_the_middle_of_the_teenth_week(self):
self.assertEqual(meetup(2013, 6, "teenth", "Sunday"), date(2013, 6, 16))
def test_when_teenth_sunday_is_the_13th_the_first_day_of_the_teenth_week(self):
self.assertEqual(meetup(2013, 10, "teenth", "Sunday"), date(2013, 10, 13))
def test_when_first_monday_is_some_day_in_the_middle_of_the_first_week(self):
self.assertEqual(meetup(2013, 3, "first", "Monday"), date(2013, 3, 4))
def test_when_first_monday_is_the_1st_the_first_day_of_the_first_week(self):
self.assertEqual(meetup(2013, 4, "first", "Monday"), date(2013, 4, 1))
def test_when_first_tuesday_is_the_7th_the_last_day_of_the_first_week(self):
self.assertEqual(meetup(2013, 5, "first", "Tuesday"), date(2013, 5, 7))
def test_when_first_tuesday_is_some_day_in_the_middle_of_the_first_week(self):
self.assertEqual(meetup(2013, 6, "first", "Tuesday"), date(2013, 6, 4))
def test_when_first_wednesday_is_some_day_in_the_middle_of_the_first_week(self):
self.assertEqual(meetup(2013, 7, "first", "Wednesday"), date(2013, 7, 3))
def test_when_first_wednesday_is_the_7th_the_last_day_of_the_first_week(self):
self.assertEqual(meetup(2013, 8, "first", "Wednesday"), date(2013, 8, 7))
def test_when_first_thursday_is_some_day_in_the_middle_of_the_first_week(self):
self.assertEqual(meetup(2013, 9, "first", "Thursday"), date(2013, 9, 5))
def test_when_first_thursday_is_another_day_in_the_middle_of_the_first_week(self):
self.assertEqual(meetup(2013, 10, "first", "Thursday"), date(2013, 10, 3))
def test_when_first_friday_is_the_1st_the_first_day_of_the_first_week(self):
self.assertEqual(meetup(2013, 11, "first", "Friday"), date(2013, 11, 1))
def test_when_first_friday_is_some_day_in_the_middle_of_the_first_week(self):
self.assertEqual(meetup(2013, 12, "first", "Friday"), date(2013, 12, 6))
def test_when_first_saturday_is_some_day_in_the_middle_of_the_first_week(self):
self.assertEqual(meetup(2013, 1, "first", "Saturday"), date(2013, 1, 5))
def test_when_first_saturday_is_another_day_in_the_middle_of_the_first_week(self):
self.assertEqual(meetup(2013, 2, "first", "Saturday"), date(2013, 2, 2))
def test_when_first_sunday_is_some_day_in_the_middle_of_the_first_week(self):
self.assertEqual(meetup(2013, 3, "first", "Sunday"), date(2013, 3, 3))
def test_when_first_sunday_is_the_7th_the_last_day_of_the_first_week(self):
self.assertEqual(meetup(2013, 4, "first", "Sunday"), date(2013, 4, 7))
def test_when_second_monday_is_some_day_in_the_middle_of_the_second_week(self):
self.assertEqual(meetup(2013, 3, "second", "Monday"), date(2013, 3, 11))
def test_when_second_monday_is_the_8th_the_first_day_of_the_second_week(self):
self.assertEqual(meetup(2013, 4, "second", "Monday"), date(2013, 4, 8))
def test_when_second_tuesday_is_the_14th_the_last_day_of_the_second_week(self):
self.assertEqual(meetup(2013, 5, "second", "Tuesday"), date(2013, 5, 14))
def test_when_second_tuesday_is_some_day_in_the_middle_of_the_second_week(self):
self.assertEqual(meetup(2013, 6, "second", "Tuesday"), date(2013, 6, 11))
def test_when_second_wednesday_is_some_day_in_the_middle_of_the_second_week(self):
self.assertEqual(meetup(2013, 7, "second", "Wednesday"), date(2013, 7, 10))
def test_when_second_wednesday_is_the_14th_the_last_day_of_the_second_week(self):
self.assertEqual(meetup(2013, 8, "second", "Wednesday"), date(2013, 8, 14))
def test_when_second_thursday_is_some_day_in_the_middle_of_the_second_week(self):
self.assertEqual(meetup(2013, 9, "second", "Thursday"), date(2013, 9, 12))
def test_when_second_thursday_is_another_day_in_the_middle_of_the_second_week(self):
self.assertEqual(meetup(2013, 10, "second", "Thursday"), date(2013, 10, 10))
def test_when_second_friday_is_the_8th_the_first_day_of_the_second_week(self):
self.assertEqual(meetup(2013, 11, "second", "Friday"), date(2013, 11, 8))
def test_when_second_friday_is_some_day_in_the_middle_of_the_second_week(self):
self.assertEqual(meetup(2013, 12, "second", "Friday"), date(2013, 12, 13))
def test_when_second_saturday_is_some_day_in_the_middle_of_the_second_week(self):
self.assertEqual(meetup(2013, 1, "second", "Saturday"), date(2013, 1, 12))
def test_when_second_saturday_is_another_day_in_the_middle_of_the_second_week(self):
self.assertEqual(meetup(2013, 2, "second", "Saturday"), date(2013, 2, 9))
def test_when_second_sunday_is_some_day_in_the_middle_of_the_second_week(self):
self.assertEqual(meetup(2013, 3, "second", "Sunday"), date(2013, 3, 10))
def test_when_second_sunday_is_the_14th_the_last_day_of_the_second_week(self):
self.assertEqual(meetup(2013, 4, "second", "Sunday"), date(2013, 4, 14))
def test_when_third_monday_is_some_day_in_the_middle_of_the_third_week(self):
self.assertEqual(meetup(2013, 3, "third", "Monday"), date(2013, 3, 18))
def test_when_third_monday_is_the_15th_the_first_day_of_the_third_week(self):
self.assertEqual(meetup(2013, 4, "third", "Monday"), date(2013, 4, 15))
def test_when_third_tuesday_is_the_21st_the_last_day_of_the_third_week(self):
self.assertEqual(meetup(2013, 5, "third", "Tuesday"), date(2013, 5, 21))
def test_when_third_tuesday_is_some_day_in_the_middle_of_the_third_week(self):
self.assertEqual(meetup(2013, 6, "third", "Tuesday"), date(2013, 6, 18))
def test_when_third_wednesday_is_some_day_in_the_middle_of_the_third_week(self):
self.assertEqual(meetup(2013, 7, "third", "Wednesday"), date(2013, 7, 17))
def test_when_third_wednesday_is_the_21st_the_last_day_of_the_third_week(self):
self.assertEqual(meetup(2013, 8, "third", "Wednesday"), date(2013, 8, 21))
def test_when_third_thursday_is_some_day_in_the_middle_of_the_third_week(self):
self.assertEqual(meetup(2013, 9, "third", "Thursday"), date(2013, 9, 19))
def test_when_third_thursday_is_another_day_in_the_middle_of_the_third_week(self):
self.assertEqual(meetup(2013, 10, "third", "Thursday"), date(2013, 10, 17))
def test_when_third_friday_is_the_15th_the_first_day_of_the_third_week(self):
self.assertEqual(meetup(2013, 11, "third", "Friday"), date(2013, 11, 15))
def test_when_third_friday_is_some_day_in_the_middle_of_the_third_week(self):
self.assertEqual(meetup(2013, 12, "third", "Friday"), date(2013, 12, 20))
def test_when_third_saturday_is_some_day_in_the_middle_of_the_third_week(self):
self.assertEqual(meetup(2013, 1, "third", "Saturday"), date(2013, 1, 19))
def test_when_third_saturday_is_another_day_in_the_middle_of_the_third_week(self):
self.assertEqual(meetup(2013, 2, "third", "Saturday"), date(2013, 2, 16))
def test_when_third_sunday_is_some_day_in_the_middle_of_the_third_week(self):
self.assertEqual(meetup(2013, 3, "third", "Sunday"), date(2013, 3, 17))
def test_when_third_sunday_is_the_21st_the_last_day_of_the_third_week(self):
self.assertEqual(meetup(2013, 4, "third", "Sunday"), date(2013, 4, 21))
def test_when_fourth_monday_is_some_day_in_the_middle_of_the_fourth_week(self):
self.assertEqual(meetup(2013, 3, "fourth", "Monday"), date(2013, 3, 25))
def test_when_fourth_monday_is_the_22nd_the_first_day_of_the_fourth_week(self):
self.assertEqual(meetup(2013, 4, "fourth", "Monday"), date(2013, 4, 22))
def test_when_fourth_tuesday_is_the_28th_the_last_day_of_the_fourth_week(self):
self.assertEqual(meetup(2013, 5, "fourth", "Tuesday"), date(2013, 5, 28))
def test_when_fourth_tuesday_is_some_day_in_the_middle_of_the_fourth_week(self):
self.assertEqual(meetup(2013, 6, "fourth", "Tuesday"), date(2013, 6, 25))
def test_when_fourth_wednesday_is_some_day_in_the_middle_of_the_fourth_week(self):
self.assertEqual(meetup(2013, 7, "fourth", "Wednesday"), date(2013, 7, 24))
def test_when_fourth_wednesday_is_the_28th_the_last_day_of_the_fourth_week(self):
self.assertEqual(meetup(2013, 8, "fourth", "Wednesday"), date(2013, 8, 28))
def test_when_fourth_thursday_is_some_day_in_the_middle_of_the_fourth_week(self):
self.assertEqual(meetup(2013, 9, "fourth", "Thursday"), date(2013, 9, 26))
def test_when_fourth_thursday_is_another_day_in_the_middle_of_the_fourth_week(self):
self.assertEqual(meetup(2013, 10, "fourth", "Thursday"), date(2013, 10, 24))
def test_when_fourth_friday_is_the_22nd_the_first_day_of_the_fourth_week(self):
self.assertEqual(meetup(2013, 11, "fourth", "Friday"), date(2013, 11, 22))
def test_when_fourth_friday_is_some_day_in_the_middle_of_the_fourth_week(self):
self.assertEqual(meetup(2013, 12, "fourth", "Friday"), date(2013, 12, 27))
def test_when_fourth_saturday_is_some_day_in_the_middle_of_the_fourth_week(self):
self.assertEqual(meetup(2013, 1, "fourth", "Saturday"), date(2013, 1, 26))
def test_when_fourth_saturday_is_another_day_in_the_middle_of_the_fourth_week(self):
self.assertEqual(meetup(2013, 2, "fourth", "Saturday"), date(2013, 2, 23))
def test_when_fourth_sunday_is_some_day_in_the_middle_of_the_fourth_week(self):
self.assertEqual(meetup(2013, 3, "fourth", "Sunday"), date(2013, 3, 24))
def test_when_fourth_sunday_is_the_28th_the_last_day_of_the_fourth_week(self):
self.assertEqual(meetup(2013, 4, "fourth", "Sunday"), date(2013, 4, 28))
def test_last_monday_in_a_month_with_four_mondays(self):
self.assertEqual(meetup(2013, 3, "last", "Monday"), date(2013, 3, 25))
def test_last_monday_in_a_month_with_five_mondays(self):
self.assertEqual(meetup(2013, 4, "last", "Monday"), date(2013, 4, 29))
def test_last_tuesday_in_a_month_with_four_tuesdays(self):
self.assertEqual(meetup(2013, 5, "last", "Tuesday"), date(2013, 5, 28))
def test_last_tuesday_in_another_month_with_four_tuesdays(self):
self.assertEqual(meetup(2013, 6, "last", "Tuesday"), date(2013, 6, 25))
def test_last_wednesday_in_a_month_with_five_wednesdays(self):
self.assertEqual(meetup(2013, 7, "last", "Wednesday"), date(2013, 7, 31))
def test_last_wednesday_in_a_month_with_four_wednesdays(self):
self.assertEqual(meetup(2013, 8, "last", "Wednesday"), date(2013, 8, 28))
def test_last_thursday_in_a_month_with_four_thursdays(self):
self.assertEqual(meetup(2013, 9, "last", "Thursday"), date(2013, 9, 26))
def test_last_thursday_in_a_month_with_five_thursdays(self):
self.assertEqual(meetup(2013, 10, "last", "Thursday"), date(2013, 10, 31))
def test_last_friday_in_a_month_with_five_fridays(self):
self.assertEqual(meetup(2013, 11, "last", "Friday"), date(2013, 11, 29))
def test_last_friday_in_a_month_with_four_fridays(self):
self.assertEqual(meetup(2013, 12, "last", "Friday"), date(2013, 12, 27))
def test_last_saturday_in_a_month_with_four_saturdays(self):
self.assertEqual(meetup(2013, 1, "last", "Saturday"), date(2013, 1, 26))
def test_last_saturday_in_another_month_with_four_saturdays(self):
self.assertEqual(meetup(2013, 2, "last", "Saturday"), date(2013, 2, 23))
def test_last_sunday_in_a_month_with_five_sundays(self):
self.assertEqual(meetup(2013, 3, "last", "Sunday"), date(2013, 3, 31))
def test_last_sunday_in_a_month_with_four_sundays(self):
self.assertEqual(meetup(2013, 4, "last", "Sunday"), date(2013, 4, 28))
def test_when_last_wednesday_in_february_in_a_leap_year_is_the_29th(self):
self.assertEqual(meetup(2012, 2, "last", "Wednesday"), date(2012, 2, 29))
def test_last_wednesday_in_december_that_is_also_the_last_day_of_the_year(self):
self.assertEqual(meetup(2014, 12, "last", "Wednesday"), date(2014, 12, 31))
def test_when_last_sunday_in_february_in_a_non_leap_year_is_not_the_29th(self):
self.assertEqual(meetup(2015, 2, "last", "Sunday"), date(2015, 2, 22))
def test_when_first_friday_is_the_7th_the_last_day_of_the_first_week(self):
self.assertEqual(meetup(2012, 12, "first", "Friday"), date(2012, 12, 7))
# Additional tests for this track
def test_fifth_monday_of_march_2015(self):
self.assertEqual(meetup(2015, 3, "fifth", "Monday"), date(2015, 3, 30))
def test_fifth_thursday_of_february_2024(self):
self.assertEqual(meetup(2024, 2, "fifth", "Thursday"), date(2024, 2, 29))
def test_fifth_saturday_of_february_2020(self):
self.assertEqual(meetup(2020, 2, "fifth", "Saturday"), date(2020, 2, 29))
def test_last_sunday_of_june_2024(self):
self.assertEqual(meetup(2024, 6, "last", "Sunday"), date(2024, 6, 30))
def test_teenth_friday_of_may_2022(self):
self.assertEqual(meetup(2022, 5, "teenth", "Friday"), date(2022, 5, 13))
def test_nonexistent_fifth_monday_of_february_2022(self):
with self.assertRaises(MeetupDayException) as err:
meetup(2022, 2, "fifth", "Monday")
self.assertEqual(type(err.exception), MeetupDayException)
self.assertEqual(err.exception.args[0], "That day does not exist.")
def test_nonexistent_fifth_friday_of_august_2022(self):
with self.assertRaises(MeetupDayException) as err:
meetup(2022, 8, "fifth", "Friday")
self.assertEqual(type(err.exception), MeetupDayException)
self.assertEqual(err.exception.args[0], "That day does not exist.")
def test_nonexistent_fifth_thursday_of_may_2023(self):
with self.assertRaises(MeetupDayException) as err:
meetup(2023, 5, "fifth", "Thursday")
self.assertEqual(type(err.exception), MeetupDayException)
self.assertEqual(err.exception.args[0], "That day does not exist.")