- commit
- a63e86b0ac78c5e216017682fa69eeabb07b352a
- parent
- 469d63154e6633162b88889cb2f70eeae5ed15e7
- Author
- Tobias Bengfort <tobias.bengfort@posteo.de>
- Date
- 2024-08-31 08:26
extend tests many are reused from python-dateutil
Diffstat
| M | test.py | 263 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++------ |
1 files changed, 239 insertions, 24 deletions
diff --git a/test.py b/test.py
@@ -6,11 +6,90 @@ from zoneinfo import ZoneInfo 6 6 from nominaldelta import NominalDelta 7 7 8 89 -1 class TestNominalDelta(unittest.TestCase):10 -1 def test_weeks(self):-1 9 class NotAValueClass: -1 10 def _op(self, other): -1 11 return self -1 12 -1 13 __add__ = __radd__ = _op -1 14 __sub__ = __rsub__ = _op -1 15 __mul__ = __rmul__ = _op -1 16 -1 17 __lt__ = __rlt__ = _op -1 18 __gt__ = __rgt__ = _op -1 19 __eq__ = __req__ = _op -1 20 __le__ = __rle__ = _op -1 21 __ge__ = __rge__ = _op -1 22 -1 23 -1 24 NotAValue = NotAValueClass() -1 25 -1 26 -1 27 class GeneralTests(unittest.TestCase): -1 28 def test_construct(self): -1 29 self.assertEqual(NominalDelta(years=22, months=9).months, 273) 11 30 self.assertEqual(NominalDelta(weeks=2, days=2).days, 16) 12 31 self.assertEqual(NominalDelta(weeks=2, days=-1).days, 13) -1 32 self.assertEqual(NominalDelta(hours=1, minutes=2, seconds=3).seconds, 3723) -1 33 self.assertNotEqual(NominalDelta(days=365), NominalDelta(years=1)) -1 34 self.assertNotEqual(NominalDelta(hours=24), NominalDelta(days=1)) -1 35 -1 36 def test_fractional_year(self): -1 37 with self.assertRaises(ValueError): -1 38 NominalDelta(years=1.5) -1 39 -1 40 def test_fractional_month(self): -1 41 with self.assertRaises(ValueError): -1 42 NominalDelta(months=1.5) -1 43 -1 44 def test_hashable(self): -1 45 try: -1 46 {NominalDelta(minutes=1): 'test'} -1 47 except Exception: -1 48 self.fail('NominalDelta() failed to hash!') -1 49 -1 50 def test_boolean(self): -1 51 self.assertFalse(NominalDelta(days=0)) -1 52 self.assertTrue(NominalDelta(days=1)) -1 53 -1 54 def test_repr(self): -1 55 self.assertEqual( -1 56 repr(NominalDelta(years=1, months=-1, days=15)), -1 57 'NominalDelta(months=11, days=15, seconds=0)', -1 58 ) -1 59 self.assertEqual( -1 60 repr(NominalDelta(months=14, seconds=-25)), -1 61 'NominalDelta(months=14, days=0, seconds=-25)', -1 62 ) -1 63 -1 64 def test_unsupported_eq(self): -1 65 self.assertIs(NominalDelta(hours=3) == NotAValue, NotAValue) -1 66 self.assertFalse(NominalDelta(years=1) == 19) -1 67 -1 68 def test_unsupported_add(self): -1 69 self.assertIs(NominalDelta(days=1) + NotAValue, NotAValue) -1 70 with self.assertRaises(TypeError): -1 71 NominalDelta(days=3) + 9 -1 72 with self.assertRaises(TypeError): -1 73 'asd' + NominalDelta(month=1) -1 74 with self.assertRaises(TypeError): -1 75 NominalDelta(month=1) + 'asd' -1 76 with self.assertRaises(TypeError): -1 77 NominalDelta(days=1) + datetime(2000, 1, 1) -1 78 -1 79 def test_unsupported_sub(self): -1 80 self.assertIs(NominalDelta(days=1) + NotAValue, NotAValue) -1 81 with self.assertRaises(TypeError): -1 82 NominalDelta(hours=12) - 14 -1 83 with self.assertRaises(TypeError): -1 84 NominalDelta(days=1) - datetime(2000, 1, 1) -1 85 -1 86 def test_multiplication_unsupported_type(self): -1 87 self.assertIs(NominalDelta(days=1) * NotAValue, NotAValue) -1 88 with self.assertRaises(TypeError): -1 89 NominalDelta(hours=12) * 1.9 -1 90 13 91 -1 92 class DeltaArithmeticTests(unittest.TestCase): 14 93 def test_add(self): 15 94 self.assertEqual( 16 95 NominalDelta(months=1) + NominalDelta(days=2), @@ -20,6 +99,11 @@ class TestNominalDelta(unittest.TestCase): 20 99 NominalDelta(months=1) + NominalDelta(months=2), 21 100 NominalDelta(months=3), 22 101 ) -1 102 self.assertEqual( -1 103 NominalDelta(days=10) -1 104 + NominalDelta(years=1, months=2, days=3, hours=4, minutes=5), -1 105 NominalDelta(years=1, months=2, days=13, hours=4, minutes=5), -1 106 ) 23 107 24 108 def test_sub(self): 25 109 self.assertEqual( @@ -30,6 +114,11 @@ class TestNominalDelta(unittest.TestCase): 30 114 NominalDelta(months=1) - NominalDelta(months=2), 31 115 NominalDelta(months=-1), 32 116 ) -1 117 self.assertEqual( -1 118 NominalDelta(days=10) -1 119 - NominalDelta(years=1, months=2, days=3, hours=4, minutes=5), -1 120 NominalDelta(years=-1, months=-2, days=7, hours=-4, minutes=-5), -1 121 ) 33 122 34 123 def test_neg(self): 35 124 self.assertEqual( @@ -49,38 +138,112 @@ class TestNominalDelta(unittest.TestCase): 49 138 NominalDelta(months=2, days=-4), 50 139 ) 51 14052 -1 def test_radd_str_type_error(self):53 -1 with self.assertRaises(TypeError):54 -1 'asd' + NominalDelta(month=1)-1 141 def test_inheritance(self): -1 142 class ChildClass(NominalDelta): -1 143 pass 55 14456 -1 with self.assertRaises(TypeError):57 -1 NominalDelta(month=1) + 'asd'-1 145 delta = NominalDelta(months=1) -1 146 child = ChildClass(months=1) -1 147 -1 148 self.assertEqual(type(child + delta), type(child)) -1 149 self.assertEqual(type(child - delta), type(child)) -1 150 self.assertEqual(type(-child), type(child)) -1 151 self.assertEqual(type(child * 5), type(child)) 58 15259 -1 def test_radd_date(self):-1 153 -1 154 class AdditionTests(unittest.TestCase): -1 155 def test_add_date(self): 60 156 self.assertEqual(61 -1 date(1970, 1, 30) + NominalDelta(months=1),62 -1 date(1970, 2, 28),-1 157 date(2003, 9, 17) + NominalDelta(months=1, weeks=1), -1 158 date(2003, 10, 24), 63 159 ) -1 160 self.assertEqual(date(2003, 12, 1) + NominalDelta(months=13), date(2005, 1, 1)) -1 161 self.assertEqual(date(2021, 1, 28) + NominalDelta(months=1), date(2021, 2, 28)) -1 162 self.assertEqual(date(2021, 2, 27) + NominalDelta(months=1), date(2021, 3, 27)) -1 163 self.assertEqual(date(2021, 4, 29) + NominalDelta(months=1), date(2021, 5, 29)) -1 164 self.assertEqual(date(2021, 5, 30) + NominalDelta(months=1), date(2021, 6, 30)) -1 165 -1 166 def test_add_date_negative_months(self): -1 167 self.assertEqual(date(2003, 1, 1) + NominalDelta(months=-2), date(2002, 11, 1)) -1 168 -1 169 def test_add_date_month_clip(self): -1 170 self.assertEqual(date(2003, 1, 27) + NominalDelta(months=1), date(2003, 2, 27)) -1 171 self.assertEqual(date(2003, 1, 31) + NominalDelta(months=1), date(2003, 2, 28)) -1 172 self.assertEqual(date(2003, 1, 31) + NominalDelta(months=2), date(2003, 3, 31)) -1 173 self.assertEqual(date(2021, 1, 31) + NominalDelta(months=1), date(2021, 2, 28)) -1 174 self.assertEqual(date(2021, 1, 30) + NominalDelta(months=1), date(2021, 2, 28)) -1 175 self.assertEqual(date(2021, 1, 29) + NominalDelta(months=1), date(2021, 2, 28)) -1 176 self.assertEqual(date(2021, 1, 28) + NominalDelta(months=1), date(2021, 2, 28)) -1 177 self.assertEqual(date(2021, 2, 28) + NominalDelta(months=1), date(2021, 3, 28)) -1 178 self.assertEqual(date(2021, 4, 30) + NominalDelta(months=1), date(2021, 5, 30)) -1 179 self.assertEqual(date(2021, 5, 31) + NominalDelta(months=1), date(2021, 6, 30)) -1 180 -1 181 def test_date_add_leap_year_clip(self): -1 182 self.assertEqual(date(1999, 2, 28) + NominalDelta(years=1), date(2000, 2, 28)) -1 183 self.assertEqual(date(1999, 3, 1) + NominalDelta(years=1), date(2000, 3, 1)) -1 184 -1 185 self.assertEqual(date(2000, 2, 28) + NominalDelta(years=1), date(2001, 2, 28)) -1 186 self.assertEqual(date(2000, 2, 29) + NominalDelta(years=1), date(2001, 2, 28)) -1 187 -1 188 def test_sub_date(self): -1 189 self.assertEqual(date(1970, 1, 30) - NominalDelta(days=5), date(1970, 1, 25)) -1 190 self.assertEqual(date(2021, 2, 27) - NominalDelta(months=1), date(2021, 1, 27)) -1 191 self.assertEqual(date(2021, 2, 28) - NominalDelta(months=1), date(2021, 1, 28)) -1 192 self.assertEqual(date(2021, 3, 28) - NominalDelta(months=1), date(2021, 2, 28)) -1 193 self.assertEqual(date(2021, 5, 30) - NominalDelta(months=1), date(2021, 4, 30)) -1 194 self.assertEqual(date(2021, 6, 29) - NominalDelta(months=1), date(2021, 5, 29)) 64 19565 -1 def test_radd_datetime(self):-1 196 def test_sub_date_clip(self): -1 197 self.assertEqual(date(2021, 3, 29) - NominalDelta(months=1), date(2021, 2, 28)) -1 198 self.assertEqual(date(2021, 3, 30) - NominalDelta(months=1), date(2021, 2, 28)) -1 199 self.assertEqual(date(2021, 3, 31) - NominalDelta(months=1), date(2021, 2, 28)) -1 200 self.assertEqual(date(2021, 5, 31) - NominalDelta(months=1), date(2021, 4, 30)) -1 201 self.assertEqual(date(2021, 6, 30) - NominalDelta(months=1), date(2021, 5, 30)) -1 202 -1 203 def test_add_datetime(self): 66 204 self.assertEqual(67 -1 datetime(1970, 1, 30, 13) + NominalDelta(months=1),68 -1 datetime(1970, 2, 28, 13),-1 205 datetime(2000, 1, 1) + NominalDelta(days=1), datetime(2000, 1, 2) -1 206 ) -1 207 self.assertEqual( -1 208 datetime(2003, 9, 17, 20, 54, 47) + NominalDelta(months=1), -1 209 datetime(2003, 10, 17, 20, 54, 47), -1 210 ) -1 211 self.assertEqual( -1 212 datetime(2003, 9, 17, 20, 54, 47) + NominalDelta(months=1, weeks=1), -1 213 datetime(2003, 10, 24, 20, 54, 47), -1 214 ) -1 215 self.assertEqual( -1 216 datetime(2003, 9, 17, 20, 54, 47) + NominalDelta(years=1, months=-1), -1 217 datetime(2004, 8, 17, 20, 54, 47), 69 218 ) 70 219 self.assertEqual( 71 220 datetime(1970, 1, 30, 13) + NominalDelta(hours=2), 72 221 datetime(1970, 1, 30, 15), 73 222 ) 74 223 self.assertEqual( -1 224 datetime(1970, 1, 30, 13) + NominalDelta(seconds=80), -1 225 datetime(1970, 1, 30, 13, 1, 20), -1 226 ) -1 227 -1 228 def test_add_datetime_24h(self): -1 229 self.assertEqual( 75 230 datetime(1970, 1, 30, 13) + NominalDelta(hours=24), 76 231 datetime(1970, 1, 31, 13), 77 232 ) -1 233 -1 234 def test_add_datetime_clip(self): 78 235 self.assertEqual(79 -1 datetime(1970, 1, 30, 13) + NominalDelta(seconds=80),80 -1 datetime(1970, 1, 30, 13, 1, 20),-1 236 datetime(1970, 1, 30, 13) + NominalDelta(months=1), -1 237 datetime(1970, 2, 28, 13), 81 238 ) 82 23983 -1 def test_radd_datetime_dst(self):-1 240 def test_add_datetime_fractional_seconds(self): -1 241 self.assertEqual( -1 242 datetime(2009, 9, 3, 0, 0) + NominalDelta(minutes=30, seconds=30.5), -1 243 datetime(2009, 9, 3, 0, 30, 30, 500000), -1 244 ) -1 245 -1 246 def test_add_datetime_dst(self): 84 247 tz = ZoneInfo('Europe/Berlin') 85 248 self.assertEqual( 86 249 datetime(2019, 3, 31, 1, 59, tzinfo=tz) + NominalDelta(minutes=2), @@ -95,13 +258,7 @@ class TestNominalDelta(unittest.TestCase): 95 258 datetime(2019, 3, 31, 3, 30, tzinfo=tz), 96 259 ) 97 26098 -1 def test_rsub_date(self):99 -1 self.assertEqual(100 -1 date(1970, 1, 30) - NominalDelta(days=5),101 -1 date(1970, 1, 25),102 -1 )103 -1104 -1 def test_rsub_datetime(self):-1 261 def test_sub_datetime(self): 105 262 self.assertEqual( 106 263 datetime(1970, 1, 30, 13) - NominalDelta(days=1), 107 264 datetime(1970, 1, 29, 13), @@ -118,8 +275,11 @@ class TestNominalDelta(unittest.TestCase): 118 275 datetime(1970, 1, 30, 13) - NominalDelta(seconds=80), 119 276 datetime(1970, 1, 30, 12, 58, 40), 120 277 ) -1 278 self.assertEqual( -1 279 datetime(2000, 1, 2) - NominalDelta(days=1), datetime(2000, 1, 1) -1 280 ) 121 281122 -1 def test_rsub_datetime_dst(self):-1 282 def test_sub_datetime_dst(self): 123 283 tz = ZoneInfo('Europe/Berlin') 124 284 self.assertEqual( 125 285 datetime(2019, 3, 31, 3, 1, tzinfo=tz) - NominalDelta(minutes=2), @@ -131,6 +291,18 @@ class TestNominalDelta(unittest.TestCase): 131 291 datetime(2019, 10, 27, 2, 59, tzinfo=tz), 132 292 ) 133 293 -1 294 -1 295 class DiffTests(unittest.TestCase): -1 296 def test_diff_invalid(self): -1 297 with self.assertRaises(TypeError): -1 298 NominalDelta.diff('2018-01-02', '2018-01-01') -1 299 -1 300 with self.assertRaises(TypeError): -1 301 NominalDelta.diff('2018-01-02', datetime(2018, 1, 1)) -1 302 -1 303 with self.assertRaises(TypeError): -1 304 NominalDelta.diff(datetime(2018, 1, 2), '2018-01-01') -1 305 134 306 def test_diff_date(self): 135 307 self.assertEqual( 136 308 NominalDelta.diff(date(1970, 1, 15), date(1970, 2, 15)), @@ -169,3 +341,46 @@ class TestNominalDelta(unittest.TestCase): 169 341 ), 170 342 NominalDelta(seconds=80), 171 343 ) -1 344 self.assertEqual( -1 345 NominalDelta.diff(datetime(2001, 1, 1), datetime(2003, 9, 17, 20, 54, 47)), -1 346 NominalDelta( -1 347 years=2, -1 348 months=8, -1 349 days=16, -1 350 hours=20, -1 351 minutes=54, -1 352 seconds=47, -1 353 ), -1 354 ) -1 355 -1 356 def test_diff_datetime_full_month(self): -1 357 self.assertEqual( -1 358 NominalDelta.diff( -1 359 datetime(2003, 1, 31, 23, 59, 59), -1 360 datetime(2003, 3, 1, 0, 0, 0), -1 361 ), -1 362 NominalDelta(months=1, seconds=1), -1 363 ) -1 364 self.assertEqual( -1 365 NominalDelta.diff( -1 366 datetime(2003, 3, 1, 0, 0, 0), -1 367 datetime(2003, 1, 31, 23, 59, 59), -1 368 ), -1 369 NominalDelta(months=-1, seconds=-1), -1 370 ) -1 371 -1 372 def test_diff_datetime_full_month_leap_year(self): -1 373 self.assertEqual( -1 374 NominalDelta.diff( -1 375 datetime(2004, 1, 31, 23, 59, 59), -1 376 datetime(2004, 3, 1, 0, 0, 0), -1 377 ), -1 378 NominalDelta(months=1, seconds=1), -1 379 ) -1 380 self.assertEqual( -1 381 NominalDelta.diff( -1 382 datetime(2004, 3, 1, 0, 0, 0), -1 383 datetime(2004, 1, 31, 23, 59, 59), -1 384 ), -1 385 NominalDelta(months=-1, seconds=-1), -1 386 )