Initial commit of OpenSPARC T2 architecture model.
[OpenSPARC-T2-SAM] / sam-t2 / devtools / amd64 / lib / python2.4 / test / test_time.py
CommitLineData
920dae64
AT
1from test import test_support
2import time
3import unittest
4
5
6class TimeTestCase(unittest.TestCase):
7
8 def setUp(self):
9 self.t = time.time()
10
11 def test_data_attributes(self):
12 time.altzone
13 time.daylight
14 time.timezone
15 time.tzname
16
17 def test_clock(self):
18 time.clock()
19
20 def test_conversions(self):
21 self.assert_(time.ctime(self.t)
22 == time.asctime(time.localtime(self.t)))
23 self.assert_(long(time.mktime(time.localtime(self.t)))
24 == long(self.t))
25
26 def test_sleep(self):
27 time.sleep(1.2)
28
29 def test_strftime(self):
30 tt = time.gmtime(self.t)
31 for directive in ('a', 'A', 'b', 'B', 'c', 'd', 'H', 'I',
32 'j', 'm', 'M', 'p', 'S',
33 'U', 'w', 'W', 'x', 'X', 'y', 'Y', 'Z', '%'):
34 format = ' %' + directive
35 try:
36 time.strftime(format, tt)
37 except ValueError:
38 self.fail('conversion specifier: %r failed.' % format)
39
40 def test_strftime_bounds_checking(self):
41 # Make sure that strftime() checks the bounds of the various parts
42 #of the time tuple.
43
44 # Check year
45 self.assertRaises(ValueError, time.strftime, '',
46 (1899, 1, 1, 0, 0, 0, 0, 1, -1))
47 if time.accept2dyear:
48 self.assertRaises(ValueError, time.strftime, '',
49 (-1, 1, 1, 0, 0, 0, 0, 1, -1))
50 self.assertRaises(ValueError, time.strftime, '',
51 (100, 1, 1, 0, 0, 0, 0, 1, -1))
52 # Check month
53 self.assertRaises(ValueError, time.strftime, '',
54 (1900, 0, 1, 0, 0, 0, 0, 1, -1))
55 self.assertRaises(ValueError, time.strftime, '',
56 (1900, 13, 1, 0, 0, 0, 0, 1, -1))
57 # Check day of month
58 self.assertRaises(ValueError, time.strftime, '',
59 (1900, 1, 0, 0, 0, 0, 0, 1, -1))
60 self.assertRaises(ValueError, time.strftime, '',
61 (1900, 1, 32, 0, 0, 0, 0, 1, -1))
62 # Check hour
63 self.assertRaises(ValueError, time.strftime, '',
64 (1900, 1, 1, -1, 0, 0, 0, 1, -1))
65 self.assertRaises(ValueError, time.strftime, '',
66 (1900, 1, 1, 24, 0, 0, 0, 1, -1))
67 # Check minute
68 self.assertRaises(ValueError, time.strftime, '',
69 (1900, 1, 1, 0, -1, 0, 0, 1, -1))
70 self.assertRaises(ValueError, time.strftime, '',
71 (1900, 1, 1, 0, 60, 0, 0, 1, -1))
72 # Check second
73 self.assertRaises(ValueError, time.strftime, '',
74 (1900, 1, 1, 0, 0, -1, 0, 1, -1))
75 # C99 only requires allowing for one leap second, but Python's docs say
76 # allow two leap seconds (0..61)
77 self.assertRaises(ValueError, time.strftime, '',
78 (1900, 1, 1, 0, 0, 62, 0, 1, -1))
79 # No check for upper-bound day of week;
80 # value forced into range by a ``% 7`` calculation.
81 # Start check at -2 since gettmarg() increments value before taking
82 # modulo.
83 self.assertRaises(ValueError, time.strftime, '',
84 (1900, 1, 1, 0, 0, 0, -2, 1, -1))
85 # Check day of the year
86 self.assertRaises(ValueError, time.strftime, '',
87 (1900, 1, 1, 0, 0, 0, 0, 0, -1))
88 self.assertRaises(ValueError, time.strftime, '',
89 (1900, 1, 1, 0, 0, 0, 0, 367, -1))
90 # Check daylight savings flag
91 self.assertRaises(ValueError, time.strftime, '',
92 (1900, 1, 1, 0, 0, 0, 0, 1, -2))
93 self.assertRaises(ValueError, time.strftime, '',
94 (1900, 1, 1, 0, 0, 0, 0, 1, 2))
95
96 def test_strptime(self):
97 tt = time.gmtime(self.t)
98 for directive in ('a', 'A', 'b', 'B', 'c', 'd', 'H', 'I',
99 'j', 'm', 'M', 'p', 'S',
100 'U', 'w', 'W', 'x', 'X', 'y', 'Y', 'Z', '%'):
101 format = ' %' + directive
102 try:
103 time.strptime(time.strftime(format, tt), format)
104 except ValueError:
105 self.fail('conversion specifier: %r failed.' % format)
106
107 def test_asctime(self):
108 time.asctime(time.gmtime(self.t))
109 self.assertRaises(TypeError, time.asctime, 0)
110
111 def test_tzset(self):
112 if not hasattr(time, "tzset"):
113 return # Can't test this; don't want the test suite to fail
114
115 from os import environ
116
117 # Epoch time of midnight Dec 25th 2002. Never DST in northern
118 # hemisphere.
119 xmas2002 = 1040774400.0
120
121 # These formats are correct for 2002, and possibly future years
122 # This format is the 'standard' as documented at:
123 # http://www.opengroup.org/onlinepubs/007904975/basedefs/xbd_chap08.html
124 # They are also documented in the tzset(3) man page on most Unix
125 # systems.
126 eastern = 'EST+05EDT,M4.1.0,M10.5.0'
127 victoria = 'AEST-10AEDT-11,M10.5.0,M3.5.0'
128 utc='UTC+0'
129
130 org_TZ = environ.get('TZ',None)
131 try:
132 # Make sure we can switch to UTC time and results are correct
133 # Note that unknown timezones default to UTC.
134 # Note that altzone is undefined in UTC, as there is no DST
135 environ['TZ'] = eastern
136 time.tzset()
137 environ['TZ'] = utc
138 time.tzset()
139 self.failUnlessEqual(
140 time.gmtime(xmas2002), time.localtime(xmas2002)
141 )
142 self.failUnlessEqual(time.daylight, 0)
143 self.failUnlessEqual(time.timezone, 0)
144 self.failUnlessEqual(time.localtime(xmas2002).tm_isdst, 0)
145
146 # Make sure we can switch to US/Eastern
147 environ['TZ'] = eastern
148 time.tzset()
149 self.failIfEqual(time.gmtime(xmas2002), time.localtime(xmas2002))
150 self.failUnlessEqual(time.tzname, ('EST', 'EDT'))
151 self.failUnlessEqual(len(time.tzname), 2)
152 self.failUnlessEqual(time.daylight, 1)
153 self.failUnlessEqual(time.timezone, 18000)
154 self.failUnlessEqual(time.altzone, 14400)
155 self.failUnlessEqual(time.localtime(xmas2002).tm_isdst, 0)
156 self.failUnlessEqual(len(time.tzname), 2)
157
158 # Now go to the southern hemisphere.
159 environ['TZ'] = victoria
160 time.tzset()
161 self.failIfEqual(time.gmtime(xmas2002), time.localtime(xmas2002))
162 self.failUnless(time.tzname[0] == 'AEST', str(time.tzname[0]))
163 self.failUnless(time.tzname[1] == 'AEDT', str(time.tzname[1]))
164 self.failUnlessEqual(len(time.tzname), 2)
165 self.failUnlessEqual(time.daylight, 1)
166 self.failUnlessEqual(time.timezone, -36000)
167 self.failUnlessEqual(time.altzone, -39600)
168 self.failUnlessEqual(time.localtime(xmas2002).tm_isdst, 1)
169
170 finally:
171 # Repair TZ environment variable in case any other tests
172 # rely on it.
173 if org_TZ is not None:
174 environ['TZ'] = org_TZ
175 elif environ.has_key('TZ'):
176 del environ['TZ']
177 time.tzset()
178
179 def test_insane_timestamps(self):
180 # It's possible that some platform maps time_t to double,
181 # and that this test will fail there. This test should
182 # exempt such platforms (provided they return reasonable
183 # results!).
184 for func in time.ctime, time.gmtime, time.localtime:
185 for unreasonable in -1e200, 1e200:
186 self.assertRaises(ValueError, func, unreasonable)
187
188 def test_ctime_without_arg(self):
189 # Not sure how to check the values, since the clock could tick
190 # at any time. Make sure these are at least accepted and
191 # don't raise errors.
192 time.ctime()
193 time.ctime(None)
194
195 def test_gmtime_without_arg(self):
196 t0 = time.mktime(time.gmtime())
197 t1 = time.mktime(time.gmtime(None))
198 self.assert_(0 <= (t1-t0) < 0.2)
199
200 def test_localtime_without_arg(self):
201 t0 = time.mktime(time.localtime())
202 t1 = time.mktime(time.localtime(None))
203 self.assert_(0 <= (t1-t0) < 0.2)
204
205def test_main():
206 test_support.run_unittest(TimeTestCase)
207
208
209if __name__ == "__main__":
210 test_main()