blob: 3cf98391941bef8b0915c4027a9da88780a7fc0b [file] [log] [blame]
# The MIT License
#
# Copyright (C) 2009 Erick Tryzelaar
#
# Copyright (C) 2009 Floris Bruynooghe
#
#
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation files
# (the "Software"), to deal in the Software without restriction,
# including without limitation the rights to use, copy, modify, merge,
# publish, distribute, sublicense, and/or sell copies of the Software,
# and to permit persons to whom the Software is furnished to do so,
# subject to the following conditions:
#
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
import sys
import time
import unittest
import psi
try:
import datetime
except ImportError:
HAVE_DATETIME = False
else:
HAVE_DATETIME = True
class TimeSpecTests(unittest.TestCase):
def setUp(self):
self.tv = psi.TimeSpec(5, 10)
def test_type(self):
self.assert_(isinstance(self.tv, psi.TimeSpec))
def test_init(self):
tv = psi.TimeSpec(5, 10)
self.assertEqual(tv.tv_sec, 5)
self.assertEqual(tv.tv_nsec, 10)
tv = psi.TimeSpec(tv_sec=6, tv_nsec=11)
self.assertEqual(tv.tv_sec, 6)
self.assertEqual(tv.tv_nsec, 11)
def test_init_normalise(self):
t = psi.TimeSpec(0, 1000000001)
self.assertEqual(t.tv_sec, 1)
self.assertEqual(t.tv_nsec, 1)
t = psi.TimeSpec(-1, -1000000001)
self.assertEqual(t.tv_sec, -1)
self.assertEqual(t.tv_nsec, -999999999)
t = psi.TimeSpec(0, -2000000000)
self.assertEqual(t.tv_sec, -2)
self.assertEqual(t.tv_nsec, 0)
t = psi.TimeSpec(-1, 500000000)
self.assertEqual(t.tv_sec, 0)
self.assertEqual(t.tv_nsec, -500000000)
t = psi.TimeSpec(1, -500000000)
self.assertEqual(t.tv_sec, 0)
self.assertEqual(t.tv_nsec, 500000000)
def test_tuple(self):
self.assertEqual(self.tv[0], 5)
self.assertEqual(self.tv[1], 10)
self.assertRaises(IndexError, self.tv.__getitem__, -1)
self.assertRaises(IndexError, self.tv.__getitem__, 2)
def test_hash(self):
self.assertEqual(hash(self.tv), hash(psi.TimeSpec(5, 10)))
def test_eq(self):
self.assertEqual(self.tv, psi.TimeSpec(5, 10))
def test_ne(self):
self.assertNotEqual(self.tv, psi.TimeSpec(5, 11))
self.assertNotEqual(self.tv, psi.TimeSpec(4, 10))
self.assertNotEqual(self.tv, psi.TimeSpec(4, 11))
def test_lt(self):
self.assert_(self.tv < psi.TimeSpec(5, 11))
self.assert_(self.tv < psi.TimeSpec(6, 10))
self.assert_(not self.tv < psi.TimeSpec(5, 9))
self.assert_(not self.tv < psi.TimeSpec(5, 10))
def test_lt_distorted(self):
self.assert_(self.tv < psi.TimeSpec(4, 1000000015))
def test_le(self):
self.assert_(self.tv <= psi.TimeSpec(5, 11))
self.assert_(self.tv <= psi.TimeSpec(5, 10))
self.assert_(not self.tv <= psi.TimeSpec(5, 9))
def test_gt(self):
self.assert_(self.tv > psi.TimeSpec(5, 9))
self.assert_(not self.tv > psi.TimeSpec(5, 10))
def test_gt_distorted(self):
self.assert_(psi.TimeSpec(4, 1000000015) > self.tv)
def test_ge(self):
self.assert_(self.tv >= psi.TimeSpec(5, 10))
self.assert_(self.tv >= psi.TimeSpec(5, 9))
self.assert_(not self.tv >= psi.TimeSpec(5, 11))
def test_compare_tuple(self):
self.assert_(self.tv > (5, 9))
self.assert_(self.tv >= (5, 9))
self.assert_(self.tv == (5, 10))
self.assert_((5, 10) == self.tv)
self.assert_(self.tv <= (5, 11))
self.assert_(self.tv < (5, 11))
def test_compare_int(self):
self.assert_(self.tv > 5)
self.assert_(self.tv != 5)
self.assert_(self.tv < 6)
def test_compare_float(self):
self.assert_(self.tv > 5.0)
self.assert_(self.tv != 5.0)
self.assert_(self.tv < 5.1)
if sys.version_info[0] < 3:
def test_compare_tuple_long(self):
self.assert_(self.tv == (long(5), long(10)))
def test_add(self):
self.assertEqual(self.tv + psi.TimeSpec(5, 10), psi.TimeSpec(10, 20))
def test_add_rollover(self):
sum = self.tv + psi.TimeSpec(0, 999999995)
self.assertEqual(sum, psi.TimeSpec(6, 5))
def test_add_tuple(self):
self.assertEqual(self.tv + (5, 10), psi.TimeSpec(10, 20))
def test_add_tuple_bad(self):
self.assertEqual(self.tv.__add__((5, 10, 0)), NotImplemented)
def test_add_int(self):
self.assertEqual(self.tv + 5, psi.TimeSpec(10, 10))
def test_add_float(self):
self.assertEqual(self.tv + 5.5, psi.TimeSpec(10, 500000010))
def test_sub(self):
self.assertEqual(self.tv - psi.TimeSpec(1, 5), psi.TimeSpec(4, 5))
def test_sub_rollover(self):
self.assertEqual(self.tv - psi.TimeSpec(0, 15),
psi.TimeSpec(4, 999999995))
def test_sub_tuple(self):
self.assertEqual(self.tv - (1, 5), psi.TimeSpec(4, 5))
def test_sub_tuple_bad(self):
self.assertEqual(self.tv.__sub__((1, 5, 0)), NotImplemented)
def test_sub_int(self):
self.assertEqual(self.tv - 1, psi.TimeSpec(4, 10))
def test_sub_float(self):
self.assertEqual(self.tv - 1.5, psi.TimeSpec(3, 500000010))
def test_bool(self):
self.assertEqual(bool(self.tv), True)
self.assertEqual(bool(psi.TimeSpec(0, 0)), False)
self.assertEqual(bool(psi.TimeSpec(-1, -1)), True)
class TimeSpecMethodsTests(unittest.TestCase):
def setUp(self):
self.tv = psi.TimeSpec(5, 500000000)
def test_timestamp(self):
self.assertEqual(self.tv.timestamp(), 5.5)
def test_float(self):
self.assertEqual(self.tv.float(), 5.5)
def test_mktime(self):
if time.daylight:
t = 5.5 + time.timezone + time.altzone
else:
t = 5.5 + time.timezone
self.assertEqual(self.tv.mktime(), t)
def test_timetuple(self):
self.assertEqual(self.tv.timetuple(), time.gmtime(5.5))
def test_gmtime(self):
self.assertEqual(self.tv.gmtime(), time.gmtime(5.5))
def test_localtime(self):
self.assertEqual(self.tv.localtime(), time.localtime(5.5))
def test_utcdatetime(self):
if HAVE_DATETIME:
self.assertEqual(self.tv.utcdatetime(),
datetime.datetime.utcfromtimestamp(5.5))
else:
self.assert_(not hasattr(self.tv, 'utcdatetime'))
def test_datetime(self):
if HAVE_DATETIME:
self.assertEqual(self.tv.datetime(),
datetime.datetime.fromtimestamp(5.5))
else:
self.assert_(not hasattr(self.tv, 'datetime'))
def test_timedelta(self):
if HAVE_DATETIME:
self.assertEqual(self.tv.timedelta(),
datetime.timedelta(seconds=5, microseconds=500000))
else:
self.assert_(not hasattr(self.tv, 'timedelta'))
if __name__ == '__main__':
unittest.main()