Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
PSI / tests / timespec_test.py
Size: Mime:
# 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()