[Python-checkins] python/nondist/sandbox/datetime datetime.py,1.79,1.80 test_both.py,1.49,1.50

tim_one@users.sourceforge.net tim_one@users.sourceforge.net
2002年12月07日 11:17:38 -0800


Update of /cvsroot/python/python/nondist/sandbox/datetime
In directory sc8-pr-cvs1:/tmp/cvs-serv2914
Modified Files:
	datetime.py test_both.py 
Log Message:
Beefed up some weak time tests. Added a time pickle test. Implemented
pickling in the Python time implementation.
Index: datetime.py
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/datetime/datetime.py,v
retrieving revision 1.79
retrieving revision 1.80
diff -C2 -d -r1.79 -r1.80
*** datetime.py	7 Dec 2002 18:34:39 -0000	1.79
--- datetime.py	7 Dec 2002 19:17:34 -0000	1.80
***************
*** 731,735 ****
 """
 
! def __init__(self, hour, minute, second=0, microsecond=0):
 """Constructor.
 
--- 731,735 ----
 """
 
! def __init__(self, hour=0, minute=0, second=0, microsecond=0):
 """Constructor.
 
***************
*** 827,830 ****
--- 827,844 ----
 self.__second, 0, 0, -1))
 
+ 
+ # Pickle support.
+ 
+ def __getstate__(self):
+ us2, us3 = divmod(self.__microsecond, 256)
+ us1, us2 = divmod(us2, 256)
+ return ("%c" * 6) % (self.__hour, self.__minute, self.__second,
+ us1, us2, us3)
+ 
+ def __setstate__(self, string):
+ assert len(string) == 6
+ self.__hour, self.__minute, self.__second, us1, us2, us3 = \
+ map(ord, string)
+ self.__microsecond = (((us1 << 8) | us2) << 8) | us3
 
 time.min = time(0, 0, 0)
Index: test_both.py
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/datetime/test_both.py,v
retrieving revision 1.49
retrieving revision 1.50
diff -C2 -d -r1.49 -r1.50
*** test_both.py	7 Dec 2002 18:34:39 -0000	1.49
--- test_both.py	7 Dec 2002 19:17:34 -0000	1.50
***************
*** 1141,1161 ****
 
 def test_roundtrip(self):
! for t in (self.theclass(1, 2, 3, 4),):
! # Verify t -> string -> time identity.
! s = repr(t)
! t2 = eval(s)
! self.assertEqual(t, t2)
 
! # Verify identity via reconstructing from pieces.
! t2 = self.theclass(t.hour, t.minute, t.second,
! t.microsecond)
! self.assertEqual(t, t2)
 
 def test_comparing(self):
! t1 = self.theclass(9, 0, 0)
! t2 = self.theclass(10, 0, 0)
! t3 = self.theclass(9, 0, 0)
! self.assertEqual(t1, t3)
! self.assert_(t2 > t3)
 
 def test_bad_constructor_arguments(self):
--- 1141,1202 ----
 
 def test_roundtrip(self):
! t = self.theclass(1, 2, 3, 4)
 
! # Verify t -> string -> time identity.
! s = repr(t)
! t2 = eval(s)
! self.assertEqual(t, t2)
! 
! # Verify identity via reconstructing from pieces.
! t2 = self.theclass(t.hour, t.minute, t.second,
! t.microsecond)
! self.assertEqual(t, t2)
 
 def test_comparing(self):
! args = [1, 2, 3, 4]
! t1 = self.theclass(*args)
! t2 = self.theclass(*args)
! self.failUnless(t1 == t2)
! self.failUnless(t1 <= t2)
! self.failUnless(t1 >= t2)
! self.failUnless(not t1 != t2)
! self.failUnless(not t1 < t2)
! self.failUnless(not t1 > t2)
! self.assertEqual(cmp(t1, t2), 0)
! self.assertEqual(cmp(t2, t1), 0)
! 
! for i in range(len(args)):
! newargs = args[:]
! newargs[i] = args[i] + 1
! t2 = self.theclass(*newargs) # this is larger than t1
! self.failUnless(t1 < t2)
! self.failUnless(t2 > t1)
! self.failUnless(t1 <= t2)
! self.failUnless(t2 >= t1)
! self.failUnless(t1 != t2)
! self.failUnless(t2 != t1)
! self.failUnless(not t1 == t2)
! self.failUnless(not t2 == t1)
! self.failUnless(not t1 > t2)
! self.failUnless(not t2 < t1)
! self.failUnless(not t1 >= t2)
! self.failUnless(not t2 <= t1)
! self.assertEqual(cmp(t1, t2), -1)
! self.assertEqual(cmp(t2, t1), 1)
! 
! for badarg in (10, 10L, 34.5, "abc", {}, [], (), date(1, 1, 1),
! datetime.datetime(1, 1, 1, 1, 1), timedelta(9)):
! self.assertRaises(TypeError, lambda: t1 == badarg)
! self.assertRaises(TypeError, lambda: t1 != badarg)
! self.assertRaises(TypeError, lambda: t1 <= badarg)
! self.assertRaises(TypeError, lambda: t1 < badarg)
! self.assertRaises(TypeError, lambda: t1 > badarg)
! self.assertRaises(TypeError, lambda: t1 >= badarg)
! self.assertRaises(TypeError, lambda: badarg == t1)
! self.assertRaises(TypeError, lambda: badarg != t1)
! self.assertRaises(TypeError, lambda: badarg <= t1)
! self.assertRaises(TypeError, lambda: badarg < t1)
! self.assertRaises(TypeError, lambda: badarg > t1)
! self.assertRaises(TypeError, lambda: badarg >= t1)
 
 def test_bad_constructor_arguments(self):
***************
*** 1240,1243 ****
--- 1281,1299 ----
 self.assert_(isinstance(self.theclass.resolution, timedelta))
 self.assert_(self.theclass.max > self.theclass.min)
+ 
+ def test_pickling(self):
+ import pickle, cPickle
+ args = 20, 59, 16, 64**2
+ orig = self.theclass(*args)
+ state = orig.__getstate__()
+ self.assertEqual(state, '\x14\x3b\x10\x00\x10\x00')
+ derived = self.theclass()
+ derived.__setstate__(state)
+ self.assertEqual(orig, derived)
+ for pickler in pickle, cPickle:
+ for binary in 0, 1:
+ green = pickler.dumps(orig, binary)
+ derived = pickler.loads(green)
+ self.assertEqual(orig, derived)
 
 def test_suite():

AltStyle によって変換されたページ (->オリジナル) /