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.23 by jsr166, Tue Sep 24 16:48:52 2013 UTC vs.
Revision 1.31 by jsr166, Sat May 13 23:50:00 2017 UTC

# Line 6 | Line 6
6   * Pat Fisher, Mike Judd.
7   */
8  
9 < import junit.framework.*;
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 java.util.concurrent.CountDownLatch;
18   import java.util.concurrent.TimeUnit;
19 < import static 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  
28      public static Test suite() {
# Line 87 | Line 96 | public class TimeUnitTest extends JSR166
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  
110      /**
# Line 271 | Line 289 | public class TimeUnitTest extends JSR166
289                       NANOSECONDS.convert(Long.MAX_VALUE / 2, DAYS));
290          assertEquals(Long.MIN_VALUE,
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      /**
# Line 282 | Line 321 | public class TimeUnitTest extends JSR166
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 +     * toMillis saturates positive too-large values to Long.MAX_VALUE
374 +     * and negative to LONG.MIN_VALUE
375 +     */
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 +
398 +    /**
399 +     * toSeconds saturates positive too-large values to Long.MAX_VALUE
400 +     * and negative to LONG.MIN_VALUE
401 +     */
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 +    /**
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 +                assertEquals(Long.MAX_VALUE, x.toHours(Long.MAX_VALUE));
461 +                assertEquals(Long.MIN_VALUE, x.toHours(Long.MIN_VALUE));
462 +            }
463 +        }
464      }
465  
466      /**
# Line 347 | Line 526 | public class TimeUnitTest extends JSR166
526              }});
527  
528          await(pleaseInterrupt);
529 <        assertThreadStaysAlive(t);
529 >        assertThreadBlocks(t, Thread.State.TIMED_WAITING);
530          t.interrupt();
531          awaitTermination(t);
532      }
# Line 380 | Line 559 | public class TimeUnitTest extends JSR166
559              }});
560  
561          await(pleaseInterrupt);
562 <        assertThreadStaysAlive(t);
562 >        assertThreadBlocks(t, Thread.State.TIMED_WAITING);
563          t.interrupt();
564          awaitTermination(t);
565          s.interrupt();
# Line 411 | Line 590 | public class TimeUnitTest extends JSR166
590              }});
591  
592          await(pleaseInterrupt);
593 <        assertThreadStaysAlive(t);
593 >        assertThreadBlocks(t, Thread.State.TIMED_WAITING);
594          t.interrupt();
595          awaitTermination(t);
596      }
# Line 420 | Line 599 | public class TimeUnitTest extends JSR166
599       * a deserialized serialized unit is the same instance
600       */
601      public void testSerialization() throws Exception {
602 <        TimeUnit x = MILLISECONDS;
603 <        assertSame(x, serialClone(x));
602 >        for (TimeUnit x : TimeUnit.values())
603 >            assertSame(x, serialClone(x));
604      }
605  
606   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines