ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/tck/TimeUnitTest.java
(Generate patch)

Comparing jsr166/src/test/tck/TimeUnitTest.java (file contents):
Revision 1.9 by dl, Thu Dec 30 13:04:50 2004 UTC vs.
Revision 1.31 by jsr166, Sat May 13 23:50:00 2017 UTC

# Line 1 | Line 1
1   /*
2   * Written by Doug Lea with assistance from members of JCP JSR-166
3   * Expert Group and released to the public domain, as explained at
4 < * http://creativecommons.org/licenses/publicdomain
5 < * Other contributors include Andrew Wright, Jeffrey Hayes,
6 < * Pat Fisher, Mike Judd.
4 > * http://creativecommons.org/publicdomain/zero/1.0/
5 > * Other contributors include Andrew Wright, Jeffrey Hayes,
6 > * Pat Fisher, Mike Judd.
7   */
8  
9 + import static java.util.concurrent.TimeUnit.DAYS;
10 + import static java.util.concurrent.TimeUnit.HOURS;
11 + import static java.util.concurrent.TimeUnit.MICROSECONDS;
12 + import static java.util.concurrent.TimeUnit.MILLISECONDS;
13 + import static java.util.concurrent.TimeUnit.MINUTES;
14 + import static java.util.concurrent.TimeUnit.NANOSECONDS;
15 + import static java.util.concurrent.TimeUnit.SECONDS;
16  
17 < import junit.framework.*;
18 < import java.util.concurrent.*;
19 < import java.io.*;
17 > import java.util.concurrent.CountDownLatch;
18 > import java.util.concurrent.TimeUnit;
19 >
20 > import junit.framework.Test;
21 > import junit.framework.TestSuite;
22  
23   public class TimeUnitTest extends JSR166TestCase {
24      public static void main(String[] args) {
25 <        junit.textui.TestRunner.run(suite());  
25 >        main(suite(), args);
26      }
27 <    
27 >
28      public static Test suite() {
29 <        return new TestSuite(TimeUnitTest.class);
29 >        return new TestSuite(TimeUnitTest.class);
30      }
31  
32      // (loops to 88888 check increments at all time divisions.)
# Line 27 | Line 36 | public class TimeUnitTest extends JSR166
36       */
37      public void testConvert() {
38          for (long t = 0; t < 88888; ++t) {
39 <            assertEquals(t*60*60*24,
40 <                         TimeUnit.SECONDS.convert(t,
41 <                                                  TimeUnit.DAYS));
42 <            assertEquals(t*60*60,
43 <                         TimeUnit.SECONDS.convert(t,
44 <                                                  TimeUnit.HOURS));
45 <            assertEquals(t*60,
46 <                         TimeUnit.SECONDS.convert(t,
47 <                                                  TimeUnit.MINUTES));
48 <            assertEquals(t,
49 <                         TimeUnit.SECONDS.convert(t,
50 <                                                  TimeUnit.SECONDS));
51 <            assertEquals(t,
52 <                         TimeUnit.SECONDS.convert(1000L*t,
53 <                                                  TimeUnit.MILLISECONDS));
54 <            assertEquals(t,
55 <                         TimeUnit.SECONDS.convert(1000000L*t,
56 <                                                  TimeUnit.MICROSECONDS));
57 <            assertEquals(t,
58 <                         TimeUnit.SECONDS.convert(1000000000L*t,
59 <                                                  TimeUnit.NANOSECONDS));
60 <
61 <
62 <            assertEquals(1000L*t*60*60*24,
63 <                         TimeUnit.MILLISECONDS.convert(t,
64 <                                                  TimeUnit.DAYS));
65 <            assertEquals(1000L*t*60*60,
66 <                         TimeUnit.MILLISECONDS.convert(t,
67 <                                                  TimeUnit.HOURS));
68 <            assertEquals(1000L*t*60,
69 <                         TimeUnit.MILLISECONDS.convert(t,
70 <                                                  TimeUnit.MINUTES));
71 <            assertEquals(1000L*t,
72 <                         TimeUnit.MILLISECONDS.convert(t,
73 <                                                  TimeUnit.SECONDS));
74 <            assertEquals(t,
75 <                         TimeUnit.MILLISECONDS.convert(t,
76 <                                                  TimeUnit.MILLISECONDS));
77 <            assertEquals(t,
78 <                         TimeUnit.MILLISECONDS.convert(1000L*t,
79 <                                                  TimeUnit.MICROSECONDS));
80 <            assertEquals(t,
81 <                         TimeUnit.MILLISECONDS.convert(1000000L*t,
82 <                                                  TimeUnit.NANOSECONDS));
83 <
84 <            assertEquals(1000000L*t*60*60*24,
85 <                         TimeUnit.MICROSECONDS.convert(t,
86 <                                                  TimeUnit.DAYS));
87 <            assertEquals(1000000L*t*60*60,
88 <                         TimeUnit.MICROSECONDS.convert(t,
89 <                                                  TimeUnit.HOURS));
90 <            assertEquals(1000000L*t*60,
91 <                         TimeUnit.MICROSECONDS.convert(t,
92 <                                                  TimeUnit.MINUTES));
93 <            assertEquals(1000000L*t,
94 <                         TimeUnit.MICROSECONDS.convert(t,
95 <                                                  TimeUnit.SECONDS));
96 <            assertEquals(1000L*t,
97 <                         TimeUnit.MICROSECONDS.convert(t,
98 <                                                  TimeUnit.MILLISECONDS));
99 <            assertEquals(t,
100 <                         TimeUnit.MICROSECONDS.convert(t,
101 <                                                  TimeUnit.MICROSECONDS));
102 <            assertEquals(t,
103 <                         TimeUnit.MICROSECONDS.convert(1000L*t,
104 <                                                  TimeUnit.NANOSECONDS));
105 <
106 <            assertEquals(1000000000L*t*60*60*24,
98 <                         TimeUnit.NANOSECONDS.convert(t,
99 <                                                  TimeUnit.DAYS));
100 <            assertEquals(1000000000L*t*60*60,
101 <                         TimeUnit.NANOSECONDS.convert(t,
102 <                                                  TimeUnit.HOURS));
103 <            assertEquals(1000000000L*t*60,
104 <                         TimeUnit.NANOSECONDS.convert(t,
105 <                                                  TimeUnit.MINUTES));
106 <            assertEquals(1000000000L*t,
107 <                         TimeUnit.NANOSECONDS.convert(t,
108 <                                                  TimeUnit.SECONDS));
109 <            assertEquals(1000000L*t,
110 <                         TimeUnit.NANOSECONDS.convert(t,
111 <                                                  TimeUnit.MILLISECONDS));
112 <            assertEquals(1000L*t,
113 <                         TimeUnit.NANOSECONDS.convert(t,
114 <                                                  TimeUnit.MICROSECONDS));
115 <            assertEquals(t,
116 <                         TimeUnit.NANOSECONDS.convert(t,
117 <                                                  TimeUnit.NANOSECONDS));
39 >            assertEquals(t*60*60*24,
40 >                         SECONDS.convert(t, DAYS));
41 >            assertEquals(t*60*60,
42 >                         SECONDS.convert(t, HOURS));
43 >            assertEquals(t*60,
44 >                         SECONDS.convert(t, MINUTES));
45 >            assertEquals(t,
46 >                         SECONDS.convert(t, SECONDS));
47 >            assertEquals(t,
48 >                         SECONDS.convert(1000L*t, MILLISECONDS));
49 >            assertEquals(t,
50 >                         SECONDS.convert(1000000L*t, MICROSECONDS));
51 >            assertEquals(t,
52 >                         SECONDS.convert(1000000000L*t, NANOSECONDS));
53 >
54 >            assertEquals(1000L*t*60*60*24,
55 >                         MILLISECONDS.convert(t, DAYS));
56 >            assertEquals(1000L*t*60*60,
57 >                         MILLISECONDS.convert(t, HOURS));
58 >            assertEquals(1000L*t*60,
59 >                         MILLISECONDS.convert(t, MINUTES));
60 >            assertEquals(1000L*t,
61 >                         MILLISECONDS.convert(t, SECONDS));
62 >            assertEquals(t,
63 >                         MILLISECONDS.convert(t, MILLISECONDS));
64 >            assertEquals(t,
65 >                         MILLISECONDS.convert(1000L*t, MICROSECONDS));
66 >            assertEquals(t,
67 >                         MILLISECONDS.convert(1000000L*t, NANOSECONDS));
68 >
69 >            assertEquals(1000000L*t*60*60*24,
70 >                         MICROSECONDS.convert(t, DAYS));
71 >            assertEquals(1000000L*t*60*60,
72 >                         MICROSECONDS.convert(t, HOURS));
73 >            assertEquals(1000000L*t*60,
74 >                         MICROSECONDS.convert(t, MINUTES));
75 >            assertEquals(1000000L*t,
76 >                         MICROSECONDS.convert(t, SECONDS));
77 >            assertEquals(1000L*t,
78 >                         MICROSECONDS.convert(t, MILLISECONDS));
79 >            assertEquals(t,
80 >                         MICROSECONDS.convert(t, MICROSECONDS));
81 >            assertEquals(t,
82 >                         MICROSECONDS.convert(1000L*t, NANOSECONDS));
83 >
84 >            assertEquals(1000000000L*t*60*60*24,
85 >                         NANOSECONDS.convert(t, DAYS));
86 >            assertEquals(1000000000L*t*60*60,
87 >                         NANOSECONDS.convert(t, HOURS));
88 >            assertEquals(1000000000L*t*60,
89 >                         NANOSECONDS.convert(t, MINUTES));
90 >            assertEquals(1000000000L*t,
91 >                         NANOSECONDS.convert(t, SECONDS));
92 >            assertEquals(1000000L*t,
93 >                         NANOSECONDS.convert(t, MILLISECONDS));
94 >            assertEquals(1000L*t,
95 >                         NANOSECONDS.convert(t, MICROSECONDS));
96 >            assertEquals(t,
97 >                         NANOSECONDS.convert(t, NANOSECONDS));
98 >        }
99 >
100 >        for (TimeUnit x : TimeUnit.values()) {
101 >            long[] zs = {
102 >                0, 1, -1,
103 >                Integer.MAX_VALUE, Integer.MIN_VALUE,
104 >                Long.MAX_VALUE, Long.MIN_VALUE,
105 >            };
106 >            for (long z : zs) assertEquals(z, x.convert(z, x));
107          }
108      }
109  
# Line 124 | Line 113 | public class TimeUnitTest extends JSR166
113       */
114      public void testToNanos() {
115          for (long t = 0; t < 88888; ++t) {
116 <            assertEquals(t*1000000000L*60*60*24,
117 <                         TimeUnit.DAYS.toNanos(t));
118 <            assertEquals(t*1000000000L*60*60,
119 <                         TimeUnit.HOURS.toNanos(t));
120 <            assertEquals(t*1000000000L*60,
121 <                         TimeUnit.MINUTES.toNanos(t));
122 <            assertEquals(1000000000L*t,
123 <                         TimeUnit.SECONDS.toNanos(t));
124 <            assertEquals(1000000L*t,
125 <                         TimeUnit.MILLISECONDS.toNanos(t));
126 <            assertEquals(1000L*t,
127 <                         TimeUnit.MICROSECONDS.toNanos(t));
128 <            assertEquals(t,
129 <                         TimeUnit.NANOSECONDS.toNanos(t));
116 >            assertEquals(t*1000000000L*60*60*24,
117 >                         DAYS.toNanos(t));
118 >            assertEquals(t*1000000000L*60*60,
119 >                         HOURS.toNanos(t));
120 >            assertEquals(t*1000000000L*60,
121 >                         MINUTES.toNanos(t));
122 >            assertEquals(1000000000L*t,
123 >                         SECONDS.toNanos(t));
124 >            assertEquals(1000000L*t,
125 >                         MILLISECONDS.toNanos(t));
126 >            assertEquals(1000L*t,
127 >                         MICROSECONDS.toNanos(t));
128 >            assertEquals(t,
129 >                         NANOSECONDS.toNanos(t));
130          }
131      }
132  
# Line 147 | Line 136 | public class TimeUnitTest extends JSR166
136       */
137      public void testToMicros() {
138          for (long t = 0; t < 88888; ++t) {
139 <            assertEquals(t*1000000L*60*60*24,
140 <                         TimeUnit.DAYS.toMicros(t));
141 <            assertEquals(t*1000000L*60*60,
142 <                         TimeUnit.HOURS.toMicros(t));
143 <            assertEquals(t*1000000L*60,
144 <                         TimeUnit.MINUTES.toMicros(t));
145 <            assertEquals(1000000L*t,
146 <                         TimeUnit.SECONDS.toMicros(t));
147 <            assertEquals(1000L*t,
148 <                         TimeUnit.MILLISECONDS.toMicros(t));
149 <            assertEquals(t,
150 <                         TimeUnit.MICROSECONDS.toMicros(t));
151 <            assertEquals(t,
152 <                         TimeUnit.NANOSECONDS.toMicros(t*1000L));
139 >            assertEquals(t*1000000L*60*60*24,
140 >                         DAYS.toMicros(t));
141 >            assertEquals(t*1000000L*60*60,
142 >                         HOURS.toMicros(t));
143 >            assertEquals(t*1000000L*60,
144 >                         MINUTES.toMicros(t));
145 >            assertEquals(1000000L*t,
146 >                         SECONDS.toMicros(t));
147 >            assertEquals(1000L*t,
148 >                         MILLISECONDS.toMicros(t));
149 >            assertEquals(t,
150 >                         MICROSECONDS.toMicros(t));
151 >            assertEquals(t,
152 >                         NANOSECONDS.toMicros(t*1000L));
153          }
154      }
155  
# Line 170 | Line 159 | public class TimeUnitTest extends JSR166
159       */
160      public void testToMillis() {
161          for (long t = 0; t < 88888; ++t) {
162 <            assertEquals(t*1000L*60*60*24,
163 <                         TimeUnit.DAYS.toMillis(t));
164 <            assertEquals(t*1000L*60*60,
165 <                         TimeUnit.HOURS.toMillis(t));
166 <            assertEquals(t*1000L*60,
167 <                         TimeUnit.MINUTES.toMillis(t));
168 <            assertEquals(1000L*t,
169 <                         TimeUnit.SECONDS.toMillis(t));
170 <            assertEquals(t,
171 <                         TimeUnit.MILLISECONDS.toMillis(t));
172 <            assertEquals(t,
173 <                         TimeUnit.MICROSECONDS.toMillis(t*1000L));
174 <            assertEquals(t,
175 <                         TimeUnit.NANOSECONDS.toMillis(t*1000000L));
162 >            assertEquals(t*1000L*60*60*24,
163 >                         DAYS.toMillis(t));
164 >            assertEquals(t*1000L*60*60,
165 >                         HOURS.toMillis(t));
166 >            assertEquals(t*1000L*60,
167 >                         MINUTES.toMillis(t));
168 >            assertEquals(1000L*t,
169 >                         SECONDS.toMillis(t));
170 >            assertEquals(t,
171 >                         MILLISECONDS.toMillis(t));
172 >            assertEquals(t,
173 >                         MICROSECONDS.toMillis(t*1000L));
174 >            assertEquals(t,
175 >                         NANOSECONDS.toMillis(t*1000000L));
176          }
177      }
178  
# Line 193 | Line 182 | public class TimeUnitTest extends JSR166
182       */
183      public void testToSeconds() {
184          for (long t = 0; t < 88888; ++t) {
185 <            assertEquals(t*60*60*24,
186 <                         TimeUnit.DAYS.toSeconds(t));
187 <            assertEquals(t*60*60,
188 <                         TimeUnit.HOURS.toSeconds(t));
189 <            assertEquals(t*60,
190 <                         TimeUnit.MINUTES.toSeconds(t));
191 <            assertEquals(t,
192 <                         TimeUnit.SECONDS.toSeconds(t));
193 <            assertEquals(t,
194 <                         TimeUnit.MILLISECONDS.toSeconds(t*1000L));
195 <            assertEquals(t,
196 <                         TimeUnit.MICROSECONDS.toSeconds(t*1000000L));
197 <            assertEquals(t,
198 <                         TimeUnit.NANOSECONDS.toSeconds(t*1000000000L));
185 >            assertEquals(t*60*60*24,
186 >                         DAYS.toSeconds(t));
187 >            assertEquals(t*60*60,
188 >                         HOURS.toSeconds(t));
189 >            assertEquals(t*60,
190 >                         MINUTES.toSeconds(t));
191 >            assertEquals(t,
192 >                         SECONDS.toSeconds(t));
193 >            assertEquals(t,
194 >                         MILLISECONDS.toSeconds(t*1000L));
195 >            assertEquals(t,
196 >                         MICROSECONDS.toSeconds(t*1000000L));
197 >            assertEquals(t,
198 >                         NANOSECONDS.toSeconds(t*1000000000L));
199          }
200      }
201  
# Line 216 | Line 205 | public class TimeUnitTest extends JSR166
205       */
206      public void testToMinutes() {
207          for (long t = 0; t < 88888; ++t) {
208 <            assertEquals(t*60*24,
209 <                         TimeUnit.DAYS.toMinutes(t));
210 <            assertEquals(t*60,
211 <                         TimeUnit.HOURS.toMinutes(t));
212 <            assertEquals(t,
213 <                         TimeUnit.MINUTES.toMinutes(t));
214 <            assertEquals(t,
215 <                         TimeUnit.SECONDS.toMinutes(t*60));
216 <            assertEquals(t,
217 <                         TimeUnit.MILLISECONDS.toMinutes(t*1000L*60));
218 <            assertEquals(t,
219 <                         TimeUnit.MICROSECONDS.toMinutes(t*1000000L*60));
220 <            assertEquals(t,
221 <                         TimeUnit.NANOSECONDS.toMinutes(t*1000000000L*60));
208 >            assertEquals(t*60*24,
209 >                         DAYS.toMinutes(t));
210 >            assertEquals(t*60,
211 >                         HOURS.toMinutes(t));
212 >            assertEquals(t,
213 >                         MINUTES.toMinutes(t));
214 >            assertEquals(t,
215 >                         SECONDS.toMinutes(t*60));
216 >            assertEquals(t,
217 >                         MILLISECONDS.toMinutes(t*1000L*60));
218 >            assertEquals(t,
219 >                         MICROSECONDS.toMinutes(t*1000000L*60));
220 >            assertEquals(t,
221 >                         NANOSECONDS.toMinutes(t*1000000000L*60));
222          }
223      }
224  
# Line 239 | Line 228 | public class TimeUnitTest extends JSR166
228       */
229      public void testToHours() {
230          for (long t = 0; t < 88888; ++t) {
231 <            assertEquals(t*24,
232 <                         TimeUnit.DAYS.toHours(t));
233 <            assertEquals(t,
234 <                         TimeUnit.HOURS.toHours(t));
235 <            assertEquals(t,
236 <                         TimeUnit.MINUTES.toHours(t*60));
237 <            assertEquals(t,
238 <                         TimeUnit.SECONDS.toHours(t*60*60));
239 <            assertEquals(t,
240 <                         TimeUnit.MILLISECONDS.toHours(t*1000L*60*60));
241 <            assertEquals(t,
242 <                         TimeUnit.MICROSECONDS.toHours(t*1000000L*60*60));
243 <            assertEquals(t,
244 <                         TimeUnit.NANOSECONDS.toHours(t*1000000000L*60*60));
231 >            assertEquals(t*24,
232 >                         DAYS.toHours(t));
233 >            assertEquals(t,
234 >                         HOURS.toHours(t));
235 >            assertEquals(t,
236 >                         MINUTES.toHours(t*60));
237 >            assertEquals(t,
238 >                         SECONDS.toHours(t*60*60));
239 >            assertEquals(t,
240 >                         MILLISECONDS.toHours(t*1000L*60*60));
241 >            assertEquals(t,
242 >                         MICROSECONDS.toHours(t*1000000L*60*60));
243 >            assertEquals(t,
244 >                         NANOSECONDS.toHours(t*1000000000L*60*60));
245          }
246      }
247  
# Line 262 | Line 251 | public class TimeUnitTest extends JSR166
251       */
252      public void testToDays() {
253          for (long t = 0; t < 88888; ++t) {
254 <            assertEquals(t,
255 <                         TimeUnit.DAYS.toDays(t));
256 <            assertEquals(t,
257 <                         TimeUnit.HOURS.toDays(t*24));
258 <            assertEquals(t,
259 <                         TimeUnit.MINUTES.toDays(t*60*24));
260 <            assertEquals(t,
261 <                         TimeUnit.SECONDS.toDays(t*60*60*24));
262 <            assertEquals(t,
263 <                         TimeUnit.MILLISECONDS.toDays(t*1000L*60*60*24));
264 <            assertEquals(t,
265 <                         TimeUnit.MICROSECONDS.toDays(t*1000000L*60*60*24));
266 <            assertEquals(t,
267 <                         TimeUnit.NANOSECONDS.toDays(t*1000000000L*60*60*24));
254 >            assertEquals(t,
255 >                         DAYS.toDays(t));
256 >            assertEquals(t,
257 >                         HOURS.toDays(t*24));
258 >            assertEquals(t,
259 >                         MINUTES.toDays(t*60*24));
260 >            assertEquals(t,
261 >                         SECONDS.toDays(t*60*60*24));
262 >            assertEquals(t,
263 >                         MILLISECONDS.toDays(t*1000L*60*60*24));
264 >            assertEquals(t,
265 >                         MICROSECONDS.toDays(t*1000000L*60*60*24));
266 >            assertEquals(t,
267 >                         NANOSECONDS.toDays(t*1000000000L*60*60*24));
268          }
269      }
270  
282
271      /**
272 <     * convert saturates positive too-large values to Long.MAX_VALUE
272 >     * convert saturates positive too-large values to Long.MAX_VALUE
273       * and negative to LONG.MIN_VALUE
274       */
275      public void testConvertSaturate() {
276          assertEquals(Long.MAX_VALUE,
277 <                     TimeUnit.NANOSECONDS.convert(Long.MAX_VALUE / 2,
290 <                                                  TimeUnit.SECONDS));
277 >                     NANOSECONDS.convert(Long.MAX_VALUE / 2, SECONDS));
278          assertEquals(Long.MIN_VALUE,
279 <                     TimeUnit.NANOSECONDS.convert(-Long.MAX_VALUE / 4,
293 <                                                  TimeUnit.SECONDS));
279 >                     NANOSECONDS.convert(-Long.MAX_VALUE / 4, SECONDS));
280          assertEquals(Long.MAX_VALUE,
281 <                     TimeUnit.NANOSECONDS.convert(Long.MAX_VALUE / 2,
296 <                                                  TimeUnit.MINUTES));
281 >                     NANOSECONDS.convert(Long.MAX_VALUE / 2, MINUTES));
282          assertEquals(Long.MIN_VALUE,
283 <                     TimeUnit.NANOSECONDS.convert(-Long.MAX_VALUE / 4,
299 <                                                  TimeUnit.MINUTES));
283 >                     NANOSECONDS.convert(-Long.MAX_VALUE / 4, MINUTES));
284          assertEquals(Long.MAX_VALUE,
285 <                     TimeUnit.NANOSECONDS.convert(Long.MAX_VALUE / 2,
302 <                                                  TimeUnit.HOURS));
285 >                     NANOSECONDS.convert(Long.MAX_VALUE / 2, HOURS));
286          assertEquals(Long.MIN_VALUE,
287 <                     TimeUnit.NANOSECONDS.convert(-Long.MAX_VALUE / 4,
305 <                                                  TimeUnit.HOURS));
287 >                     NANOSECONDS.convert(-Long.MAX_VALUE / 4, HOURS));
288          assertEquals(Long.MAX_VALUE,
289 <                     TimeUnit.NANOSECONDS.convert(Long.MAX_VALUE / 2,
308 <                                                  TimeUnit.DAYS));
289 >                     NANOSECONDS.convert(Long.MAX_VALUE / 2, DAYS));
290          assertEquals(Long.MIN_VALUE,
291 <                     TimeUnit.NANOSECONDS.convert(-Long.MAX_VALUE / 4,
311 <                                                  TimeUnit.DAYS));
291 >                     NANOSECONDS.convert(-Long.MAX_VALUE / 4, DAYS));
292  
293 +        for (TimeUnit x : TimeUnit.values())
294 +            for (TimeUnit y : TimeUnit.values()) {
295 +                long ratio = x.toNanos(1) / y.toNanos(1);
296 +                if (ratio >= 1) {
297 +                    assertEquals(ratio, y.convert(1, x));
298 +                    assertEquals(1, x.convert(ratio, y));
299 +                    long max = Long.MAX_VALUE/ratio;
300 +                    assertEquals(max * ratio, y.convert(max, x));
301 +                    assertEquals(-max * ratio, y.convert(-max, x));
302 +                    assertEquals(max, x.convert(max * ratio, y));
303 +                    assertEquals(-max, x.convert(-max * ratio, y));
304 +                    if (max < Long.MAX_VALUE) {
305 +                        assertEquals(Long.MAX_VALUE, y.convert(max + 1, x));
306 +                        assertEquals(Long.MIN_VALUE, y.convert(-max - 1, x));
307 +                        assertEquals(Long.MIN_VALUE, y.convert(Long.MIN_VALUE + 1, x));
308 +                    }
309 +                    assertEquals(Long.MAX_VALUE, y.convert(Long.MAX_VALUE, x));
310 +                    assertEquals(Long.MIN_VALUE, y.convert(Long.MIN_VALUE, x));
311 +                }
312 +            }
313      }
314  
315      /**
316 <     * toNanos saturates positive too-large values to Long.MAX_VALUE
316 >     * toNanos saturates positive too-large values to Long.MAX_VALUE
317       * and negative to LONG.MIN_VALUE
318       */
319      public void testToNanosSaturate() {
320 <            assertEquals(Long.MAX_VALUE,
321 <                         TimeUnit.MILLISECONDS.toNanos(Long.MAX_VALUE / 2));
322 <            assertEquals(Long.MIN_VALUE,
323 <                         TimeUnit.MILLISECONDS.toNanos(-Long.MAX_VALUE / 3));
320 >        assertEquals(Long.MAX_VALUE,
321 >                     MILLISECONDS.toNanos(Long.MAX_VALUE / 2));
322 >        assertEquals(Long.MIN_VALUE,
323 >                     MILLISECONDS.toNanos(-Long.MAX_VALUE / 3));
324 >
325 >        for (TimeUnit x : TimeUnit.values()) {
326 >            long ratio = x.toNanos(1) / NANOSECONDS.toNanos(1);
327 >            if (ratio >= 1) {
328 >                long max = Long.MAX_VALUE/ratio;
329 >                for (long z : new long[] {0, 1, -1, max, -max})
330 >                    assertEquals(z * ratio, x.toNanos(z));
331 >                if (max < Long.MAX_VALUE) {
332 >                    assertEquals(Long.MAX_VALUE, x.toNanos(max + 1));
333 >                    assertEquals(Long.MIN_VALUE, x.toNanos(-max - 1));
334 >                    assertEquals(Long.MIN_VALUE, x.toNanos(Long.MIN_VALUE + 1));
335 >                }
336 >                assertEquals(Long.MAX_VALUE, x.toNanos(Long.MAX_VALUE));
337 >                assertEquals(Long.MIN_VALUE, x.toNanos(Long.MIN_VALUE));
338 >                if (max < Integer.MAX_VALUE) {
339 >                    assertEquals(Long.MAX_VALUE, x.toNanos(Integer.MAX_VALUE));
340 >                    assertEquals(Long.MIN_VALUE, x.toNanos(Integer.MIN_VALUE));
341 >                }
342 >            }
343 >        }
344      }
345  
346 +    /**
347 +     * toMicros saturates positive too-large values to Long.MAX_VALUE
348 +     * and negative to LONG.MIN_VALUE
349 +     */
350 +    public void testToMicrosSaturate() {
351 +        for (TimeUnit x : TimeUnit.values()) {
352 +            long ratio = x.toNanos(1) / MICROSECONDS.toNanos(1);
353 +            if (ratio >= 1) {
354 +                long max = Long.MAX_VALUE/ratio;
355 +                for (long z : new long[] {0, 1, -1, max, -max})
356 +                    assertEquals(z * ratio, x.toMicros(z));
357 +                if (max < Long.MAX_VALUE) {
358 +                    assertEquals(Long.MAX_VALUE, x.toMicros(max + 1));
359 +                    assertEquals(Long.MIN_VALUE, x.toMicros(-max - 1));
360 +                    assertEquals(Long.MIN_VALUE, x.toMicros(Long.MIN_VALUE + 1));
361 +                }
362 +                assertEquals(Long.MAX_VALUE, x.toMicros(Long.MAX_VALUE));
363 +                assertEquals(Long.MIN_VALUE, x.toMicros(Long.MIN_VALUE));
364 +                if (max < Integer.MAX_VALUE) {
365 +                    assertEquals(Long.MAX_VALUE, x.toMicros(Integer.MAX_VALUE));
366 +                    assertEquals(Long.MIN_VALUE, x.toMicros(Integer.MIN_VALUE));
367 +                }
368 +            }
369 +        }
370 +    }
371  
372      /**
373 <     * toString returns string containing common name of unit
373 >     * toMillis saturates positive too-large values to Long.MAX_VALUE
374 >     * and negative to LONG.MIN_VALUE
375       */
376 <    public void testToString() {
377 <        String s = TimeUnit.SECONDS.toString();
378 <        assertTrue(s.indexOf("ECOND") >= 0);
376 >    public void testToMillisSaturate() {
377 >        for (TimeUnit x : TimeUnit.values()) {
378 >            long ratio = x.toNanos(1) / MILLISECONDS.toNanos(1);
379 >            if (ratio >= 1) {
380 >                long max = Long.MAX_VALUE/ratio;
381 >                for (long z : new long[] {0, 1, -1, max, -max})
382 >                    assertEquals(z * ratio, x.toMillis(z));
383 >                if (max < Long.MAX_VALUE) {
384 >                    assertEquals(Long.MAX_VALUE, x.toMillis(max + 1));
385 >                    assertEquals(Long.MIN_VALUE, x.toMillis(-max - 1));
386 >                    assertEquals(Long.MIN_VALUE, x.toMillis(Long.MIN_VALUE + 1));
387 >                }
388 >                assertEquals(Long.MAX_VALUE, x.toMillis(Long.MAX_VALUE));
389 >                assertEquals(Long.MIN_VALUE, x.toMillis(Long.MIN_VALUE));
390 >                if (max < Integer.MAX_VALUE) {
391 >                    assertEquals(Long.MAX_VALUE, x.toMillis(Integer.MAX_VALUE));
392 >                    assertEquals(Long.MIN_VALUE, x.toMillis(Integer.MIN_VALUE));
393 >                }
394 >            }
395 >        }
396      }
397  
335    
398      /**
399 <     *  Timed wait without holding lock throws
400 <     *  IllegalMonitorStateException
399 >     * toSeconds saturates positive too-large values to Long.MAX_VALUE
400 >     * and negative to LONG.MIN_VALUE
401       */
402 <    public void testTimedWait_IllegalMonitorException() {
403 <        //created a new thread with anonymous runnable
402 >    public void testToSecondsSaturate() {
403 >        for (TimeUnit x : TimeUnit.values()) {
404 >            long ratio = x.toNanos(1) / SECONDS.toNanos(1);
405 >            if (ratio >= 1) {
406 >                long max = Long.MAX_VALUE/ratio;
407 >                for (long z : new long[] {0, 1, -1, max, -max})
408 >                    assertEquals(z * ratio, x.toSeconds(z));
409 >                if (max < Long.MAX_VALUE) {
410 >                    assertEquals(Long.MAX_VALUE, x.toSeconds(max + 1));
411 >                    assertEquals(Long.MIN_VALUE, x.toSeconds(-max - 1));
412 >                    assertEquals(Long.MIN_VALUE, x.toSeconds(Long.MIN_VALUE + 1));
413 >                }
414 >                assertEquals(Long.MAX_VALUE, x.toSeconds(Long.MAX_VALUE));
415 >                assertEquals(Long.MIN_VALUE, x.toSeconds(Long.MIN_VALUE));
416 >                if (max < Integer.MAX_VALUE) {
417 >                    assertEquals(Long.MAX_VALUE, x.toSeconds(Integer.MAX_VALUE));
418 >                    assertEquals(Long.MIN_VALUE, x.toSeconds(Integer.MIN_VALUE));
419 >                }
420 >            }
421 >        }
422 >    }
423  
424 <        Thread t = new Thread(new Runnable() {
425 <                public void run() {
426 <                    Object o = new Object();
427 <                    TimeUnit tu = TimeUnit.MILLISECONDS;
428 <                    try {
429 <                        tu.timedWait(o,LONG_DELAY_MS);
430 <                        threadShouldThrow();
431 <                    }
432 <                    catch (InterruptedException ie) {
433 <                        threadUnexpectedException();
434 <                    }
435 <                    catch(IllegalMonitorStateException success) {
436 <                    }
437 <                    
424 >    /**
425 >     * toMinutes saturates positive too-large values to Long.MAX_VALUE
426 >     * and negative to LONG.MIN_VALUE
427 >     */
428 >    public void testToMinutesSaturate() {
429 >        for (TimeUnit x : TimeUnit.values()) {
430 >            long ratio = x.toNanos(1) / MINUTES.toNanos(1);
431 >            if (ratio > 1) {
432 >                long max = Long.MAX_VALUE/ratio;
433 >                for (long z : new long[] {0, 1, -1, max, -max})
434 >                    assertEquals(z * ratio, x.toMinutes(z));
435 >                assertEquals(Long.MAX_VALUE, x.toMinutes(max + 1));
436 >                assertEquals(Long.MIN_VALUE, x.toMinutes(-max - 1));
437 >                assertEquals(Long.MAX_VALUE, x.toMinutes(Long.MAX_VALUE));
438 >                assertEquals(Long.MIN_VALUE, x.toMinutes(Long.MIN_VALUE));
439 >                assertEquals(Long.MIN_VALUE, x.toMinutes(Long.MIN_VALUE + 1));
440 >            }
441 >        }
442 >    }
443 >
444 >    /**
445 >     * toHours saturates positive too-large values to Long.MAX_VALUE
446 >     * and negative to LONG.MIN_VALUE
447 >     */
448 >    public void testToHoursSaturate() {
449 >        for (TimeUnit x : TimeUnit.values()) {
450 >            long ratio = x.toNanos(1) / HOURS.toNanos(1);
451 >            if (ratio >= 1) {
452 >                long max = Long.MAX_VALUE/ratio;
453 >                for (long z : new long[] {0, 1, -1, max, -max})
454 >                    assertEquals(z * ratio, x.toHours(z));
455 >                if (max < Long.MAX_VALUE) {
456 >                    assertEquals(Long.MAX_VALUE, x.toHours(max + 1));
457 >                    assertEquals(Long.MIN_VALUE, x.toHours(-max - 1));
458 >                    assertEquals(Long.MIN_VALUE, x.toHours(Long.MIN_VALUE + 1));
459                  }
460 <            });
461 <        t.start();
462 <        try {
361 <            Thread.sleep(SHORT_DELAY_MS);
362 <            t.interrupt();
363 <            t.join();
364 <        } catch(Exception e) {
365 <            unexpectedException();
460 >                assertEquals(Long.MAX_VALUE, x.toHours(Long.MAX_VALUE));
461 >                assertEquals(Long.MIN_VALUE, x.toHours(Long.MIN_VALUE));
462 >            }
463          }
464      }
465 <    
465 >
466 >    /**
467 >     * toString returns name of unit
468 >     */
469 >    public void testToString() {
470 >        assertEquals("SECONDS", SECONDS.toString());
471 >    }
472 >
473 >    /**
474 >     * name returns name of unit
475 >     */
476 >    public void testName() {
477 >        assertEquals("SECONDS", SECONDS.name());
478 >    }
479 >
480 >    /**
481 >     * Timed wait without holding lock throws
482 >     * IllegalMonitorStateException
483 >     */
484 >    public void testTimedWait_IllegalMonitorException() {
485 >        Thread t = newStartedThread(new CheckedRunnable() {
486 >            public void realRun() throws InterruptedException {
487 >                Object o = new Object();
488 >                TimeUnit tu = MILLISECONDS;
489 >
490 >                try {
491 >                    tu.timedWait(o, LONG_DELAY_MS);
492 >                    threadShouldThrow();
493 >                } catch (IllegalMonitorStateException success) {}
494 >            }});
495 >
496 >        awaitTermination(t);
497 >    }
498 >
499      /**
500       * timedWait throws InterruptedException when interrupted
501       */
502 <    public void testTimedWait() {
503 <        Thread t = new Thread(new Runnable() {
504 <                public void run() {
505 <                    Object o = new Object();
506 <                    
507 <                    TimeUnit tu = TimeUnit.MILLISECONDS;
508 <                    try {
509 <                        synchronized(o) {
510 <                            tu.timedWait(o,MEDIUM_DELAY_MS);
511 <                        }
512 <                        threadShouldThrow();
513 <                    }
514 <                    catch(InterruptedException success) {}
515 <                    catch(IllegalMonitorStateException failure) {
516 <                        threadUnexpectedException();
517 <                    }
518 <                }
519 <            });
520 <        t.start();
521 <        try {
522 <            Thread.sleep(SHORT_DELAY_MS);
523 <            t.interrupt();
524 <            t.join();
525 <        } catch(Exception e) {
526 <            unexpectedException();
527 <        }
502 >    public void testTimedWait_Interruptible() {
503 >        final CountDownLatch pleaseInterrupt = new CountDownLatch(1);
504 >        Thread t = newStartedThread(new CheckedRunnable() {
505 >            public void realRun() throws InterruptedException {
506 >                Object o = new Object();
507 >                TimeUnit tu = MILLISECONDS;
508 >
509 >                Thread.currentThread().interrupt();
510 >                try {
511 >                    synchronized (o) {
512 >                        tu.timedWait(o, LONG_DELAY_MS);
513 >                    }
514 >                    shouldThrow();
515 >                } catch (InterruptedException success) {}
516 >                assertFalse(Thread.interrupted());
517 >
518 >                pleaseInterrupt.countDown();
519 >                try {
520 >                    synchronized (o) {
521 >                        tu.timedWait(o, LONG_DELAY_MS);
522 >                    }
523 >                    shouldThrow();
524 >                } catch (InterruptedException success) {}
525 >                assertFalse(Thread.interrupted());
526 >            }});
527 >
528 >        await(pleaseInterrupt);
529 >        assertThreadBlocks(t, Thread.State.TIMED_WAITING);
530 >        t.interrupt();
531 >        awaitTermination(t);
532      }
533 <    
400 <    
533 >
534      /**
535       * timedJoin throws InterruptedException when interrupted
536       */
537 <    public void testTimedJoin() {
538 <        Thread t = new Thread(new Runnable() {
539 <                public void run() {
540 <                    TimeUnit tu = TimeUnit.MILLISECONDS;        
541 <                    try {
542 <                        Thread s = new Thread(new Runnable() {
543 <                                public void run() {
544 <                                    try {
545 <                                        Thread.sleep(MEDIUM_DELAY_MS);
546 <                                    } catch(InterruptedException success){}
547 <                                }
548 <                            });
549 <                        s.start();
550 <                        tu.timedJoin(s,MEDIUM_DELAY_MS);
551 <                        threadShouldThrow();
552 <                    }
553 <                    catch(Exception e) {}
554 <                }
555 <            });
556 <        t.start();
557 <        try {
558 <            Thread.sleep(SHORT_DELAY_MS);
559 <            t.interrupt();
560 <            t.join();
561 <        } catch(Exception e) {
562 <            unexpectedException();
563 <        }
564 <    }
565 <    
566 <    /**
567 <     *  timedSleep throws InterruptedException when interrupted
568 <     */
569 <    public void testTimedSleep() {
570 <        //created a new thread with anonymous runnable
571 <
572 <        Thread t = new Thread(new Runnable() {
573 <                public void run() {
574 <                    TimeUnit tu = TimeUnit.MILLISECONDS;
575 <                    try {
576 <                        tu.sleep(MEDIUM_DELAY_MS);
577 <                        threadShouldThrow();
578 <                    }
579 <                    catch(InterruptedException success) {}
580 <                }
581 <            });
582 <        t.start();
583 <        try {
584 <            Thread.sleep(SHORT_DELAY_MS);
585 <            t.interrupt();
586 <            t.join();
587 <        } catch(Exception e) {
588 <            unexpectedException();
589 <        }
590 <    }
591 <
592 <    /**
593 <     * a deserialized serialized unit is equal
594 <     */
595 <    public void testSerialization() {
596 <        TimeUnit q = TimeUnit.MILLISECONDS;
597 <
598 <        try {
599 <            ByteArrayOutputStream bout = new ByteArrayOutputStream(10000);
600 <            ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(bout));
601 <            out.writeObject(q);
602 <            out.close();
603 <
471 <            ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray());
472 <            ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin));
473 <            TimeUnit r = (TimeUnit)in.readObject();
474 <            
475 <            assertEquals(q.toString(), r.toString());
476 <        } catch(Exception e){
477 <            e.printStackTrace();
478 <            unexpectedException();
479 <        }
537 >    public void testTimedJoin_Interruptible() {
538 >        final CountDownLatch pleaseInterrupt = new CountDownLatch(1);
539 >        final Thread s = newStartedThread(new CheckedInterruptedRunnable() {
540 >            public void realRun() throws InterruptedException {
541 >                Thread.sleep(LONG_DELAY_MS);
542 >            }});
543 >        final Thread t = newStartedThread(new CheckedRunnable() {
544 >            public void realRun() throws InterruptedException {
545 >                TimeUnit tu = MILLISECONDS;
546 >                Thread.currentThread().interrupt();
547 >                try {
548 >                    tu.timedJoin(s, LONG_DELAY_MS);
549 >                    shouldThrow();
550 >                } catch (InterruptedException success) {}
551 >                assertFalse(Thread.interrupted());
552 >
553 >                pleaseInterrupt.countDown();
554 >                try {
555 >                    tu.timedJoin(s, LONG_DELAY_MS);
556 >                    shouldThrow();
557 >                } catch (InterruptedException success) {}
558 >                assertFalse(Thread.interrupted());
559 >            }});
560 >
561 >        await(pleaseInterrupt);
562 >        assertThreadBlocks(t, Thread.State.TIMED_WAITING);
563 >        t.interrupt();
564 >        awaitTermination(t);
565 >        s.interrupt();
566 >        awaitTermination(s);
567 >    }
568 >
569 >    /**
570 >     * timedSleep throws InterruptedException when interrupted
571 >     */
572 >    public void testTimedSleep_Interruptible() {
573 >        final CountDownLatch pleaseInterrupt = new CountDownLatch(1);
574 >        Thread t = newStartedThread(new CheckedRunnable() {
575 >            public void realRun() throws InterruptedException {
576 >                TimeUnit tu = MILLISECONDS;
577 >                Thread.currentThread().interrupt();
578 >                try {
579 >                    tu.sleep(LONG_DELAY_MS);
580 >                    shouldThrow();
581 >                } catch (InterruptedException success) {}
582 >                assertFalse(Thread.interrupted());
583 >
584 >                pleaseInterrupt.countDown();
585 >                try {
586 >                    tu.sleep(LONG_DELAY_MS);
587 >                    shouldThrow();
588 >                } catch (InterruptedException success) {}
589 >                assertFalse(Thread.interrupted());
590 >            }});
591 >
592 >        await(pleaseInterrupt);
593 >        assertThreadBlocks(t, Thread.State.TIMED_WAITING);
594 >        t.interrupt();
595 >        awaitTermination(t);
596 >    }
597 >
598 >    /**
599 >     * a deserialized serialized unit is the same instance
600 >     */
601 >    public void testSerialization() throws Exception {
602 >        for (TimeUnit x : TimeUnit.values())
603 >            assertSame(x, serialClone(x));
604      }
605  
606   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines