kopia lustrzana https://github.com/micropython/micropython-lib
2270 wiersze
68 KiB
Python
2270 wiersze
68 KiB
Python
![]() |
# See https://github.com/python/cpython/blob/3.9/Lib/test/datetimetester.py
|
||
|
#
|
||
|
# This script can be run in 3 different modes:
|
||
|
# 1. `python3 test_datetime.py --stdlib`: checks that the tests comply to
|
||
|
# CPython's standard datetime library.
|
||
|
# 2. `python3 test_datetime.py`: runs the tests against datetime.py, using
|
||
|
# CPython's standard unittest (which accepts filter options, such as
|
||
|
# `-v TestTimeDelta -k tuple`, and provides more verbose output in case
|
||
|
# of failure).
|
||
|
# 3. `micropython test_datetime.py`: runs the tests against datetime.py
|
||
|
# using MicroPython's unittest library (which must be available).
|
||
|
#
|
||
|
# This script also accepts option `--reorder` which rewrites this file
|
||
|
# in-place by numbering tests in sequence.
|
||
|
|
||
|
import sys
|
||
|
|
||
|
STDLIB = False
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
while len(sys.argv) > 1:
|
||
|
if sys.argv[1] == "--reorder":
|
||
|
import fileinput, re
|
||
|
|
||
|
with fileinput.input(files=sys.argv[0], inplace=True) as f:
|
||
|
cases = {}
|
||
|
n = 0
|
||
|
for line in f:
|
||
|
match = re.match("(\s+def\s+test_)(\w+?)(?:\d+)(\(.+\):)", line)
|
||
|
if match:
|
||
|
prefix, name, suffix = match.groups()
|
||
|
if name != last_name:
|
||
|
if name in cases[case]:
|
||
|
sys.exit(
|
||
|
f"duplicated test in {case} at line {fileinput.filelineno()}: {name}"
|
||
|
)
|
||
|
cases[case].append(name)
|
||
|
last_name = name
|
||
|
i = 0
|
||
|
print(f"{prefix}{name}{i:02d}{suffix}")
|
||
|
i += 1
|
||
|
n += 1
|
||
|
continue
|
||
|
|
||
|
match = re.match("class\s+(Test[\w\d]+)\(", line)
|
||
|
if match:
|
||
|
case = match[1]
|
||
|
if case in cases:
|
||
|
sys.exit(
|
||
|
f"duplicated test case at line {fileinput.filelineno()}: {case}"
|
||
|
)
|
||
|
cases[case] = []
|
||
|
last_name = ""
|
||
|
|
||
|
print(line, end="")
|
||
|
print(f"Reordered {n} tests in {len(cases)} cases")
|
||
|
elif sys.argv[1] == "--stdlib":
|
||
|
sys.path.pop(0)
|
||
|
STDLIB = True
|
||
|
else:
|
||
|
break
|
||
|
sys.argv.pop(1)
|
||
|
|
||
|
import os
|
||
|
import time as mod_time
|
||
|
import datetime as mod_datetime
|
||
|
from datetime import MAXYEAR, MINYEAR, datetime, date, time, timedelta, timezone, tzinfo
|
||
|
import unittest
|
||
|
|
||
|
|
||
|
# See localtz.patch
|
||
|
try:
|
||
|
datetime.fromtimestamp(0)
|
||
|
LOCALTZ = True
|
||
|
except NotImplementedError:
|
||
|
LOCALTZ = False
|
||
|
|
||
|
|
||
|
if hasattr(datetime, "EPOCH"):
|
||
|
EPOCH = datetime.EPOCH
|
||
|
else:
|
||
|
EPOCH = datetime(*mod_time.gmtime(0)[:6], tzinfo=timezone.utc)
|
||
|
|
||
|
|
||
|
def eval_mod(s):
|
||
|
return eval(s.replace("datetime.", "mod_datetime."))
|
||
|
|
||
|
|
||
|
### timedelta ################################################################
|
||
|
|
||
|
a = timedelta(hours=7)
|
||
|
b = timedelta(minutes=6)
|
||
|
c = timedelta(seconds=10)
|
||
|
us = timedelta(microseconds=1)
|
||
|
td0 = timedelta(0)
|
||
|
td1 = timedelta(2, 3, 4)
|
||
|
td2 = timedelta(2, 3, 4)
|
||
|
td3 = timedelta(2, 3, 5)
|
||
|
td4 = timedelta(
|
||
|
days=100,
|
||
|
weeks=-7,
|
||
|
hours=-24 * (100 - 49),
|
||
|
minutes=-3,
|
||
|
seconds=12,
|
||
|
microseconds=(3 * 60 - 12) * 1000000,
|
||
|
) # == timedelta(0)
|
||
|
|
||
|
td1h = timedelta(hours=1)
|
||
|
td1hr = "datetime.timedelta(microseconds={})".format(1 * 3600 * 10**6)
|
||
|
td10h2m = timedelta(hours=10, minutes=2)
|
||
|
td10h2mr = "datetime.timedelta(microseconds={})".format((10 * 3600 + 2 * 60) * 10**6)
|
||
|
tdn10h2m40s = timedelta(hours=-10, minutes=2, seconds=40)
|
||
|
tdn10h2m40sr = "datetime.timedelta(microseconds={})".format((-10 * 3600 + 2 * 60 + 40) * 10**6)
|
||
|
td1h2m40s100us = timedelta(hours=1, minutes=2, seconds=40, microseconds=100)
|
||
|
td1h2m40s100usr = "datetime.timedelta(microseconds={})".format(
|
||
|
(1 * 3600 + 2 * 60 + 40) * 10**6 + 100
|
||
|
)
|
||
|
|
||
|
|
||
|
class Test0TimeDelta(unittest.TestCase):
|
||
|
def test___init__00(self):
|
||
|
self.assertEqual(timedelta(), timedelta(weeks=0, days=0, hours=0, minutes=0, seconds=0))
|
||
|
|
||
|
def test___init__01(self):
|
||
|
self.assertEqual(timedelta(weeks=1), timedelta(days=7))
|
||
|
|
||
|
def test___init__02(self):
|
||
|
self.assertEqual(timedelta(days=1), timedelta(hours=24))
|
||
|
|
||
|
def test___init__03(self):
|
||
|
self.assertEqual(timedelta(hours=1), timedelta(minutes=60))
|
||
|
|
||
|
def test___init__04(self):
|
||
|
self.assertEqual(timedelta(minutes=1), timedelta(seconds=60))
|
||
|
|
||
|
def test___init__05(self):
|
||
|
self.assertEqual(timedelta(seconds=1), timedelta(milliseconds=1000))
|
||
|
|
||
|
def test___init__06(self):
|
||
|
self.assertEqual(timedelta(milliseconds=1), timedelta(microseconds=1000))
|
||
|
|
||
|
def test___init__07(self):
|
||
|
self.assertEqual(timedelta(weeks=1.0 / 7), timedelta(days=1))
|
||
|
|
||
|
def test___init__08(self):
|
||
|
self.assertEqual(timedelta(days=1.0 / 24), timedelta(hours=1))
|
||
|
|
||
|
def test___init__09(self):
|
||
|
self.assertEqual(timedelta(hours=1.0 / 60), timedelta(minutes=1))
|
||
|
|
||
|
def test___init__10(self):
|
||
|
self.assertEqual(timedelta(minutes=1.0 / 60), timedelta(seconds=1))
|
||
|
|
||
|
def test___init__11(self):
|
||
|
self.assertEqual(timedelta(seconds=0.001), timedelta(milliseconds=1))
|
||
|
|
||
|
def test___init__12(self):
|
||
|
self.assertEqual(timedelta(milliseconds=0.001), timedelta(microseconds=1))
|
||
|
|
||
|
def test___init__13(self):
|
||
|
self.assertEqual(td1h, eval_mod(td1hr))
|
||
|
|
||
|
def test___init__14(self):
|
||
|
self.assertEqual(td10h2m, eval_mod(td10h2mr))
|
||
|
|
||
|
def test___init__15(self):
|
||
|
self.assertEqual(tdn10h2m40s, eval_mod(tdn10h2m40sr))
|
||
|
|
||
|
def test___init__16(self):
|
||
|
self.assertEqual(td1h2m40s100us, eval_mod(td1h2m40s100usr))
|
||
|
|
||
|
@unittest.skipIf(STDLIB, "standard datetime differs")
|
||
|
def test___repr__00(self):
|
||
|
self.assertEqual(repr(td1h), td1hr)
|
||
|
|
||
|
@unittest.skipIf(STDLIB, "standard datetime differs")
|
||
|
def test___repr__01(self):
|
||
|
self.assertEqual(repr(td10h2m), td10h2mr)
|
||
|
|
||
|
@unittest.skipIf(STDLIB, "standard datetime differs")
|
||
|
def test___repr__02(self):
|
||
|
self.assertEqual(repr(tdn10h2m40s), tdn10h2m40sr)
|
||
|
|
||
|
@unittest.skipIf(STDLIB, "standard datetime differs")
|
||
|
def test___repr__03(self):
|
||
|
self.assertEqual(repr(td1h2m40s100us), td1h2m40s100usr)
|
||
|
|
||
|
def test___repr__04(self):
|
||
|
self.assertEqual(td1, eval_mod(repr(td1)))
|
||
|
|
||
|
def test_total_seconds00(self):
|
||
|
d = timedelta(days=365)
|
||
|
self.assertEqual(d.total_seconds(), 31536000.0)
|
||
|
|
||
|
def test_days00(self):
|
||
|
self.assertEqual(td1.days, 2)
|
||
|
|
||
|
def test_seconds00(self):
|
||
|
self.assertEqual(td1.seconds, 3)
|
||
|
|
||
|
def test_microseconds00(self):
|
||
|
self.assertEqual(td1.microseconds, 4)
|
||
|
|
||
|
def test___add__00(self):
|
||
|
self.assertEqual(a + b + c, timedelta(hours=7, minutes=6, seconds=10))
|
||
|
|
||
|
def test___add__01(self):
|
||
|
dt = a + datetime(2010, 1, 1, 12, 30)
|
||
|
self.assertEqual(dt, datetime(2010, 1, 1, 12 + 7, 30))
|
||
|
|
||
|
def test___sub__00(self):
|
||
|
self.assertEqual(a - b, timedelta(hours=6, minutes=60 - 6))
|
||
|
|
||
|
def test___neg__00(self):
|
||
|
self.assertEqual(-a, timedelta(hours=-7))
|
||
|
|
||
|
def test___neg__01(self):
|
||
|
self.assertEqual(-b, timedelta(hours=-1, minutes=54))
|
||
|
|
||
|
def test___neg__02(self):
|
||
|
self.assertEqual(-c, timedelta(hours=-1, minutes=59, seconds=50))
|
||
|
|
||
|
def test___pos__00(self):
|
||
|
self.assertEqual(+a, timedelta(hours=7))
|
||
|
|
||
|
def test___abs__00(self):
|
||
|
self.assertEqual(abs(a), a)
|
||
|
|
||
|
def test___abs__01(self):
|
||
|
self.assertEqual(abs(-a), a)
|
||
|
|
||
|
def test___mul__00(self):
|
||
|
self.assertEqual(a * 10, timedelta(hours=70))
|
||
|
|
||
|
def test___mul__01(self):
|
||
|
self.assertEqual(a * 10, 10 * a)
|
||
|
|
||
|
def test___mul__02(self):
|
||
|
self.assertEqual(b * 10, timedelta(minutes=60))
|
||
|
|
||
|
def test___mul__03(self):
|
||
|
self.assertEqual(10 * b, timedelta(minutes=60))
|
||
|
|
||
|
def test___mul__04(self):
|
||
|
self.assertEqual(c * 10, timedelta(seconds=100))
|
||
|
|
||
|
def test___mul__05(self):
|
||
|
self.assertEqual(10 * c, timedelta(seconds=100))
|
||
|
|
||
|
def test___mul__06(self):
|
||
|
self.assertEqual(a * -1, -a)
|
||
|
|
||
|
def test___mul__07(self):
|
||
|
self.assertEqual(b * -2, -b - b)
|
||
|
|
||
|
def test___mul__08(self):
|
||
|
self.assertEqual(c * -2, -c + -c)
|
||
|
|
||
|
def test___mul__09(self):
|
||
|
self.assertEqual(b * (60 * 24), (b * 60) * 24)
|
||
|
|
||
|
def test___mul__10(self):
|
||
|
self.assertEqual(b * (60 * 24), (60 * b) * 24)
|
||
|
|
||
|
def test___mul__11(self):
|
||
|
self.assertEqual(c * 6, timedelta(minutes=1))
|
||
|
|
||
|
def test___mul__12(self):
|
||
|
self.assertEqual(6 * c, timedelta(minutes=1))
|
||
|
|
||
|
def test___truediv__00(self):
|
||
|
self.assertEqual(a / 0.5, timedelta(hours=14))
|
||
|
|
||
|
def test___truediv__01(self):
|
||
|
self.assertEqual(b / 0.5, timedelta(minutes=12))
|
||
|
|
||
|
def test___truediv__02(self):
|
||
|
self.assertEqual(a / 7, timedelta(hours=1))
|
||
|
|
||
|
def test___truediv__03(self):
|
||
|
self.assertEqual(b / 6, timedelta(minutes=1))
|
||
|
|
||
|
def test___truediv__04(self):
|
||
|
self.assertEqual(c / 10, timedelta(seconds=1))
|
||
|
|
||
|
def test___truediv__05(self):
|
||
|
self.assertEqual(a / 10, timedelta(minutes=7 * 6))
|
||
|
|
||
|
def test___truediv__06(self):
|
||
|
self.assertEqual(a / 3600, timedelta(seconds=7))
|
||
|
|
||
|
def test___truediv__07(self):
|
||
|
self.assertEqual(a / a, 1.0)
|
||
|
|
||
|
def test___truediv__08(self):
|
||
|
t = timedelta(hours=1, minutes=24, seconds=19)
|
||
|
second = timedelta(seconds=1)
|
||
|
self.assertEqual(t / second, 5059.0)
|
||
|
|
||
|
def test___truediv__09(self):
|
||
|
t = timedelta(minutes=2, seconds=30)
|
||
|
minute = timedelta(minutes=1)
|
||
|
self.assertEqual(t / minute, 2.5)
|
||
|
|
||
|
def test___floordiv__00(self):
|
||
|
self.assertEqual(a // 7, timedelta(hours=1))
|
||
|
|
||
|
def test___floordiv__01(self):
|
||
|
self.assertEqual(b // 6, timedelta(minutes=1))
|
||
|
|
||
|
def test___floordiv__02(self):
|
||
|
self.assertEqual(c // 10, timedelta(seconds=1))
|
||
|
|
||
|
def test___floordiv__03(self):
|
||
|
self.assertEqual(a // 10, timedelta(minutes=7 * 6))
|
||
|
|
||
|
def test___floordiv__04(self):
|
||
|
self.assertEqual(a // 3600, timedelta(seconds=7))
|
||
|
|
||
|
def test___floordiv__05(self):
|
||
|
t = timedelta(hours=1, minutes=24, seconds=19)
|
||
|
second = timedelta(seconds=1)
|
||
|
self.assertEqual(t // second, 5059)
|
||
|
|
||
|
def test___floordiv__06(self):
|
||
|
t = timedelta(minutes=2, seconds=30)
|
||
|
minute = timedelta(minutes=1)
|
||
|
self.assertEqual(t // minute, 2)
|
||
|
|
||
|
def test___mod__00(self):
|
||
|
t = timedelta(minutes=2, seconds=30)
|
||
|
r = t % timedelta(minutes=1)
|
||
|
self.assertEqual(r, timedelta(seconds=30))
|
||
|
|
||
|
def test___mod__01(self):
|
||
|
t = timedelta(minutes=-2, seconds=30)
|
||
|
r = t % timedelta(minutes=1)
|
||
|
self.assertEqual(r, timedelta(seconds=30))
|
||
|
|
||
|
def test___divmod__00(self):
|
||
|
t = timedelta(minutes=2, seconds=30)
|
||
|
q, r = divmod(t, timedelta(minutes=1))
|
||
|
self.assertEqual(q, 2)
|
||
|
self.assertEqual(r, timedelta(seconds=30))
|
||
|
|
||
|
def test___divmod__01(self):
|
||
|
t = timedelta(minutes=-2, seconds=30)
|
||
|
q, r = divmod(t, timedelta(minutes=1))
|
||
|
self.assertEqual(q, -2)
|
||
|
self.assertEqual(r, timedelta(seconds=30))
|
||
|
|
||
|
def test___eq__00(self):
|
||
|
self.assertEqual(td1, td2)
|
||
|
|
||
|
def test___eq__01(self):
|
||
|
self.assertTrue(not td1 != td2)
|
||
|
|
||
|
def test___eq__02(self):
|
||
|
self.assertEqual(timedelta(hours=6, minutes=60), a)
|
||
|
|
||
|
def test___eq__03(self):
|
||
|
self.assertEqual(timedelta(seconds=60 * 6), b)
|
||
|
|
||
|
def test___eq__04(self):
|
||
|
self.assertTrue(not td1 == td3)
|
||
|
|
||
|
def test___eq__05(self):
|
||
|
self.assertTrue(td1 != td3)
|
||
|
|
||
|
def test___eq__06(self):
|
||
|
self.assertTrue(td3 != td1)
|
||
|
|
||
|
def test___eq__07(self):
|
||
|
self.assertTrue(not td3 == td1)
|
||
|
|
||
|
def test___le__00(self):
|
||
|
self.assertTrue(td1 <= td2)
|
||
|
|
||
|
def test___le__01(self):
|
||
|
self.assertTrue(td1 <= td3)
|
||
|
|
||
|
def test___le__02(self):
|
||
|
self.assertTrue(not td3 <= td1)
|
||
|
|
||
|
def test___lt__00(self):
|
||
|
self.assertTrue(not td1 < td2)
|
||
|
|
||
|
def test___lt__01(self):
|
||
|
self.assertTrue(td1 < td3)
|
||
|
|
||
|
def test___lt__02(self):
|
||
|
self.assertTrue(not td3 < td1)
|
||
|
|
||
|
def test___ge__00(self):
|
||
|
self.assertTrue(td1 >= td2)
|
||
|
|
||
|
def test___ge__01(self):
|
||
|
self.assertTrue(td3 >= td1)
|
||
|
|
||
|
def test___ge__02(self):
|
||
|
self.assertTrue(not td1 >= td3)
|
||
|
|
||
|
def test___gt__00(self):
|
||
|
self.assertTrue(not td1 > td2)
|
||
|
|
||
|
def test___gt__01(self):
|
||
|
self.assertTrue(td3 > td1)
|
||
|
|
||
|
def test___gt__02(self):
|
||
|
self.assertTrue(not td1 > td3)
|
||
|
|
||
|
def test___bool__00(self):
|
||
|
self.assertTrue(timedelta(hours=1))
|
||
|
|
||
|
def test___bool__01(self):
|
||
|
self.assertTrue(timedelta(minutes=1))
|
||
|
|
||
|
def test___bool__02(self):
|
||
|
self.assertTrue(timedelta(seconds=1))
|
||
|
|
||
|
def test___bool__03(self):
|
||
|
self.assertTrue(not td0)
|
||
|
|
||
|
def test___str__00(self):
|
||
|
self.assertEqual(str(timedelta(days=1)), "1 day, 0:00:00")
|
||
|
|
||
|
def test___str__01(self):
|
||
|
self.assertEqual(str(timedelta(days=-1)), "-1 day, 0:00:00")
|
||
|
|
||
|
def test___str__02(self):
|
||
|
self.assertEqual(str(timedelta(days=2)), "2 days, 0:00:00")
|
||
|
|
||
|
def test___str__03(self):
|
||
|
self.assertEqual(str(timedelta(days=-2)), "-2 days, 0:00:00")
|
||
|
|
||
|
def test___str__04(self):
|
||
|
self.assertEqual(str(timedelta(hours=12, minutes=58, seconds=59)), "12:58:59")
|
||
|
|
||
|
def test___str__05(self):
|
||
|
self.assertEqual(str(timedelta(hours=2, minutes=3, seconds=4)), "2:03:04")
|
||
|
|
||
|
def test___hash__00(self):
|
||
|
self.assertEqual(td0, td4)
|
||
|
self.assertEqual(hash(td0), hash(td4))
|
||
|
|
||
|
def test___hash__01(self):
|
||
|
tt0 = td0 + timedelta(weeks=7)
|
||
|
tt4 = td4 + timedelta(days=7 * 7)
|
||
|
self.assertEqual(hash(tt0), hash(tt4))
|
||
|
|
||
|
def test___hash__02(self):
|
||
|
d = {td0: 1}
|
||
|
d[td4] = 2
|
||
|
self.assertEqual(len(d), 1)
|
||
|
self.assertEqual(d[td0], 2)
|
||
|
|
||
|
def test_constant00(self):
|
||
|
self.assertIsInstance(timedelta.min, timedelta)
|
||
|
self.assertIsInstance(timedelta.max, timedelta)
|
||
|
self.assertIsInstance(timedelta.resolution, timedelta)
|
||
|
self.assertTrue(timedelta.max > timedelta.min)
|
||
|
|
||
|
def test_constant01(self):
|
||
|
self.assertEqual(timedelta.min, timedelta(days=-999_999_999))
|
||
|
|
||
|
def test_constant02(self):
|
||
|
self.assertEqual(
|
||
|
timedelta.max,
|
||
|
timedelta(days=999_999_999, seconds=24 * 3600 - 1, microseconds=10**6 - 1),
|
||
|
)
|
||
|
|
||
|
def test_constant03(self):
|
||
|
self.assertEqual(timedelta.resolution, timedelta(microseconds=1))
|
||
|
|
||
|
def test_computation00(self):
|
||
|
self.assertEqual((3 * us) * 0.5, 2 * us)
|
||
|
|
||
|
def test_computation01(self):
|
||
|
self.assertEqual((5 * us) * 0.5, 2 * us)
|
||
|
|
||
|
def test_computation02(self):
|
||
|
self.assertEqual(0.5 * (3 * us), 2 * us)
|
||
|
|
||
|
def test_computation03(self):
|
||
|
self.assertEqual(0.5 * (5 * us), 2 * us)
|
||
|
|
||
|
def test_computation04(self):
|
||
|
self.assertEqual((-3 * us) * 0.5, -2 * us)
|
||
|
|
||
|
def test_computation05(self):
|
||
|
self.assertEqual((-5 * us) * 0.5, -2 * us)
|
||
|
|
||
|
def test_computation06(self):
|
||
|
self.assertEqual((3 * us) / 2, 2 * us)
|
||
|
|
||
|
def test_computation07(self):
|
||
|
self.assertEqual((5 * us) / 2, 2 * us)
|
||
|
|
||
|
def test_computation08(self):
|
||
|
self.assertEqual((-3 * us) / 2.0, -2 * us)
|
||
|
|
||
|
def test_computation09(self):
|
||
|
self.assertEqual((-5 * us) / 2.0, -2 * us)
|
||
|
|
||
|
def test_computation10(self):
|
||
|
self.assertEqual((3 * us) / -2, -2 * us)
|
||
|
|
||
|
def test_computation11(self):
|
||
|
self.assertEqual((5 * us) / -2, -2 * us)
|
||
|
|
||
|
def test_computation12(self):
|
||
|
self.assertEqual((3 * us) / -2.0, -2 * us)
|
||
|
|
||
|
def test_computation13(self):
|
||
|
self.assertEqual((5 * us) / -2.0, -2 * us)
|
||
|
|
||
|
def test_computation14(self):
|
||
|
for i in range(-10, 10):
|
||
|
# with self.subTest(i=i): not supported by Micropython
|
||
|
self.assertEqual((i * us / 3) // us, round(i / 3))
|
||
|
|
||
|
def test_computation15(self):
|
||
|
for i in range(-10, 10):
|
||
|
# with self.subTest(i=i): not supported by Micropython
|
||
|
self.assertEqual((i * us / -3) // us, round(i / -3))
|
||
|
|
||
|
def test_carries00(self):
|
||
|
td1 = timedelta(
|
||
|
days=100,
|
||
|
weeks=-7,
|
||
|
hours=-24 * (100 - 49),
|
||
|
minutes=-3,
|
||
|
seconds=3 * 60 + 1,
|
||
|
)
|
||
|
td2 = timedelta(seconds=1)
|
||
|
self.assertEqual(td1, td2)
|
||
|
|
||
|
def test_resolution00(self):
|
||
|
self.assertIsInstance(timedelta.min, timedelta)
|
||
|
|
||
|
def test_resolution01(self):
|
||
|
self.assertIsInstance(timedelta.max, timedelta)
|
||
|
|
||
|
def test_resolution02(self):
|
||
|
self.assertIsInstance(timedelta.resolution, timedelta)
|
||
|
|
||
|
def test_resolution03(self):
|
||
|
self.assertTrue(timedelta.max > timedelta.min)
|
||
|
|
||
|
def test_resolution04(self):
|
||
|
self.assertEqual(timedelta.resolution, timedelta(microseconds=1))
|
||
|
|
||
|
@unittest.skipIf(STDLIB, "standard timedelta has no tuple()")
|
||
|
def test_tuple00(self):
|
||
|
self.assertEqual(td1.tuple(), (2, 0, 0, 3, 4))
|
||
|
|
||
|
@unittest.skipIf(STDLIB, "standard timedelta has no tuple()")
|
||
|
def test_tuple01(self):
|
||
|
self.assertEqual(td1h2m40s100us.tuple(), (0, 1, 2, 40, 100))
|
||
|
|
||
|
|
||
|
### timezone #################################################################
|
||
|
|
||
|
|
||
|
class Cet(tzinfo):
|
||
|
# Central European Time (see https://en.wikipedia.org/wiki/Summer_time_in_Europe)
|
||
|
|
||
|
def utcoffset(self, dt):
|
||
|
h = 2 if self.isdst(dt)[0] else 1
|
||
|
return timedelta(hours=h)
|
||
|
|
||
|
def dst(self, dt):
|
||
|
h = 1 if self.isdst(dt)[0] else 0
|
||
|
return timedelta(hours=h)
|
||
|
|
||
|
def tzname(self, dt):
|
||
|
return "CEST" if self.isdst(dt)[0] else "CET"
|
||
|
|
||
|
def fromutc(self, dt):
|
||
|
assert dt.tzinfo is self
|
||
|
isdst, fold = self.isdst(dt, utc=True)
|
||
|
h = 2 if isdst else 1
|
||
|
dt += timedelta(hours=h)
|
||
|
dt = dt.replace(fold=fold)
|
||
|
return dt
|
||
|
|
||
|
def isdst(self, dt, utc=False):
|
||
|
if dt is None:
|
||
|
return False, None
|
||
|
|
||
|
year = dt.year
|
||
|
if not 2000 <= year < 2100:
|
||
|
# Formulas below are valid in the range [2000; 2100)
|
||
|
raise ValueError
|
||
|
|
||
|
hour = 1 if utc else 3
|
||
|
day = 31 - (5 * year // 4 + 4) % 7 # last Sunday of March
|
||
|
beg = datetime(year, 3, day, hour)
|
||
|
day = 31 - (5 * year // 4 + 1) % 7 # last Sunday of October
|
||
|
end = datetime(year, 10, day, hour)
|
||
|
|
||
|
dt = dt.replace(tzinfo=None)
|
||
|
if utc:
|
||
|
fold = 1 if end <= dt < end + timedelta(hours=1) else 0
|
||
|
else:
|
||
|
fold = dt.fold
|
||
|
isdst = beg <= dt < end
|
||
|
return isdst, fold
|
||
|
|
||
|
def __repr__(self):
|
||
|
return "Cet()"
|
||
|
|
||
|
def __str__(self):
|
||
|
return self.tzname(None)
|
||
|
|
||
|
def __eq__(self, other):
|
||
|
return repr(self) == repr(other)
|
||
|
|
||
|
def __hash__(self):
|
||
|
return hash(repr(self))
|
||
|
|
||
|
|
||
|
class USTimeZone(tzinfo):
|
||
|
DSTSTART = datetime(1, 3, 8, 2)
|
||
|
DSTEND = datetime(1, 11, 1, 2)
|
||
|
ZERO = timedelta(0)
|
||
|
HOUR = timedelta(hours=1)
|
||
|
|
||
|
def __init__(self, hours, reprname, stdname, dstname):
|
||
|
self.stdoffset = timedelta(hours=hours)
|
||
|
self.reprname = reprname
|
||
|
self.stdname = stdname
|
||
|
self.dstname = dstname
|
||
|
|
||
|
def __repr__(self):
|
||
|
return self.reprname
|
||
|
|
||
|
def tzname(self, dt):
|
||
|
if self.dst(dt):
|
||
|
return self.dstname
|
||
|
else:
|
||
|
return self.stdname
|
||
|
|
||
|
def utcoffset(self, dt):
|
||
|
return self.stdoffset + self.dst(dt)
|
||
|
|
||
|
def dst(self, dt):
|
||
|
if dt is None or dt.tzinfo is None:
|
||
|
return self.ZERO
|
||
|
assert dt.tzinfo is self
|
||
|
start, end = USTimeZone.us_dst_range(dt.year)
|
||
|
dt = dt.replace(tzinfo=None)
|
||
|
if start + self.HOUR <= dt < end - self.HOUR:
|
||
|
return self.HOUR
|
||
|
if end - self.HOUR <= dt < end:
|
||
|
return self.ZERO if dt.fold else self.HOUR
|
||
|
if start <= dt < start + self.HOUR:
|
||
|
return self.HOUR if dt.fold else self.ZERO
|
||
|
return self.ZERO
|
||
|
|
||
|
def fromutc(self, dt):
|
||
|
assert dt.tzinfo is self
|
||
|
start, end = USTimeZone.us_dst_range(dt.year)
|
||
|
start = start.replace(tzinfo=self)
|
||
|
end = end.replace(tzinfo=self)
|
||
|
std_time = dt + self.stdoffset
|
||
|
dst_time = std_time + self.HOUR
|
||
|
if end <= dst_time < end + self.HOUR:
|
||
|
return std_time.replace(fold=1)
|
||
|
if std_time < start or dst_time >= end:
|
||
|
return std_time
|
||
|
if start <= std_time < end - self.HOUR:
|
||
|
return dst_time
|
||
|
|
||
|
@staticmethod
|
||
|
def us_dst_range(year):
|
||
|
start = first_sunday_on_or_after(USTimeZone.DSTSTART.replace(year=year))
|
||
|
end = first_sunday_on_or_after(USTimeZone.DSTEND.replace(year=year))
|
||
|
return start, end
|
||
|
|
||
|
@staticmethod
|
||
|
def first_sunday_on_or_after(dt):
|
||
|
days_to_go = 6 - dt.weekday()
|
||
|
if days_to_go:
|
||
|
dt += timedelta(days_to_go)
|
||
|
return dt
|
||
|
|
||
|
|
||
|
class LocalTz:
|
||
|
def __init__(self, tz):
|
||
|
self.tz = tz
|
||
|
self._old = None
|
||
|
|
||
|
@staticmethod
|
||
|
def _set(tz):
|
||
|
if hasattr(mod_time, "tzset"): # Python
|
||
|
if tz:
|
||
|
os.environ["TZ"] = tz
|
||
|
else:
|
||
|
del os.environ["TZ"]
|
||
|
mod_time.tzset()
|
||
|
else:
|
||
|
if tz:
|
||
|
os.putenv("TZ", tz)
|
||
|
else:
|
||
|
os.unsetenv("TZ")
|
||
|
|
||
|
def set(self):
|
||
|
self._old = os.getenv("TZ")
|
||
|
LocalTz._set(self.tz)
|
||
|
|
||
|
def unset(self):
|
||
|
LocalTz._set(self._old)
|
||
|
self._old = None
|
||
|
|
||
|
def __enter__(self):
|
||
|
self.set()
|
||
|
|
||
|
def __exit__(self, typ, value, trace):
|
||
|
self.unset()
|
||
|
|
||
|
|
||
|
tz_acdt = timezone(timedelta(hours=9.5), "ACDT")
|
||
|
tz_est = timezone(-timedelta(hours=5), "EST")
|
||
|
tz1 = timezone(timedelta(hours=-1))
|
||
|
tz2 = Cet()
|
||
|
tz3 = USTimeZone(-5, "Eastern", "EST", "EDT")
|
||
|
|
||
|
|
||
|
class Test1TimeZone(unittest.TestCase):
|
||
|
def test___init__00(self):
|
||
|
self.assertEqual(str(tz_acdt), "ACDT")
|
||
|
self.assertEqual(str(tz_acdt), tz_acdt.tzname(None))
|
||
|
|
||
|
def test___init__01(self):
|
||
|
self.assertEqual(str(tz_est), "EST")
|
||
|
self.assertEqual(str(tz_est), tz_est.tzname(None))
|
||
|
|
||
|
def test___init__02(self):
|
||
|
self.assertEqual(str(tz1), "UTC-01:00")
|
||
|
self.assertEqual(str(tz1), tz1.tzname(None))
|
||
|
|
||
|
def test___init__03(self):
|
||
|
self.assertEqual(str(tz2), "CET")
|
||
|
self.assertEqual(str(tz2), tz2.tzname(None))
|
||
|
|
||
|
def test___init__04(self):
|
||
|
offset = timedelta(hours=-24, microseconds=1)
|
||
|
tz = timezone(offset)
|
||
|
self.assertIsInstance(tz, timezone)
|
||
|
|
||
|
def test___init__05(self):
|
||
|
offset = timedelta(hours=24, microseconds=-1)
|
||
|
tz = timezone(offset)
|
||
|
self.assertIsInstance(tz, timezone)
|
||
|
|
||
|
def test___init__06(self):
|
||
|
offset = timedelta(hours=-24)
|
||
|
self.assertRaises(ValueError, timezone, offset)
|
||
|
|
||
|
def test___init__07(self):
|
||
|
offset = timedelta(hours=24)
|
||
|
self.assertRaises(ValueError, timezone, offset)
|
||
|
|
||
|
def test___repr__00(self):
|
||
|
self.assertEqual(tz1, eval_mod(repr(tz1)))
|
||
|
|
||
|
def test___eq__00(self):
|
||
|
self.assertEqual(timezone(timedelta(hours=1)), timezone(timedelta(hours=1)))
|
||
|
|
||
|
def test___eq__01(self):
|
||
|
self.assertNotEqual(timezone(timedelta(hours=1)), timezone(timedelta(hours=2)))
|
||
|
|
||
|
def test___eq__02(self):
|
||
|
self.assertEqual(timezone(timedelta(hours=-5)), timezone(timedelta(hours=-5), "EST"))
|
||
|
|
||
|
def test_utcoffset00(self):
|
||
|
self.assertEqual(str(tz2.utcoffset(None)), "1:00:00")
|
||
|
|
||
|
def test_utcoffset01(self):
|
||
|
self.assertEqual(str(tz2.utcoffset(datetime(2010, 3, 27, 12))), "1:00:00")
|
||
|
|
||
|
def test_utcoffset02(self):
|
||
|
self.assertEqual(str(tz2.utcoffset(datetime(2010, 3, 28, 12))), "2:00:00")
|
||
|
|
||
|
def test_utcoffset03(self):
|
||
|
self.assertEqual(str(tz2.utcoffset(datetime(2010, 10, 30, 12))), "2:00:00")
|
||
|
|
||
|
def test_utcoffset04(self):
|
||
|
self.assertEqual(str(tz2.utcoffset(datetime(2010, 10, 31, 12))), "1:00:00")
|
||
|
|
||
|
def test_tzname00(self):
|
||
|
self.assertEqual(tz2.tzname(datetime(2011, 1, 1)), "CET")
|
||
|
|
||
|
def test_tzname01(self):
|
||
|
self.assertEqual(tz2.tzname(datetime(2011, 8, 1)), "CEST")
|
||
|
|
||
|
def test_utc00(self):
|
||
|
self.assertEqual(timezone.utc.utcoffset(None), td0)
|
||
|
|
||
|
def test_fromutc00(self):
|
||
|
utc = EPOCH.replace(tzinfo=tz_acdt)
|
||
|
self.assertEqual(tz_acdt.fromutc(utc), utc + 9.5 * td1h)
|
||
|
|
||
|
def test_fromutc01(self):
|
||
|
utc = EPOCH.replace(tzinfo=tz_est)
|
||
|
self.assertEqual(tz_est.fromutc(utc), utc + 5 * -td1h)
|
||
|
|
||
|
def test_fromutc02(self):
|
||
|
utc = datetime(2010, 3, 28, 0, 59, 59, 999_999, tz2)
|
||
|
dt = tz2.fromutc(utc)
|
||
|
self.assertEqual(dt, utc + td1h)
|
||
|
self.assertFalse(dt.fold)
|
||
|
|
||
|
def test_fromutc03(self):
|
||
|
utc = datetime(2010, 3, 28, 1, 0, 0, 0, tz2)
|
||
|
dt = tz2.fromutc(utc)
|
||
|
self.assertEqual(dt, utc + 2 * td1h)
|
||
|
self.assertFalse(dt.fold)
|
||
|
|
||
|
def test_fromutc04(self):
|
||
|
utc = datetime(2010, 10, 31, 0, 59, 59, 999_999, tz2)
|
||
|
dt = tz2.fromutc(utc)
|
||
|
self.assertEqual(dt, utc + 2 * td1h)
|
||
|
self.assertFalse(dt.fold)
|
||
|
|
||
|
def test_fromutc05(self):
|
||
|
utc = datetime(2010, 10, 31, 1, 0, 0, 0, tz2)
|
||
|
dt = tz2.fromutc(utc)
|
||
|
self.assertEqual(dt, utc + td1h)
|
||
|
self.assertTrue(dt.fold)
|
||
|
|
||
|
def test_fromutc06(self):
|
||
|
dt1 = tz2.fromutc(datetime(2010, 10, 31, 0, 0, 0, 0, tz2))
|
||
|
dt2 = tz2.fromutc(datetime(2010, 10, 31, 1, 0, 0, 0, tz2))
|
||
|
self.assertEqual(dt1, dt2)
|
||
|
self.assertNotEqual(dt1.fold, dt2.fold)
|
||
|
|
||
|
def test_aware_datetime00(self):
|
||
|
t = datetime(1, 1, 1)
|
||
|
self.assertEqual(tz1.tzname(t), t.replace(tzinfo=tz1).tzname())
|
||
|
|
||
|
def test_aware_datetime01(self):
|
||
|
t = datetime(1, 1, 1)
|
||
|
self.assertEqual(tz1.utcoffset(t), t.replace(tzinfo=tz1).utcoffset())
|
||
|
|
||
|
def test_aware_datetime02(self):
|
||
|
t = datetime(1, 1, 1)
|
||
|
self.assertEqual(tz1.dst(t), t.replace(tzinfo=tz1).dst())
|
||
|
|
||
|
def test_offset_boundaries00(self):
|
||
|
td = timedelta(hours=23, minutes=59, seconds=59, microseconds=999999)
|
||
|
for i in (1, -1):
|
||
|
self.assertIsInstance(timezone(i * td), timezone)
|
||
|
|
||
|
def test_offset_boundaries01(self):
|
||
|
td = timedelta(hours=24)
|
||
|
for i in (1, -1):
|
||
|
with self.assertRaises(ValueError):
|
||
|
timezone(i * td)
|
||
|
|
||
|
|
||
|
### date #####################################################################
|
||
|
|
||
|
d1 = date(2002, 1, 31)
|
||
|
d1r = "datetime.date(0, 0, 730881)"
|
||
|
d2 = date(1956, 1, 31)
|
||
|
d2d1s = (46 * 365 + len(range(1956, 2002, 4))) * 24 * 60 * 60
|
||
|
d3 = date(2002, 3, 1)
|
||
|
d4 = date(2002, 3, 2)
|
||
|
d5 = date(2002, 1, 31)
|
||
|
|
||
|
hour = timedelta(hours=1)
|
||
|
day = timedelta(days=1)
|
||
|
week = timedelta(weeks=1)
|
||
|
max_days = MAXYEAR * 365 + MAXYEAR // 4 - MAXYEAR // 100 + MAXYEAR // 400
|
||
|
|
||
|
|
||
|
class Test2Date(unittest.TestCase):
|
||
|
def test___init__00(self):
|
||
|
self.assertEqual(d1.year, 2002)
|
||
|
self.assertEqual(d1.month, 1)
|
||
|
self.assertEqual(d1.day, 31)
|
||
|
|
||
|
@unittest.skipIf(STDLIB, "not supported by standard datetime")
|
||
|
def test___init__01(self):
|
||
|
date(0, 0, 1)
|
||
|
|
||
|
@unittest.skipIf(STDLIB, "not supported by standard datetime")
|
||
|
def test___init__02(self):
|
||
|
date(0, 0, max_days)
|
||
|
|
||
|
def test___init__03(self):
|
||
|
datetime(2000, 2, 29)
|
||
|
|
||
|
def test___init__04(self):
|
||
|
datetime(2004, 2, 29)
|
||
|
|
||
|
def test___init__05(self):
|
||
|
datetime(2400, 2, 29)
|
||
|
|
||
|
def test___init__06(self):
|
||
|
self.assertRaises(ValueError, datetime, 2000, 2, 30)
|
||
|
|
||
|
def test___init__07(self):
|
||
|
self.assertRaises(ValueError, datetime, 2001, 2, 29)
|
||
|
|
||
|
def test___init__08(self):
|
||
|
self.assertRaises(ValueError, datetime, 2100, 2, 29)
|
||
|
|
||
|
def test___init__09(self):
|
||
|
self.assertRaises(ValueError, datetime, 1900, 2, 29)
|
||
|
|
||
|
def test___init__10(self):
|
||
|
self.assertRaises(ValueError, date, MINYEAR - 1, 1, 1)
|
||
|
self.assertRaises(ValueError, date, MINYEAR, 0, 1)
|
||
|
self.assertRaises(ValueError, date, MINYEAR, 1, 0)
|
||
|
|
||
|
def test___init__11(self):
|
||
|
self.assertRaises(ValueError, date, MAXYEAR + 1, 12, 31)
|
||
|
self.assertRaises(ValueError, date, MAXYEAR, 13, 31)
|
||
|
self.assertRaises(ValueError, date, MAXYEAR, 12, 32)
|
||
|
|
||
|
def test___init__12(self):
|
||
|
self.assertRaises(ValueError, date, 1, 2, 29)
|
||
|
self.assertRaises(ValueError, date, 1, 4, 31)
|
||
|
self.assertRaises(ValueError, date, 1, 6, 31)
|
||
|
self.assertRaises(ValueError, date, 1, 9, 31)
|
||
|
self.assertRaises(ValueError, date, 1, 11, 31)
|
||
|
|
||
|
def test_fromtimestamp00(self):
|
||
|
with LocalTz("UTC"):
|
||
|
d = date.fromtimestamp(1012435200)
|
||
|
self.assertEqual(d, d1)
|
||
|
|
||
|
def test_fromtimestamp01(self):
|
||
|
with LocalTz("UTC"):
|
||
|
d = date.fromtimestamp(1012435200 + 1)
|
||
|
self.assertEqual(d, d1)
|
||
|
|
||
|
def test_fromtimestamp02(self):
|
||
|
with LocalTz("UTC"):
|
||
|
d = date.fromtimestamp(1012435200 - 1)
|
||
|
self.assertEqual(d, d1 - timedelta(days=1))
|
||
|
|
||
|
def test_fromtimestamp03(self):
|
||
|
with LocalTz("Europe/Rome"):
|
||
|
d = date.fromtimestamp(1012435200 - 3601)
|
||
|
self.assertEqual(d, d1 - timedelta(days=1))
|
||
|
|
||
|
def test_today00(self):
|
||
|
tm = mod_time.localtime()[:3]
|
||
|
dt = date.today()
|
||
|
dd = (dt.year, dt.month, dt.day)
|
||
|
self.assertEqual(tm, dd)
|
||
|
|
||
|
def test_fromordinal00(self):
|
||
|
self.assertEqual(date.fromordinal(1), date(1, 1, 1))
|
||
|
|
||
|
def test_fromordinal01(self):
|
||
|
self.assertEqual(date.fromordinal(max_days), date(MAXYEAR, 12, 31))
|
||
|
|
||
|
def test_fromisoformat00(self):
|
||
|
self.assertEqual(datetime.fromisoformat("1975-08-10"), datetime(1975, 8, 10))
|
||
|
|
||
|
def test_year00(self):
|
||
|
self.assertEqual(d1.year, 2002)
|
||
|
|
||
|
def test_year01(self):
|
||
|
self.assertEqual(d2.year, 1956)
|
||
|
|
||
|
def test_month00(self):
|
||
|
self.assertEqual(d1.month, 1)
|
||
|
|
||
|
def test_month01(self):
|
||
|
self.assertEqual(d4.month, 3)
|
||
|
|
||
|
def test_day00(self):
|
||
|
self.assertEqual(d1.day, 31)
|
||
|
|
||
|
def test_day01(self):
|
||
|
self.assertEqual(d4.day, 2)
|
||
|
|
||
|
def test_toordinal00(self):
|
||
|
self.assertEqual(date(1, 1, 1).toordinal(), 1)
|
||
|
|
||
|
def test_toordinal01(self):
|
||
|
self.assertEqual(date(MAXYEAR, 12, 31).toordinal(), max_days)
|
||
|
|
||
|
def test_timetuple00(self):
|
||
|
self.assertEqual(d1.timetuple()[:8], (2002, 1, 31, 0, 0, 0, 3, 31))
|
||
|
|
||
|
def test_timetuple01(self):
|
||
|
self.assertEqual(d3.timetuple()[:8], (2002, 3, 1, 0, 0, 0, 4, 60))
|
||
|
|
||
|
def test_replace00(self):
|
||
|
self.assertEqual(d1.replace(), d1)
|
||
|
|
||
|
def test_replace01(self):
|
||
|
self.assertEqual(d1.replace(year=2001), date(2001, 1, 31))
|
||
|
|
||
|
def test_replace02(self):
|
||
|
self.assertEqual(d1.replace(month=5), date(2002, 5, 31))
|
||
|
|
||
|
def test_replace03(self):
|
||
|
self.assertEqual(d1.replace(day=16), date(2002, 1, 16))
|
||
|
|
||
|
def test___add__00(self):
|
||
|
self.assertEqual(d4 + hour, d4)
|
||
|
|
||
|
def test___add__01(self):
|
||
|
self.assertEqual(d4 + day, date(2002, 3, 3))
|
||
|
|
||
|
def test___add__02(self):
|
||
|
self.assertEqual(d4 + week, date(2002, 3, 9))
|
||
|
|
||
|
def test___add__03(self):
|
||
|
self.assertEqual(d4 + 52 * week, date(2003, 3, 1))
|
||
|
|
||
|
def test___add__04(self):
|
||
|
self.assertEqual(d4 + -hour, date(2002, 3, 1))
|
||
|
|
||
|
def test___add__05(self):
|
||
|
self.assertEqual(d5 + -day, date(2002, 1, 30))
|
||
|
|
||
|
def test___add__06(self):
|
||
|
self.assertEqual(d4 + -week, date(2002, 2, 23))
|
||
|
|
||
|
def test___sub__00(self):
|
||
|
d = d1 - d2
|
||
|
self.assertEqual(d.total_seconds(), d2d1s)
|
||
|
|
||
|
def test___sub__01(self):
|
||
|
self.assertEqual(d4 - hour, d4)
|
||
|
|
||
|
def test___sub__02(self):
|
||
|
self.assertEqual(d4 - day, date(2002, 3, 1))
|
||
|
|
||
|
def test___sub__03(self):
|
||
|
self.assertEqual(d4 - week, date(2002, 2, 23))
|
||
|
|
||
|
def test___sub__04(self):
|
||
|
self.assertEqual(d4 - 52 * week, date(2001, 3, 3))
|
||
|
|
||
|
def test___sub__05(self):
|
||
|
self.assertEqual(d4 - -hour, date(2002, 3, 3))
|
||
|
|
||
|
def test___sub__06(self):
|
||
|
self.assertEqual(d4 - -day, date(2002, 3, 3))
|
||
|
|
||
|
def test___sub__07(self):
|
||
|
self.assertEqual(d4 - -week, date(2002, 3, 9))
|
||
|
|
||
|
def test___eq__00(self):
|
||
|
self.assertEqual(d1, d5)
|
||
|
|
||
|
def test___eq__01(self):
|
||
|
self.assertFalse(d1 != d5)
|
||
|
|
||
|
def test___eq__02(self):
|
||
|
self.assertTrue(d2 != d5)
|
||
|
|
||
|
def test___eq__03(self):
|
||
|
self.assertTrue(d5 != d2)
|
||
|
|
||
|
def test___eq__04(self):
|
||
|
self.assertFalse(d2 == d5)
|
||
|
|
||
|
def test___eq__05(self):
|
||
|
self.assertFalse(d5 == d2)
|
||
|
|
||
|
def test___eq__06(self):
|
||
|
self.assertFalse(d1 == None)
|
||
|
|
||
|
def test___eq__07(self):
|
||
|
self.assertTrue(d1 != None)
|
||
|
|
||
|
def test___le__00(self):
|
||
|
self.assertTrue(d1 <= d5)
|
||
|
|
||
|
def test___le__01(self):
|
||
|
self.assertTrue(d2 <= d5)
|
||
|
|
||
|
def test___le__02(self):
|
||
|
self.assertFalse(d5 <= d2)
|
||
|
|
||
|
def test___ge__00(self):
|
||
|
self.assertTrue(d1 >= d5)
|
||
|
|
||
|
def test___ge__01(self):
|
||
|
self.assertTrue(d5 >= d2)
|
||
|
|
||
|
def test___ge__02(self):
|
||
|
self.assertFalse(d2 >= d5)
|
||
|
|
||
|
def test___lt__00(self):
|
||
|
self.assertFalse(d1 < d5)
|
||
|
|
||
|
def test___lt__01(self):
|
||
|
self.assertTrue(d2 < d5)
|
||
|
|
||
|
def test___lt__02(self):
|
||
|
self.assertFalse(d5 < d2)
|
||
|
|
||
|
def test___gt__00(self):
|
||
|
self.assertFalse(d1 > d5)
|
||
|
|
||
|
def test___gt__01(self):
|
||
|
self.assertTrue(d5 > d2)
|
||
|
|
||
|
def test___gt__02(self):
|
||
|
self.assertFalse(d2 > d5)
|
||
|
|
||
|
def test_weekday00(self):
|
||
|
for i in range(7):
|
||
|
# March 4, 2002 is a Monday
|
||
|
self.assertEqual(datetime(2002, 3, 4 + i).weekday(), i)
|
||
|
# January 2, 1956 is a Monday
|
||
|
self.assertEqual(datetime(1956, 1, 2 + i).weekday(), i)
|
||
|
|
||
|
def test_isoweekday00(self):
|
||
|
for i in range(7):
|
||
|
self.assertEqual(datetime(2002, 3, 4 + i).isoweekday(), i + 1)
|
||
|
self.assertEqual(datetime(1956, 1, 2 + i).isoweekday(), i + 1)
|
||
|
|
||
|
def test_isoformat00(self):
|
||
|
self.assertEqual(d1.isoformat(), "2002-01-31")
|
||
|
|
||
|
@unittest.skipIf(STDLIB, "standard datetime differs")
|
||
|
def test___repr__00(self):
|
||
|
self.assertEqual(repr(d1), d1r)
|
||
|
|
||
|
def test___repr__01(self):
|
||
|
self.assertEqual(d1, eval_mod(repr(d1)))
|
||
|
|
||
|
def test___hash__00(self):
|
||
|
self.assertEqual(d1, d5)
|
||
|
self.assertEqual(hash(d1), hash(d5))
|
||
|
|
||
|
def test___hash__01(self):
|
||
|
dd1 = d1 + timedelta(weeks=7)
|
||
|
dd5 = d5 + timedelta(days=7 * 7)
|
||
|
self.assertEqual(hash(dd1), hash(dd5))
|
||
|
|
||
|
def test___hash__02(self):
|
||
|
d = {d1: 1}
|
||
|
d[d5] = 2
|
||
|
self.assertEqual(len(d), 1)
|
||
|
self.assertEqual(d[d1], 2)
|
||
|
|
||
|
|
||
|
### time #####################################################################
|
||
|
|
||
|
t1 = time(18, 45, 3, 1234)
|
||
|
t1r = "datetime.time(microsecond=67503001234, tzinfo=None, fold=0)"
|
||
|
t1f = time(18, 45, 3, 1234, fold=1)
|
||
|
t1fr = f"datetime.time(microsecond=67503001234, tzinfo=None, fold=1)"
|
||
|
t1z = time(18, 45, 3, 1234, tz1)
|
||
|
t1zr = f"datetime.time(microsecond=67503001234, tzinfo={repr(tz1)}, fold=0)"
|
||
|
t2 = time(12, 59, 59, 100)
|
||
|
t2z = time(12, 59, 59, 100, tz2)
|
||
|
t3 = time(18, 45, 3, 1234)
|
||
|
t3z = time(18, 45, 3, 1234, tz2)
|
||
|
t4 = time(18, 45, 3, 1234, fold=1)
|
||
|
t4z = time(18, 45, 3, 1234, tz2, fold=1)
|
||
|
t5z = time(20, 45, 3, 1234, tz2)
|
||
|
|
||
|
|
||
|
class Test3Time(unittest.TestCase):
|
||
|
def test___init__00(self):
|
||
|
t = time()
|
||
|
self.assertEqual(t.hour, 0)
|
||
|
self.assertEqual(t.minute, 0)
|
||
|
self.assertEqual(t.second, 0)
|
||
|
self.assertEqual(t.microsecond, 0)
|
||
|
self.assertEqual(t.tzinfo, None)
|
||
|
self.assertEqual(t.fold, 0)
|
||
|
|
||
|
def test___init__01(self):
|
||
|
t = time(12)
|
||
|
self.assertEqual(t.hour, 12)
|
||
|
self.assertEqual(t.minute, 0)
|
||
|
self.assertEqual(t.second, 0)
|
||
|
self.assertEqual(t.microsecond, 0)
|
||
|
self.assertEqual(t.tzinfo, None)
|
||
|
self.assertEqual(t.fold, 0)
|
||
|
|
||
|
def test___init__02(self):
|
||
|
self.assertEqual(t1z.hour, 18)
|
||
|
self.assertEqual(t1z.minute, 45)
|
||
|
self.assertEqual(t1z.second, 3)
|
||
|
self.assertEqual(t1z.microsecond, 1234)
|
||
|
self.assertEqual(t1z.tzinfo, tz1)
|
||
|
self.assertEqual(t1z.fold, 0)
|
||
|
|
||
|
def test___init__03(self):
|
||
|
t = time(microsecond=1, fold=1)
|
||
|
self.assertEqual(t.fold, 1)
|
||
|
|
||
|
@unittest.skipIf(STDLIB, "not supported by standard datetime")
|
||
|
def test___init__04(self):
|
||
|
time(microsecond=24 * 60 * 60 * 1_000_000 - 1)
|
||
|
|
||
|
def test___init__05(self):
|
||
|
self.assertRaises(ValueError, time, -1, 0, 0, 0)
|
||
|
self.assertRaises(ValueError, time, 0, -1, 0, 0)
|
||
|
self.assertRaises(ValueError, time, 0, 0, -1, 0)
|
||
|
self.assertRaises(ValueError, time, 0, 0, 0, -1)
|
||
|
self.assertRaises(ValueError, time, 0, 0, 0, 0, fold=-1)
|
||
|
|
||
|
def test___init__06(self):
|
||
|
self.assertRaises(ValueError, time, 24, 0, 0, 0)
|
||
|
self.assertRaises(ValueError, time, 0, 60, 0, 0)
|
||
|
self.assertRaises(ValueError, time, 0, 0, 60, 0)
|
||
|
self.assertRaises(ValueError, time, 0, 0, 0, 0, fold=2)
|
||
|
|
||
|
@unittest.skipIf(STDLIB, "not supported by standard datetime")
|
||
|
def test___init__07(self):
|
||
|
self.assertRaises(ValueError, time, microsecond=24 * 60 * 60 * 1_000_000)
|
||
|
|
||
|
def test_fromisoformat00(self):
|
||
|
self.assertEqual(time.fromisoformat("01"), time(1))
|
||
|
|
||
|
def test_fromisoformat01(self):
|
||
|
self.assertEqual(time.fromisoformat("13:30"), time(13, 30))
|
||
|
|
||
|
def test_fromisoformat02(self):
|
||
|
self.assertEqual(time.fromisoformat("23:30:12"), time(23, 30, 12))
|
||
|
|
||
|
def test_fromisoformat03(self):
|
||
|
self.assertEqual(str(time.fromisoformat("11:03:04+01:00")), "11:03:04+01:00")
|
||
|
|
||
|
def test_hour00(self):
|
||
|
self.assertEqual(t1.hour, 18)
|
||
|
|
||
|
def test_hour01(self):
|
||
|
self.assertEqual(t2z.hour, 12)
|
||
|
|
||
|
def test_minute00(self):
|
||
|
self.assertEqual(t1.minute, 45)
|
||
|
|
||
|
def test_minute01(self):
|
||
|
self.assertEqual(t2z.minute, 59)
|
||
|
|
||
|
def test_second00(self):
|
||
|
self.assertEqual(t1.second, 3)
|
||
|
|
||
|
def test_second01(self):
|
||
|
self.assertEqual(t2z.second, 59)
|
||
|
|
||
|
def test_microsecond00(self):
|
||
|
self.assertEqual(t1.microsecond, 1234)
|
||
|
|
||
|
def test_microsecond01(self):
|
||
|
self.assertEqual(t2z.microsecond, 100)
|
||
|
|
||
|
def test_tzinfo00(self):
|
||
|
self.assertEqual(t1.tzinfo, None)
|
||
|
|
||
|
def test_tzinfo01(self):
|
||
|
self.assertEqual(t2z.tzinfo, tz2)
|
||
|
|
||
|
def test_fold00(self):
|
||
|
self.assertEqual(t1.fold, 0)
|
||
|
|
||
|
def test_replace00(self):
|
||
|
self.assertEqual(t2z.replace(), t2z)
|
||
|
|
||
|
def test_replace01(self):
|
||
|
self.assertEqual(t2z.replace(hour=20), time(20, 59, 59, 100, tz2))
|
||
|
|
||
|
def test_replace02(self):
|
||
|
self.assertEqual(t2z.replace(minute=4), time(12, 4, 59, 100, tz2))
|
||
|
|
||
|
def test_replace03(self):
|
||
|
self.assertEqual(t2z.replace(second=16), time(12, 59, 16, 100, tz2))
|
||
|
|
||
|
def test_replace04(self):
|
||
|
self.assertEqual(t2z.replace(microsecond=99), time(12, 59, 59, 99, tz2))
|
||
|
|
||
|
def test_replace05(self):
|
||
|
self.assertEqual(t2z.replace(tzinfo=tz1), time(12, 59, 59, 100, tz1))
|
||
|
|
||
|
def test_isoformat00(self):
|
||
|
self.assertEqual(t1.isoformat(), "18:45:03.001234")
|
||
|
|
||
|
def test_isoformat01(self):
|
||
|
self.assertEqual(t1z.isoformat(), "18:45:03.001234-01:00")
|
||
|
|
||
|
def test_isoformat02(self):
|
||
|
self.assertEqual(t2z.isoformat(), "12:59:59.000100+01:00")
|
||
|
|
||
|
@unittest.skipIf(STDLIB, "standard datetime differs")
|
||
|
def test___repr__00(self):
|
||
|
self.assertEqual(repr(t1), t1r)
|
||
|
|
||
|
@unittest.skipIf(STDLIB, "standard datetime differs")
|
||
|
def test___repr__01(self):
|
||
|
self.assertEqual(repr(t1f), t1fr)
|
||
|
|
||
|
@unittest.skipIf(STDLIB, "standard datetime differs")
|
||
|
def test___repr__02(self):
|
||
|
self.assertEqual(repr(t1z), t1zr)
|
||
|
|
||
|
def test___repr__03(self):
|
||
|
self.assertEqual(t1, eval_mod(repr(t1)))
|
||
|
|
||
|
def test___repr__04(self):
|
||
|
self.assertEqual(t1z, eval_mod(repr(t1z)))
|
||
|
|
||
|
def test___repr__05(self):
|
||
|
self.assertEqual(t4, eval_mod(repr(t4)))
|
||
|
|
||
|
def test___repr__06(self):
|
||
|
dt = eval_mod(repr(t4z))
|
||
|
self.assertEqual(t4z, eval_mod(repr(t4z)))
|
||
|
|
||
|
def test___bool__00(self):
|
||
|
self.assertTrue(t1)
|
||
|
|
||
|
def test___bool__01(self):
|
||
|
self.assertTrue(t1z)
|
||
|
|
||
|
def test___bool__02(self):
|
||
|
self.assertTrue(time())
|
||
|
|
||
|
def test___eq__00(self):
|
||
|
self.assertEqual(t1, t1)
|
||
|
|
||
|
def test___eq__01(self):
|
||
|
self.assertEqual(t1z, t1z)
|
||
|
|
||
|
def test___eq__02(self):
|
||
|
self.assertNotEqual(t1, t1z)
|
||
|
|
||
|
def test___eq__03(self):
|
||
|
self.assertNotEqual(t1z, t2z)
|
||
|
|
||
|
def test___eq__04(self):
|
||
|
self.assertEqual(t1z, t5z)
|
||
|
|
||
|
def test___eq__05(self):
|
||
|
self.assertEqual(t1, t1f)
|
||
|
|
||
|
def test___lt__00(self):
|
||
|
self.assertTrue(t2 < t1)
|
||
|
|
||
|
def test___lt__01(self):
|
||
|
self.assertTrue(t2z < t1z)
|
||
|
|
||
|
def test___lt__02(self):
|
||
|
self.assertRaises(TypeError, t1.__lt__, t1z)
|
||
|
|
||
|
def test___le__00(self):
|
||
|
self.assertTrue(t3 <= t1)
|
||
|
|
||
|
def test___le__01(self):
|
||
|
self.assertTrue(t1z <= t5z)
|
||
|
|
||
|
def test___le__02(self):
|
||
|
self.assertRaises(TypeError, t1.__le__, t1z)
|
||
|
|
||
|
def test___ge__00(self):
|
||
|
self.assertTrue(t1 >= t3)
|
||
|
|
||
|
def test___ge__01(self):
|
||
|
self.assertTrue(t5z >= t1z)
|
||
|
|
||
|
def test___ge__02(self):
|
||
|
self.assertRaises(TypeError, t1.__ge__, t1z)
|
||
|
|
||
|
def test___gt__00(self):
|
||
|
self.assertTrue(t1 > t2)
|
||
|
|
||
|
def test___gt__01(self):
|
||
|
self.assertTrue(t1z > t2z)
|
||
|
|
||
|
def test___gt__02(self):
|
||
|
self.assertRaises(TypeError, t1.__gt__, t1z)
|
||
|
|
||
|
def test___hash__00(self):
|
||
|
self.assertEqual(t1, t3)
|
||
|
self.assertEqual(hash(t1), hash(t3))
|
||
|
|
||
|
def test___hash__01(self):
|
||
|
d = {t1: 1}
|
||
|
d[t3] = 3
|
||
|
self.assertEqual(len(d), 1)
|
||
|
self.assertEqual(d[t1], 3)
|
||
|
|
||
|
def test___hash__02(self):
|
||
|
self.assertNotEqual(t1, t1z)
|
||
|
self.assertNotEqual(hash(t1), hash(t1z))
|
||
|
|
||
|
def test___hash__03(self):
|
||
|
self.assertNotEqual(t1z, t3z)
|
||
|
self.assertNotEqual(hash(t1z), hash(t3z))
|
||
|
|
||
|
def test___hash__04(self):
|
||
|
tf = t1.replace(fold=1)
|
||
|
self.assertEqual(t1, tf)
|
||
|
self.assertEqual(hash(t1), hash(tf))
|
||
|
|
||
|
def test_utcoffset00(self):
|
||
|
self.assertEqual(t1.utcoffset(), None)
|
||
|
|
||
|
def test_utcoffset01(self):
|
||
|
self.assertEqual(t1z.utcoffset(), timedelta(hours=-1))
|
||
|
|
||
|
def test_utcoffset02(self):
|
||
|
self.assertEqual(t2z.utcoffset(), timedelta(hours=1))
|
||
|
|
||
|
def test_dst00(self):
|
||
|
self.assertEqual(t1.dst(), None)
|
||
|
|
||
|
def test_dst01(self):
|
||
|
self.assertEqual(t1z.dst(), None)
|
||
|
|
||
|
def test_dst02(self):
|
||
|
self.assertEqual(t2z.dst(), td0)
|
||
|
|
||
|
def test_tzname00(self):
|
||
|
self.assertEqual(t1.tzname(), None)
|
||
|
|
||
|
def test_tzname01(self):
|
||
|
self.assertEqual(t1z.tzname(), "UTC-01:00")
|
||
|
|
||
|
def test_tzname02(self):
|
||
|
self.assertEqual(t2z.tzname(), "CET")
|
||
|
|
||
|
def test_constant00(self):
|
||
|
self.assertIsInstance(timedelta.resolution, timedelta)
|
||
|
self.assertTrue(timedelta.max > timedelta.min)
|
||
|
|
||
|
def test_constant01(self):
|
||
|
self.assertEqual(time.min, time(0))
|
||
|
|
||
|
def test_constant02(self):
|
||
|
self.assertEqual(time.max, time(23, 59, 59, 999_999))
|
||
|
|
||
|
def test_constant03(self):
|
||
|
self.assertEqual(time.resolution, timedelta(microseconds=1))
|
||
|
|
||
|
|
||
|
### datetime #################################################################
|
||
|
|
||
|
dt1 = datetime(2002, 1, 31)
|
||
|
dt1z1 = datetime(2002, 1, 31, tzinfo=tz1)
|
||
|
dt1z2 = datetime(2002, 1, 31, tzinfo=tz2)
|
||
|
dt2 = datetime(1956, 1, 31)
|
||
|
dt3 = datetime(2002, 3, 1, 12, 59, 59, 100, tz2)
|
||
|
dt4 = datetime(2002, 3, 2, 17, 6)
|
||
|
dt5 = datetime(2002, 1, 31)
|
||
|
dt5z2 = datetime(2002, 1, 31, tzinfo=tz2)
|
||
|
|
||
|
dt1r = "datetime.datetime(2002, 1, 31, 0, 0, 0, 0, None, fold=0)"
|
||
|
dt3r = "datetime.datetime(2002, 3, 1, 12, 59, 59, 100, Cet(), fold=0)"
|
||
|
dt4r = "datetime.datetime(2002, 3, 2, 17, 6, 0, 0, None, fold=0)"
|
||
|
|
||
|
d1t1 = datetime(2002, 1, 31, 18, 45, 3, 1234)
|
||
|
d1t1f = datetime(2002, 1, 31, 18, 45, 3, 1234, fold=1)
|
||
|
d1t1z = datetime(2002, 1, 31, 18, 45, 3, 1234, tz1)
|
||
|
|
||
|
dt27tz2 = datetime(2010, 3, 27, 12, tzinfo=tz2) # last CET day
|
||
|
dt28tz2 = datetime(2010, 3, 28, 12, tzinfo=tz2) # first CEST day
|
||
|
dt30tz2 = datetime(2010, 10, 30, 12, tzinfo=tz2) # last CEST day
|
||
|
dt31tz2 = datetime(2010, 10, 31, 12, tzinfo=tz2) # first CET day
|
||
|
|
||
|
|
||
|
# Tests where datetime depens on date and time
|
||
|
class Test4DateTime(unittest.TestCase):
|
||
|
def test_combine00(self):
|
||
|
dt = datetime.combine(d1, t1)
|
||
|
self.assertEqual(dt, d1t1)
|
||
|
|
||
|
def test_combine01(self):
|
||
|
dt = datetime.combine(d1, t1)
|
||
|
self.assertEqual(dt.date(), d1)
|
||
|
|
||
|
def test_combine02(self):
|
||
|
dt1 = datetime.combine(d1, t1)
|
||
|
dt2 = datetime.combine(dt1, t1)
|
||
|
self.assertEqual(dt1, dt2)
|
||
|
|
||
|
def test_combine03(self):
|
||
|
dt = datetime.combine(d1, t1)
|
||
|
self.assertEqual(dt.time(), t1)
|
||
|
|
||
|
def test_combine04(self):
|
||
|
dt = datetime.combine(d1, t1, tz1)
|
||
|
self.assertEqual(dt, d1t1z)
|
||
|
|
||
|
def test_combine05(self):
|
||
|
dt = datetime.combine(d1, t1z)
|
||
|
self.assertEqual(dt, d1t1z)
|
||
|
|
||
|
def test_combine06(self):
|
||
|
dt = datetime.combine(d1, t1f)
|
||
|
self.assertEqual(dt, d1t1f)
|
||
|
|
||
|
def test_date00(self):
|
||
|
self.assertEqual(d1t1.date(), d1)
|
||
|
|
||
|
def test_time00(self):
|
||
|
self.assertEqual(d1t1.time(), t1)
|
||
|
|
||
|
def test_time01(self):
|
||
|
self.assertNotEqual(d1t1z.time(), t1z)
|
||
|
|
||
|
def test_timetz00(self):
|
||
|
self.assertEqual(d1t1.timetz(), t1)
|
||
|
|
||
|
def test_timetz01(self):
|
||
|
self.assertEqual(d1t1z.timetz(), t1z)
|
||
|
|
||
|
def test_timetz02(self):
|
||
|
self.assertEqual(d1t1f.timetz(), t1f)
|
||
|
|
||
|
|
||
|
# Tests where datetime is independent from date and time
|
||
|
class Test5DateTime(unittest.TestCase):
|
||
|
@classmethod
|
||
|
def setUpClass(cls):
|
||
|
for k in ("date", "time"):
|
||
|
del mod_datetime.__dict__[k]
|
||
|
|
||
|
def test___init__00(self):
|
||
|
d = datetime(2002, 3, 1, 12, 0, fold=1)
|
||
|
self.assertEqual(d.year, 2002)
|
||
|
self.assertEqual(d.month, 3)
|
||
|
self.assertEqual(d.day, 1)
|
||
|
self.assertEqual(d.hour, 12)
|
||
|
self.assertEqual(d.minute, 0)
|
||
|
self.assertEqual(d.second, 0)
|
||
|
self.assertEqual(d.microsecond, 0)
|
||
|
self.assertEqual(d.tzinfo, None)
|
||
|
self.assertEqual(d.fold, 1)
|
||
|
|
||
|
def test___init__01(self):
|
||
|
self.assertEqual(dt3.year, 2002)
|
||
|
self.assertEqual(dt3.month, 3)
|
||
|
self.assertEqual(dt3.day, 1)
|
||
|
self.assertEqual(dt3.hour, 12)
|
||
|
self.assertEqual(dt3.minute, 59)
|
||
|
self.assertEqual(dt3.second, 59)
|
||
|
self.assertEqual(dt3.microsecond, 100)
|
||
|
self.assertEqual(dt3.tzinfo, tz2)
|
||
|
self.assertEqual(dt3.fold, 0)
|
||
|
|
||
|
def test___init__02(self):
|
||
|
datetime(MINYEAR, 1, 1)
|
||
|
|
||
|
def test___init__03(self):
|
||
|
datetime(MAXYEAR, 12, 31)
|
||
|
|
||
|
def test___init__04(self):
|
||
|
self.assertRaises(ValueError, datetime, MINYEAR - 1, 1, 1)
|
||
|
|
||
|
def test___init__05(self):
|
||
|
self.assertRaises(ValueError, datetime, MAXYEAR + 1, 1, 1)
|
||
|
|
||
|
def test___init__06(self):
|
||
|
self.assertRaises(ValueError, datetime, 2000, 0, 1)
|
||
|
|
||
|
def test___init__07(self):
|
||
|
datetime(2000, 2, 29)
|
||
|
|
||
|
def test___init__08(self):
|
||
|
datetime(2004, 2, 29)
|
||
|
|
||
|
def test___init__09(self):
|
||
|
datetime(2400, 2, 29)
|
||
|
|
||
|
def test___init__10(self):
|
||
|
self.assertRaises(ValueError, datetime, 2000, 2, 30)
|
||
|
|
||
|
def test___init__11(self):
|
||
|
self.assertRaises(ValueError, datetime, 2001, 2, 29)
|
||
|
|
||
|
def test___init__12(self):
|
||
|
self.assertRaises(ValueError, datetime, 2100, 2, 29)
|
||
|
|
||
|
def test___init__13(self):
|
||
|
self.assertRaises(ValueError, datetime, 1900, 2, 29)
|
||
|
|
||
|
def test___init__14(self):
|
||
|
self.assertRaises(ValueError, datetime, 2000, 1, 0)
|
||
|
|
||
|
def test___init__15(self):
|
||
|
self.assertRaises(ValueError, datetime, 2000, 1, 32)
|
||
|
|
||
|
def test___init__16(self):
|
||
|
self.assertRaises(ValueError, datetime, 2000, 1, 31, -1)
|
||
|
|
||
|
def test___init__17(self):
|
||
|
self.assertRaises(ValueError, datetime, 2000, 1, 31, 24)
|
||
|
|
||
|
def test___init__18(self):
|
||
|
self.assertRaises(ValueError, datetime, 2000, 1, 31, 23, -1)
|
||
|
|
||
|
def test___init__19(self):
|
||
|
self.assertRaises(ValueError, datetime, 2000, 1, 31, 23, 60)
|
||
|
|
||
|
def test___init__20(self):
|
||
|
self.assertRaises(ValueError, datetime, 2000, 1, 31, 23, 59, -1)
|
||
|
|
||
|
def test___init__21(self):
|
||
|
self.assertRaises(ValueError, datetime, 2000, 1, 31, 23, 59, 60)
|
||
|
|
||
|
def test___init__22(self):
|
||
|
self.assertEqual(dt1, eval_mod(dt1r))
|
||
|
|
||
|
def test___init__23(self):
|
||
|
self.assertEqual(dt3, eval_mod(dt3r))
|
||
|
|
||
|
def test___init__24(self):
|
||
|
self.assertEqual(dt4, eval_mod(dt4r))
|
||
|
|
||
|
def test_fromtimestamp00(self):
|
||
|
with LocalTz("Europe/Rome"):
|
||
|
ts = 1012499103.001234
|
||
|
if LOCALTZ:
|
||
|
dt = datetime.fromtimestamp(ts)
|
||
|
self.assertEqual(dt, d1t1)
|
||
|
else:
|
||
|
self.assertRaises(NotImplementedError, datetime.fromtimestamp, ts)
|
||
|
|
||
|
def test_fromtimestamp01(self):
|
||
|
ts = 1012506303.001234
|
||
|
self.assertEqual(datetime.fromtimestamp(ts, tz1), d1t1z)
|
||
|
|
||
|
def test_fromtimestamp02(self):
|
||
|
ts = 1269687600
|
||
|
self.assertEqual(datetime.fromtimestamp(ts, tz2), dt27tz2)
|
||
|
|
||
|
def test_fromtimestamp03(self):
|
||
|
ts = 1269770400
|
||
|
self.assertEqual(datetime.fromtimestamp(ts, tz2), dt28tz2)
|
||
|
|
||
|
def test_fromtimestamp04(self):
|
||
|
with LocalTz("Europe/Rome"):
|
||
|
dt = datetime(2010, 10, 31, 0, 30, tzinfo=timezone.utc)
|
||
|
ts = (dt - EPOCH).total_seconds()
|
||
|
dt = dt.replace(tzinfo=None) + 2 * td1h
|
||
|
if LOCALTZ:
|
||
|
ds = datetime.fromtimestamp(ts)
|
||
|
self.assertEqual(ds, dt)
|
||
|
self.assertFalse(ds.fold)
|
||
|
else:
|
||
|
self.assertRaises(NotImplementedError, datetime.fromtimestamp, ts)
|
||
|
|
||
|
def test_fromtimestamp05(self):
|
||
|
with LocalTz("Europe/Rome"):
|
||
|
dt = datetime(2010, 10, 31, 1, 30, tzinfo=timezone.utc)
|
||
|
ts = (dt - EPOCH).total_seconds()
|
||
|
dt = dt.replace(tzinfo=None) + 1 * td1h
|
||
|
if LOCALTZ:
|
||
|
ds = datetime.fromtimestamp(ts)
|
||
|
self.assertEqual(ds, dt)
|
||
|
self.assertTrue(ds.fold)
|
||
|
else:
|
||
|
self.assertRaises(NotImplementedError, datetime.fromtimestamp, ts)
|
||
|
|
||
|
def test_fromtimestamp06(self):
|
||
|
with LocalTz("US/Eastern"):
|
||
|
dt = datetime(2020, 11, 1, 5, 30, tzinfo=timezone.utc)
|
||
|
ts = (dt - EPOCH).total_seconds()
|
||
|
dt = dt.replace(tzinfo=None) - 4 * td1h
|
||
|
if LOCALTZ:
|
||
|
ds = datetime.fromtimestamp(ts)
|
||
|
self.assertEqual(ds, dt)
|
||
|
else:
|
||
|
self.assertRaises(NotImplementedError, datetime.fromtimestamp, ts)
|
||
|
|
||
|
def test_fromtimestamp07(self):
|
||
|
with LocalTz("US/Eastern"):
|
||
|
dt = datetime(2020, 11, 1, 7, 30, tzinfo=timezone.utc)
|
||
|
ts = (dt - EPOCH).total_seconds()
|
||
|
dt = dt.replace(tzinfo=None) - 5 * td1h
|
||
|
if LOCALTZ:
|
||
|
ds = datetime.fromtimestamp(ts)
|
||
|
self.assertEqual(ds, dt)
|
||
|
else:
|
||
|
self.assertRaises(NotImplementedError, datetime.fromtimestamp, ts)
|
||
|
|
||
|
@unittest.skipIf(not LOCALTZ, "naive datetime not supported")
|
||
|
def test_now00(self):
|
||
|
tm = datetime(*mod_time.localtime()[:6])
|
||
|
dt = datetime.now()
|
||
|
self.assertAlmostEqual(tm, dt, delta=timedelta(seconds=1))
|
||
|
|
||
|
def test_now01(self):
|
||
|
tm = datetime(*mod_time.gmtime()[:6], tzinfo=tz2)
|
||
|
tm += tz2.utcoffset(tm)
|
||
|
dt = datetime.now(tz2)
|
||
|
self.assertAlmostEqual(tm, dt, delta=timedelta(seconds=1))
|
||
|
|
||
|
def test_fromordinal00(self):
|
||
|
self.assertEqual(datetime.fromordinal(1), datetime(1, 1, 1))
|
||
|
|
||
|
def test_fromordinal01(self):
|
||
|
self.assertEqual(datetime.fromordinal(max_days), datetime(MAXYEAR, 12, 31))
|
||
|
|
||
|
def test_fromisoformat00(self):
|
||
|
self.assertEqual(datetime.fromisoformat("1975-08-10"), datetime(1975, 8, 10))
|
||
|
|
||
|
def test_fromisoformat01(self):
|
||
|
self.assertEqual(datetime.fromisoformat("1975-08-10 23"), datetime(1975, 8, 10, 23))
|
||
|
|
||
|
def test_fromisoformat02(self):
|
||
|
self.assertEqual(datetime.fromisoformat("1975-08-10 23:30"), datetime(1975, 8, 10, 23, 30))
|
||
|
|
||
|
def test_fromisoformat03(self):
|
||
|
self.assertEqual(
|
||
|
datetime.fromisoformat("1975-08-10 23:30:12"), datetime(1975, 8, 10, 23, 30, 12)
|
||
|
)
|
||
|
|
||
|
def test_fromisoformat04(self):
|
||
|
self.assertEqual(
|
||
|
str(datetime.fromisoformat("1975-08-10 23:30:12+01:00")), "1975-08-10 23:30:12+01:00"
|
||
|
)
|
||
|
|
||
|
def test_year00(self):
|
||
|
self.assertEqual(dt1.year, 2002)
|
||
|
|
||
|
def test_year01(self):
|
||
|
self.assertEqual(dt2.year, 1956)
|
||
|
|
||
|
def test_month00(self):
|
||
|
self.assertEqual(dt1.month, 1)
|
||
|
|
||
|
def test_month01(self):
|
||
|
self.assertEqual(dt3.month, 3)
|
||
|
|
||
|
def test_day00(self):
|
||
|
self.assertEqual(dt1.day, 31)
|
||
|
|
||
|
def test_day01(self):
|
||
|
self.assertEqual(dt4.day, 2)
|
||
|
|
||
|
def test_hour00(self):
|
||
|
self.assertEqual(dt1.hour, 0)
|
||
|
|
||
|
def test_hour01(self):
|
||
|
self.assertEqual(dt3.hour, 12)
|
||
|
|
||
|
def test_minute00(self):
|
||
|
self.assertEqual(dt1.minute, 0)
|
||
|
|
||
|
def test_minute01(self):
|
||
|
self.assertEqual(dt3.minute, 59)
|
||
|
|
||
|
def test_second00(self):
|
||
|
self.assertEqual(dt1.second, 0)
|
||
|
|
||
|
def test_second01(self):
|
||
|
self.assertEqual(dt3.second, 59)
|
||
|
|
||
|
def test_microsecond00(self):
|
||
|
self.assertEqual(dt1.microsecond, 0)
|
||
|
|
||
|
def test_microsecond01(self):
|
||
|
self.assertEqual(dt3.microsecond, 100)
|
||
|
|
||
|
def test_tzinfo00(self):
|
||
|
self.assertEqual(dt1.tzinfo, None)
|
||
|
|
||
|
def test_tzinfo01(self):
|
||
|
self.assertEqual(dt3.tzinfo, tz2)
|
||
|
|
||
|
def test_fold00(self):
|
||
|
self.assertEqual(dt1.fold, 0)
|
||
|
|
||
|
def test___add__00(self):
|
||
|
self.assertEqual(dt4 + hour, datetime(2002, 3, 2, 18, 6))
|
||
|
|
||
|
def test___add__01(self):
|
||
|
self.assertEqual(hour + dt4, datetime(2002, 3, 2, 18, 6))
|
||
|
|
||
|
def test___add__02(self):
|
||
|
self.assertEqual(dt4 + 10 * hour, datetime(2002, 3, 3, 3, 6))
|
||
|
|
||
|
def test___add__03(self):
|
||
|
self.assertEqual(dt4 + day, datetime(2002, 3, 3, 17, 6))
|
||
|
|
||
|
def test___add__04(self):
|
||
|
self.assertEqual(dt4 + week, datetime(2002, 3, 9, 17, 6))
|
||
|
|
||
|
def test___add__05(self):
|
||
|
self.assertEqual(dt4 + 52 * week, datetime(2003, 3, 1, 17, 6))
|
||
|
|
||
|
def test___add__06(self):
|
||
|
self.assertEqual(dt4 + (week + day + hour), datetime(2002, 3, 10, 18, 6))
|
||
|
|
||
|
def test___add__07(self):
|
||
|
self.assertEqual(dt5 + -day, datetime(2002, 1, 30))
|
||
|
|
||
|
def test___add__08(self):
|
||
|
self.assertEqual(-hour + dt4, datetime(2002, 3, 2, 16, 6))
|
||
|
|
||
|
def test___sub__00(self):
|
||
|
d = dt1 - dt2
|
||
|
self.assertEqual(d.total_seconds(), d2d1s)
|
||
|
|
||
|
def test___sub__01(self):
|
||
|
self.assertEqual(dt4 - hour, datetime(2002, 3, 2, 16, 6))
|
||
|
|
||
|
def test___sub__02(self):
|
||
|
self.assertEqual(dt4 - hour, dt4 + -hour)
|
||
|
|
||
|
def test___sub__03(self):
|
||
|
self.assertEqual(dt4 - 20 * hour, datetime(2002, 3, 1, 21, 6))
|
||
|
|
||
|
def test___sub__04(self):
|
||
|
self.assertEqual(dt4 - day, datetime(2002, 3, 1, 17, 6))
|
||
|
|
||
|
def test___sub__05(self):
|
||
|
self.assertEqual(dt4 - week, datetime(2002, 2, 23, 17, 6))
|
||
|
|
||
|
def test___sub__06(self):
|
||
|
self.assertEqual(dt4 - 52 * week, datetime(2001, 3, 3, 17, 6))
|
||
|
|
||
|
def test___sub__07(self):
|
||
|
self.assertEqual(dt4 - (week + day + hour), datetime(2002, 2, 22, 16, 6))
|
||
|
|
||
|
def test_computation00(self):
|
||
|
self.assertEqual((dt4 + week) - dt4, week)
|
||
|
|
||
|
def test_computation01(self):
|
||
|
self.assertEqual((dt4 + day) - dt4, day)
|
||
|
|
||
|
def test_computation02(self):
|
||
|
self.assertEqual((dt4 + hour) - dt4, hour)
|
||
|
|
||
|
def test_computation03(self):
|
||
|
self.assertEqual(dt4 - (dt4 + week), -week)
|
||
|
|
||
|
def test_computation04(self):
|
||
|
self.assertEqual(dt4 - (dt4 + day), -day)
|
||
|
|
||
|
def test_computation05(self):
|
||
|
self.assertEqual(dt4 - (dt4 + hour), -hour)
|
||
|
|
||
|
def test_computation06(self):
|
||
|
self.assertEqual(dt4 - (dt4 - week), week)
|
||
|
|
||
|
def test_computation07(self):
|
||
|
self.assertEqual(dt4 - (dt4 - day), day)
|
||
|
|
||
|
def test_computation08(self):
|
||
|
self.assertEqual(dt4 - (dt4 - hour), hour)
|
||
|
|
||
|
def test_computation09(self):
|
||
|
self.assertEqual(dt4 + (week + day + hour), (((dt4 + week) + day) + hour))
|
||
|
|
||
|
def test_computation10(self):
|
||
|
self.assertEqual(dt4 - (week + day + hour), (((dt4 - week) - day) - hour))
|
||
|
|
||
|
def test___eq__00(self):
|
||
|
self.assertEqual(dt1, dt5)
|
||
|
|
||
|
def test___eq__01(self):
|
||
|
self.assertFalse(dt1 != dt5)
|
||
|
|
||
|
def test___eq__02(self):
|
||
|
self.assertTrue(dt2 != dt5)
|
||
|
|
||
|
def test___eq__03(self):
|
||
|
self.assertTrue(dt5 != dt2)
|
||
|
|
||
|
def test___eq__04(self):
|
||
|
self.assertFalse(dt2 == dt5)
|
||
|
|
||
|
def test___eq__05(self):
|
||
|
self.assertFalse(dt5 == dt2)
|
||
|
|
||
|
def test___eq__06(self):
|
||
|
self.assertFalse(dt1 == dt1z1)
|
||
|
|
||
|
def test___eq__07(self):
|
||
|
self.assertFalse(dt1z1 == dt1z2)
|
||
|
|
||
|
def test___eq__08(self):
|
||
|
self.assertTrue(dt1z2 == dt5z2)
|
||
|
|
||
|
def test___le__00(self):
|
||
|
self.assertTrue(dt1 <= dt5)
|
||
|
|
||
|
def test___le__01(self):
|
||
|
self.assertTrue(dt2 <= dt5)
|
||
|
|
||
|
def test___le__02(self):
|
||
|
self.assertFalse(dt5 <= dt2)
|
||
|
|
||
|
def test___le__03(self):
|
||
|
self.assertFalse(dt1z1 <= dt1z2)
|
||
|
|
||
|
def test___le__04(self):
|
||
|
self.assertTrue(dt1z2 <= dt5z2)
|
||
|
|
||
|
def test___le__05(self):
|
||
|
self.assertRaises(TypeError, dt1.__le__, dt1z1)
|
||
|
|
||
|
def test___ge__00(self):
|
||
|
self.assertTrue(dt1 >= dt5)
|
||
|
|
||
|
def test___ge__01(self):
|
||
|
self.assertTrue(dt5 >= dt2)
|
||
|
|
||
|
def test___ge__02(self):
|
||
|
self.assertFalse(dt2 >= dt5)
|
||
|
|
||
|
def test___ge__03(self):
|
||
|
self.assertTrue(dt1z1 >= dt1z2)
|
||
|
|
||
|
def test___ge__04(self):
|
||
|
self.assertTrue(dt1z2 >= dt5z2)
|
||
|
|
||
|
def test___ge__05(self):
|
||
|
self.assertRaises(TypeError, dt1.__ge__, dt1z1)
|
||
|
|
||
|
def test___lt__00(self):
|
||
|
self.assertFalse(dt1 < dt5)
|
||
|
|
||
|
def test___lt__01(self):
|
||
|
self.assertTrue(dt2 < dt5)
|
||
|
|
||
|
def test___lt__02(self):
|
||
|
self.assertFalse(dt5 < dt2)
|
||
|
|
||
|
def test___lt__03(self):
|
||
|
self.assertFalse(dt1z1 < dt1z2)
|
||
|
|
||
|
def test___lt__04(self):
|
||
|
self.assertFalse(dt1z2 < dt5z2)
|
||
|
|
||
|
def test___lt__05(self):
|
||
|
self.assertRaises(TypeError, dt1.__lt__, dt1z1)
|
||
|
|
||
|
def test___gt__00(self):
|
||
|
self.assertFalse(dt1 > dt5)
|
||
|
|
||
|
def test___gt__01(self):
|
||
|
self.assertTrue(dt5 > dt2)
|
||
|
|
||
|
def test___gt__02(self):
|
||
|
self.assertFalse(dt2 > dt5)
|
||
|
|
||
|
def test___gt__03(self):
|
||
|
self.assertTrue(dt1z1 > dt1z2)
|
||
|
|
||
|
def test___gt__04(self):
|
||
|
self.assertFalse(dt1z2 > dt5z2)
|
||
|
|
||
|
def test___gt__05(self):
|
||
|
self.assertRaises(TypeError, dt1.__gt__, dt1z1)
|
||
|
|
||
|
def test_replace00(self):
|
||
|
self.assertEqual(dt3.replace(), dt3)
|
||
|
|
||
|
def test_replace01(self):
|
||
|
self.assertEqual(dt3.replace(year=2001), datetime(2001, 3, 1, 12, 59, 59, 100, tz2))
|
||
|
|
||
|
def test_replace02(self):
|
||
|
self.assertEqual(dt3.replace(month=4), datetime(2002, 4, 1, 12, 59, 59, 100, tz2))
|
||
|
|
||
|
def test_replace03(self):
|
||
|
self.assertEqual(dt3.replace(day=16), datetime(2002, 3, 16, 12, 59, 59, 100, tz2))
|
||
|
|
||
|
def test_replace04(self):
|
||
|
self.assertEqual(dt3.replace(hour=13), datetime(2002, 3, 1, 13, 59, 59, 100, tz2))
|
||
|
|
||
|
def test_replace05(self):
|
||
|
self.assertEqual(dt3.replace(minute=0), datetime(2002, 3, 1, 12, 0, 59, 100, tz2))
|
||
|
|
||
|
def test_replace06(self):
|
||
|
self.assertEqual(dt3.replace(second=1), datetime(2002, 3, 1, 12, 59, 1, 100, tz2))
|
||
|
|
||
|
def test_replace07(self):
|
||
|
self.assertEqual(dt3.replace(microsecond=99), datetime(2002, 3, 1, 12, 59, 59, 99, tz2))
|
||
|
|
||
|
def test_replace08(self):
|
||
|
self.assertEqual(dt3.replace(tzinfo=tz1), datetime(2002, 3, 1, 12, 59, 59, 100, tz1))
|
||
|
|
||
|
def test_replace09(self):
|
||
|
self.assertRaises(ValueError, datetime(2000, 2, 29).replace, year=2001)
|
||
|
|
||
|
def test_astimezone00(self):
|
||
|
dt = datetime(2002, 3, 1, 11, 59, 59, 100, timezone.utc)
|
||
|
self.assertEqual(dt3.astimezone(timezone.utc), dt)
|
||
|
|
||
|
def test_astimezone01(self):
|
||
|
self.assertIs(dt1z1.astimezone(tz1), dt1z1)
|
||
|
|
||
|
def test_astimezone02(self):
|
||
|
dt = datetime(2002, 1, 31, 2, 0, tzinfo=tz2)
|
||
|
self.assertEqual(dt1z1.astimezone(tz2), dt)
|
||
|
|
||
|
def test_astimezone03(self):
|
||
|
dt = datetime(2002, 1, 31, 10, 30, tzinfo=tz_acdt)
|
||
|
self.assertEqual(dt1z1.astimezone(tz_acdt), dt)
|
||
|
|
||
|
def test_astimezone04(self):
|
||
|
with LocalTz("Europe/Rome"):
|
||
|
dt1 = dt27tz2
|
||
|
dt2 = dt1.replace(tzinfo=None)
|
||
|
if LOCALTZ:
|
||
|
self.assertEqual(dt1, dt2.astimezone(tz2))
|
||
|
else:
|
||
|
self.assertRaises(NotImplementedError, dt2.astimezone, tz2)
|
||
|
|
||
|
def test_astimezone05(self):
|
||
|
with LocalTz("Europe/Rome"):
|
||
|
dt1 = dt28tz2
|
||
|
dt2 = dt1.replace(tzinfo=None)
|
||
|
if LOCALTZ:
|
||
|
self.assertEqual(dt1, dt2.astimezone(tz2))
|
||
|
else:
|
||
|
self.assertRaises(NotImplementedError, dt2.astimezone, tz2)
|
||
|
|
||
|
def test_astimezone06(self):
|
||
|
with LocalTz("Europe/Rome"):
|
||
|
dt1 = dt30tz2
|
||
|
dt2 = dt1.replace(tzinfo=None)
|
||
|
if LOCALTZ:
|
||
|
self.assertEqual(dt1, dt2.astimezone(tz2))
|
||
|
else:
|
||
|
self.assertRaises(NotImplementedError, dt2.astimezone, tz2)
|
||
|
|
||
|
def test_astimezone07(self):
|
||
|
with LocalTz("Europe/Rome"):
|
||
|
dt1 = dt31tz2
|
||
|
dt2 = dt1.replace(tzinfo=None)
|
||
|
if LOCALTZ:
|
||
|
self.assertEqual(dt1, dt2.astimezone(tz2))
|
||
|
else:
|
||
|
self.assertRaises(NotImplementedError, dt2.astimezone, tz2)
|
||
|
|
||
|
def test_astimezone08(self):
|
||
|
with LocalTz("Europe/Rome"):
|
||
|
dt1 = dt3
|
||
|
dt2 = dt1.replace(tzinfo=None)
|
||
|
if LOCALTZ:
|
||
|
self.assertEqual(dt1, dt2.astimezone(tz2))
|
||
|
else:
|
||
|
self.assertRaises(NotImplementedError, dt2.astimezone, tz2)
|
||
|
|
||
|
def test_utcoffset00(self):
|
||
|
self.assertEqual(dt1.utcoffset(), None)
|
||
|
|
||
|
def test_utcoffset01(self):
|
||
|
self.assertEqual(dt27tz2.utcoffset(), timedelta(hours=1))
|
||
|
|
||
|
def test_utcoffset02(self):
|
||
|
self.assertEqual(dt28tz2.utcoffset(), timedelta(hours=2))
|
||
|
|
||
|
def test_utcoffset03(self):
|
||
|
self.assertEqual(dt30tz2.utcoffset(), timedelta(hours=2))
|
||
|
|
||
|
def test_utcoffset04(self):
|
||
|
self.assertEqual(dt31tz2.utcoffset(), timedelta(hours=1))
|
||
|
|
||
|
def test_dst00(self):
|
||
|
self.assertEqual(dt1.dst(), None)
|
||
|
|
||
|
def test_dst01(self):
|
||
|
self.assertEqual(dt27tz2.dst(), timedelta(hours=0))
|
||
|
|
||
|
def test_dst02(self):
|
||
|
self.assertEqual(dt28tz2.dst(), timedelta(hours=1))
|
||
|
|
||
|
def test_tzname00(self):
|
||
|
self.assertEqual(dt1.tzname(), None)
|
||
|
|
||
|
def test_tzname01(self):
|
||
|
self.assertEqual(dt27tz2.tzname(), "CET")
|
||
|
|
||
|
def test_tzname02(self):
|
||
|
self.assertEqual(dt28tz2.tzname(), "CEST")
|
||
|
|
||
|
def test_timetuple00(self):
|
||
|
with LocalTz("Europe/Rome"):
|
||
|
self.assertEqual(dt1.timetuple()[:8], (2002, 1, 31, 0, 0, 0, 3, 31))
|
||
|
|
||
|
def test_timetuple01(self):
|
||
|
self.assertEqual(dt27tz2.timetuple()[:8], (2010, 3, 27, 12, 0, 0, 5, 86))
|
||
|
|
||
|
def test_timetuple02(self):
|
||
|
self.assertEqual(dt28tz2.timetuple()[:8], (2010, 3, 28, 12, 0, 0, 6, 87))
|
||
|
|
||
|
def test_timetuple03(self):
|
||
|
with LocalTz("Europe/Rome"):
|
||
|
self.assertEqual(
|
||
|
dt27tz2.replace(tzinfo=None).timetuple()[:8], (2010, 3, 27, 12, 0, 0, 5, 86)
|
||
|
)
|
||
|
|
||
|
def test_timetuple04(self):
|
||
|
self.assertEqual(
|
||
|
dt28tz2.replace(tzinfo=None).timetuple()[:8], (2010, 3, 28, 12, 0, 0, 6, 87)
|
||
|
)
|
||
|
|
||
|
def test_toordinal00(self):
|
||
|
self.assertEqual(datetime(1, 1, 1).toordinal(), 1)
|
||
|
|
||
|
def test_toordinal01(self):
|
||
|
self.assertEqual(datetime(1, 12, 31).toordinal(), 365)
|
||
|
|
||
|
def test_toordinal02(self):
|
||
|
self.assertEqual(datetime(2, 1, 1).toordinal(), 366)
|
||
|
|
||
|
def test_toordinal03(self):
|
||
|
# https://www.timeanddate.com/date/dateadded.html?d1=1&m1=1&y1=1&type=add&ad=730882
|
||
|
self.assertEqual(dt1.toordinal(), 730_882 - 1)
|
||
|
|
||
|
def test_toordinal04(self):
|
||
|
# https://www.timeanddate.com/date/dateadded.html?d1=1&m1=1&y1=1&type=add&ad=730911
|
||
|
self.assertEqual(dt3.toordinal(), 730_911 - 1)
|
||
|
|
||
|
def test_weekday00(self):
|
||
|
self.assertEqual(dt1.weekday(), d1.weekday())
|
||
|
|
||
|
def test_timestamp00(self):
|
||
|
with LocalTz("Europe/Rome"):
|
||
|
if LOCALTZ:
|
||
|
self.assertEqual(d1t1.timestamp(), 1012499103.001234)
|
||
|
else:
|
||
|
self.assertRaises(NotImplementedError, d1t1.timestamp)
|
||
|
|
||
|
def test_timestamp01(self):
|
||
|
self.assertEqual(d1t1z.timestamp(), 1012506303.001234)
|
||
|
|
||
|
def test_timestamp02(self):
|
||
|
with LocalTz("Europe/Rome"):
|
||
|
dt = datetime(2010, 3, 28, 2, 30) # doens't exist
|
||
|
if LOCALTZ:
|
||
|
self.assertEqual(dt.timestamp(), 1269739800.0)
|
||
|
else:
|
||
|
self.assertRaises(NotImplementedError, dt.timestamp)
|
||
|
|
||
|
def test_timestamp03(self):
|
||
|
with LocalTz("Europe/Rome"):
|
||
|
dt = datetime(2010, 8, 10, 2, 30)
|
||
|
if LOCALTZ:
|
||
|
self.assertEqual(dt.timestamp(), 1281400200.0)
|
||
|
else:
|
||
|
self.assertRaises(NotImplementedError, dt.timestamp)
|
||
|
|
||
|
def test_timestamp04(self):
|
||
|
with LocalTz("Europe/Rome"):
|
||
|
dt = datetime(2010, 10, 31, 2, 30, fold=0)
|
||
|
if LOCALTZ:
|
||
|
self.assertEqual(dt.timestamp(), 1288485000.0)
|
||
|
else:
|
||
|
self.assertRaises(NotImplementedError, dt.timestamp)
|
||
|
|
||
|
def test_timestamp05(self):
|
||
|
with LocalTz("Europe/Rome"):
|
||
|
dt = datetime(2010, 10, 31, 2, 30, fold=1)
|
||
|
if LOCALTZ:
|
||
|
self.assertEqual(dt.timestamp(), 1288488600.0)
|
||
|
else:
|
||
|
self.assertRaises(NotImplementedError, dt.timestamp)
|
||
|
|
||
|
def test_timestamp06(self):
|
||
|
with LocalTz("US/Eastern"):
|
||
|
dt = datetime(2020, 3, 8, 2, 30) # doens't exist
|
||
|
if LOCALTZ:
|
||
|
self.assertEqual(dt.timestamp(), 1583652600.0)
|
||
|
else:
|
||
|
self.assertRaises(NotImplementedError, dt.timestamp)
|
||
|
|
||
|
def test_timestamp07(self):
|
||
|
with LocalTz("US/Eastern"):
|
||
|
dt = datetime(2020, 8, 10, 2, 30)
|
||
|
if LOCALTZ:
|
||
|
self.assertEqual(dt.timestamp(), 1597041000.0)
|
||
|
else:
|
||
|
self.assertRaises(NotImplementedError, dt.timestamp)
|
||
|
|
||
|
def test_timestamp08(self):
|
||
|
with LocalTz("US/Eastern"):
|
||
|
dt = datetime(2020, 11, 1, 2, 30, fold=0)
|
||
|
if LOCALTZ:
|
||
|
self.assertEqual(dt.timestamp(), 1604215800.0)
|
||
|
else:
|
||
|
self.assertRaises(NotImplementedError, dt.timestamp)
|
||
|
|
||
|
def test_timestamp09(self):
|
||
|
with LocalTz("US/Eastern"):
|
||
|
dt = datetime(2020, 11, 1, 2, 30, fold=1)
|
||
|
if LOCALTZ:
|
||
|
self.assertEqual(dt.timestamp(), 1604215800.0)
|
||
|
else:
|
||
|
self.assertRaises(NotImplementedError, dt.timestamp)
|
||
|
|
||
|
def test_isoweekday00(self):
|
||
|
self.assertEqual(dt1.isoweekday(), d1.isoweekday())
|
||
|
|
||
|
def test_isoformat00(self):
|
||
|
self.assertEqual(dt3.isoformat(), "2002-03-01T12:59:59.000100+01:00")
|
||
|
|
||
|
def test_isoformat01(self):
|
||
|
self.assertEqual(dt3.isoformat("T"), "2002-03-01T12:59:59.000100+01:00")
|
||
|
|
||
|
def test_isoformat02(self):
|
||
|
self.assertEqual(dt3.isoformat(" "), "2002-03-01 12:59:59.000100+01:00")
|
||
|
|
||
|
def test_isoformat03(self):
|
||
|
self.assertEqual(str(dt3), "2002-03-01 12:59:59.000100+01:00")
|
||
|
|
||
|
@unittest.skipIf(STDLIB, "standard datetime differs")
|
||
|
def test___repr__00(self):
|
||
|
self.assertEqual(repr(dt1), dt1r)
|
||
|
|
||
|
@unittest.skipIf(STDLIB, "standard datetime differs")
|
||
|
def test___repr__01(self):
|
||
|
self.assertEqual(repr(dt3), dt3r)
|
||
|
|
||
|
@unittest.skipIf(STDLIB, "standard datetime differs")
|
||
|
def test___repr__02(self):
|
||
|
self.assertEqual(repr(dt4), dt4r)
|
||
|
|
||
|
def test___repr__03(self):
|
||
|
self.assertEqual(dt1, eval_mod(repr(dt1)))
|
||
|
|
||
|
def test___repr__04(self):
|
||
|
self.assertEqual(dt3, eval_mod(repr(dt3)))
|
||
|
|
||
|
def test___repr__05(self):
|
||
|
self.assertEqual(dt4, eval_mod(repr(dt4)))
|
||
|
|
||
|
def test___hash__00(self):
|
||
|
self.assertEqual(dt1, dt5)
|
||
|
self.assertEqual(hash(dt1), hash(dt5))
|
||
|
|
||
|
def test___hash__01(self):
|
||
|
dd1 = dt1 + timedelta(weeks=7)
|
||
|
dd5 = dt5 + timedelta(days=7 * 7)
|
||
|
self.assertEqual(hash(dd1), hash(dd5))
|
||
|
|
||
|
def test___hash__02(self):
|
||
|
d = {dt1: 1}
|
||
|
d[dt5] = 2
|
||
|
self.assertEqual(len(d), 1)
|
||
|
self.assertEqual(d[dt1], 2)
|
||
|
|
||
|
def test___hash__03(self):
|
||
|
self.assertNotEqual(dt1, dt1z1)
|
||
|
self.assertNotEqual(hash(dt1), hash(dt1z1))
|
||
|
|
||
|
def test___hash__04(self):
|
||
|
self.assertNotEqual(dt1z1, dt5z2)
|
||
|
self.assertNotEqual(hash(dt1z1), hash(dt5z2))
|
||
|
|
||
|
@unittest.skipIf(STDLIB, "standard datetime has no tuple()")
|
||
|
def test_tuple00(self):
|
||
|
self.assertEqual(dt1.tuple(), (2002, 1, 31, 0, 0, 0, 0, None, 0))
|
||
|
|
||
|
@unittest.skipIf(STDLIB, "standard datetime has no tuple()")
|
||
|
def test_tuple01(self):
|
||
|
self.assertEqual(dt27tz2.tuple(), (2010, 3, 27, 12, 0, 0, 0, tz2, 0))
|
||
|
|
||
|
@unittest.skipIf(STDLIB, "standard datetime has no tuple()")
|
||
|
def test_tuple02(self):
|
||
|
self.assertEqual(dt28tz2.tuple(), (2010, 3, 28, 12, 0, 0, 0, tz2, 0))
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
unittest.main()
|