--- jsr166/src/test/tck/TimeUnitTest.java 2003/12/29 19:05:40 1.7 +++ jsr166/src/test/tck/TimeUnitTest.java 2009/11/16 05:30:08 1.12 @@ -2,8 +2,8 @@ * Written by Doug Lea with assistance from members of JCP JSR-166 * Expert Group and released to the public domain, as explained at * http://creativecommons.org/licenses/publicdomain - * Other contributors include Andrew Wright, Jeffrey Hayes, - * Pat Fisher, Mike Judd. + * Other contributors include Andrew Wright, Jeffrey Hayes, + * Pat Fisher, Mike Judd. */ @@ -13,65 +13,107 @@ import java.io.*; public class TimeUnitTest extends JSR166TestCase { public static void main(String[] args) { - junit.textui.TestRunner.run(suite()); + junit.textui.TestRunner.run(suite()); } - + public static Test suite() { return new TestSuite(TimeUnitTest.class); } + // (loops to 88888 check increments at all time divisions.) + /** - * convert correctly converts sample values across the four units + * convert correctly converts sample values across the units */ public void testConvert() { - for (long t = 0; t < 10; ++t) { - assertEquals(t, - TimeUnit.SECONDS.convert(t, + for (long t = 0; t < 88888; ++t) { + assertEquals(t*60*60*24, + TimeUnit.SECONDS.convert(t, + TimeUnit.DAYS)); + assertEquals(t*60*60, + TimeUnit.SECONDS.convert(t, + TimeUnit.HOURS)); + assertEquals(t*60, + TimeUnit.SECONDS.convert(t, + TimeUnit.MINUTES)); + assertEquals(t, + TimeUnit.SECONDS.convert(t, TimeUnit.SECONDS)); - assertEquals(t, - TimeUnit.SECONDS.convert(1000 * t, + assertEquals(t, + TimeUnit.SECONDS.convert(1000L*t, TimeUnit.MILLISECONDS)); - assertEquals(t, - TimeUnit.SECONDS.convert(1000000 * t, + assertEquals(t, + TimeUnit.SECONDS.convert(1000000L*t, TimeUnit.MICROSECONDS)); - assertEquals(t, - TimeUnit.SECONDS.convert(1000000000 * t, + assertEquals(t, + TimeUnit.SECONDS.convert(1000000000L*t, TimeUnit.NANOSECONDS)); - assertEquals(1000 * t, - TimeUnit.MILLISECONDS.convert(t, + + + assertEquals(1000L*t*60*60*24, + TimeUnit.MILLISECONDS.convert(t, + TimeUnit.DAYS)); + assertEquals(1000L*t*60*60, + TimeUnit.MILLISECONDS.convert(t, + TimeUnit.HOURS)); + assertEquals(1000L*t*60, + TimeUnit.MILLISECONDS.convert(t, + TimeUnit.MINUTES)); + assertEquals(1000L*t, + TimeUnit.MILLISECONDS.convert(t, TimeUnit.SECONDS)); - assertEquals(t, - TimeUnit.MILLISECONDS.convert(t, + assertEquals(t, + TimeUnit.MILLISECONDS.convert(t, TimeUnit.MILLISECONDS)); - assertEquals(t, - TimeUnit.MILLISECONDS.convert(1000 * t, + assertEquals(t, + TimeUnit.MILLISECONDS.convert(1000L*t, TimeUnit.MICROSECONDS)); - assertEquals(t, - TimeUnit.MILLISECONDS.convert(1000000 * t, + assertEquals(t, + TimeUnit.MILLISECONDS.convert(1000000L*t, TimeUnit.NANOSECONDS)); - assertEquals(1000000 * t, - TimeUnit.MICROSECONDS.convert(t, + + assertEquals(1000000L*t*60*60*24, + TimeUnit.MICROSECONDS.convert(t, + TimeUnit.DAYS)); + assertEquals(1000000L*t*60*60, + TimeUnit.MICROSECONDS.convert(t, + TimeUnit.HOURS)); + assertEquals(1000000L*t*60, + TimeUnit.MICROSECONDS.convert(t, + TimeUnit.MINUTES)); + assertEquals(1000000L*t, + TimeUnit.MICROSECONDS.convert(t, TimeUnit.SECONDS)); - assertEquals(1000 * t, - TimeUnit.MICROSECONDS.convert(t, + assertEquals(1000L*t, + TimeUnit.MICROSECONDS.convert(t, TimeUnit.MILLISECONDS)); - assertEquals(t, - TimeUnit.MICROSECONDS.convert(t, + assertEquals(t, + TimeUnit.MICROSECONDS.convert(t, TimeUnit.MICROSECONDS)); - assertEquals(t, - TimeUnit.MICROSECONDS.convert(1000 * t, + assertEquals(t, + TimeUnit.MICROSECONDS.convert(1000L*t, TimeUnit.NANOSECONDS)); - assertEquals(1000000000 * t, - TimeUnit.NANOSECONDS.convert(t, + + assertEquals(1000000000L*t*60*60*24, + TimeUnit.NANOSECONDS.convert(t, + TimeUnit.DAYS)); + assertEquals(1000000000L*t*60*60, + TimeUnit.NANOSECONDS.convert(t, + TimeUnit.HOURS)); + assertEquals(1000000000L*t*60, + TimeUnit.NANOSECONDS.convert(t, + TimeUnit.MINUTES)); + assertEquals(1000000000L*t, + TimeUnit.NANOSECONDS.convert(t, TimeUnit.SECONDS)); - assertEquals(1000000 * t, - TimeUnit.NANOSECONDS.convert(t, + assertEquals(1000000L*t, + TimeUnit.NANOSECONDS.convert(t, TimeUnit.MILLISECONDS)); - assertEquals(1000 * t, - TimeUnit.NANOSECONDS.convert(t, + assertEquals(1000L*t, + TimeUnit.NANOSECONDS.convert(t, TimeUnit.MICROSECONDS)); - assertEquals(t, - TimeUnit.NANOSECONDS.convert(t, + assertEquals(t, + TimeUnit.NANOSECONDS.convert(t, TimeUnit.NANOSECONDS)); } } @@ -81,15 +123,20 @@ public class TimeUnitTest extends JSR166 * nanoseconds */ public void testToNanos() { - for (long t = 0; t < 10; ++t) { - assertEquals(1000000000 * t, + for (long t = 0; t < 88888; ++t) { + assertEquals(t*1000000000L*60*60*24, + TimeUnit.DAYS.toNanos(t)); + assertEquals(t*1000000000L*60*60, + TimeUnit.HOURS.toNanos(t)); + assertEquals(t*1000000000L*60, + TimeUnit.MINUTES.toNanos(t)); + assertEquals(1000000000L*t, TimeUnit.SECONDS.toNanos(t)); - - assertEquals(1000000 * t, + assertEquals(1000000L*t, TimeUnit.MILLISECONDS.toNanos(t)); - assertEquals(1000 * t, + assertEquals(1000L*t, TimeUnit.MICROSECONDS.toNanos(t)); - assertEquals(t, + assertEquals(t, TimeUnit.NANOSECONDS.toNanos(t)); } } @@ -99,16 +146,21 @@ public class TimeUnitTest extends JSR166 * microseconds */ public void testToMicros() { - for (long t = 0; t < 10; ++t) { - assertEquals(1000000 * t, + for (long t = 0; t < 88888; ++t) { + assertEquals(t*1000000L*60*60*24, + TimeUnit.DAYS.toMicros(t)); + assertEquals(t*1000000L*60*60, + TimeUnit.HOURS.toMicros(t)); + assertEquals(t*1000000L*60, + TimeUnit.MINUTES.toMicros(t)); + assertEquals(1000000L*t, TimeUnit.SECONDS.toMicros(t)); - - assertEquals(1000 * t, + assertEquals(1000L*t, TimeUnit.MILLISECONDS.toMicros(t)); - assertEquals(t, + assertEquals(t, TimeUnit.MICROSECONDS.toMicros(t)); - assertEquals(t, - TimeUnit.NANOSECONDS.toMicros(t * 1000)); + assertEquals(t, + TimeUnit.NANOSECONDS.toMicros(t*1000L)); } } @@ -117,16 +169,21 @@ public class TimeUnitTest extends JSR166 * milliseconds */ public void testToMillis() { - for (long t = 0; t < 10; ++t) { - assertEquals(1000 * t, + for (long t = 0; t < 88888; ++t) { + assertEquals(t*1000L*60*60*24, + TimeUnit.DAYS.toMillis(t)); + assertEquals(t*1000L*60*60, + TimeUnit.HOURS.toMillis(t)); + assertEquals(t*1000L*60, + TimeUnit.MINUTES.toMillis(t)); + assertEquals(1000L*t, TimeUnit.SECONDS.toMillis(t)); - - assertEquals(t, + assertEquals(t, TimeUnit.MILLISECONDS.toMillis(t)); - assertEquals(t, - TimeUnit.MICROSECONDS.toMillis(t * 1000)); - assertEquals(t, - TimeUnit.NANOSECONDS.toMillis(t * 1000000)); + assertEquals(t, + TimeUnit.MICROSECONDS.toMillis(t*1000L)); + assertEquals(t, + TimeUnit.NANOSECONDS.toMillis(t*1000000L)); } } @@ -135,22 +192,96 @@ public class TimeUnitTest extends JSR166 * seconds */ public void testToSeconds() { - for (long t = 0; t < 10; ++t) { - assertEquals(t, + for (long t = 0; t < 88888; ++t) { + assertEquals(t*60*60*24, + TimeUnit.DAYS.toSeconds(t)); + assertEquals(t*60*60, + TimeUnit.HOURS.toSeconds(t)); + assertEquals(t*60, + TimeUnit.MINUTES.toSeconds(t)); + assertEquals(t, TimeUnit.SECONDS.toSeconds(t)); + assertEquals(t, + TimeUnit.MILLISECONDS.toSeconds(t*1000L)); + assertEquals(t, + TimeUnit.MICROSECONDS.toSeconds(t*1000000L)); + assertEquals(t, + TimeUnit.NANOSECONDS.toSeconds(t*1000000000L)); + } + } - assertEquals(t, - TimeUnit.MILLISECONDS.toSeconds(t * 1000)); - assertEquals(t, - TimeUnit.MICROSECONDS.toSeconds(t * 1000000)); - assertEquals(t, - TimeUnit.NANOSECONDS.toSeconds(t * 1000000000)); + /** + * toMinutes correctly converts sample values in different units to + * minutes + */ + public void testToMinutes() { + for (long t = 0; t < 88888; ++t) { + assertEquals(t*60*24, + TimeUnit.DAYS.toMinutes(t)); + assertEquals(t*60, + TimeUnit.HOURS.toMinutes(t)); + assertEquals(t, + TimeUnit.MINUTES.toMinutes(t)); + assertEquals(t, + TimeUnit.SECONDS.toMinutes(t*60)); + assertEquals(t, + TimeUnit.MILLISECONDS.toMinutes(t*1000L*60)); + assertEquals(t, + TimeUnit.MICROSECONDS.toMinutes(t*1000000L*60)); + assertEquals(t, + TimeUnit.NANOSECONDS.toMinutes(t*1000000000L*60)); + } + } + + /** + * toHours correctly converts sample values in different units to + * hours + */ + public void testToHours() { + for (long t = 0; t < 88888; ++t) { + assertEquals(t*24, + TimeUnit.DAYS.toHours(t)); + assertEquals(t, + TimeUnit.HOURS.toHours(t)); + assertEquals(t, + TimeUnit.MINUTES.toHours(t*60)); + assertEquals(t, + TimeUnit.SECONDS.toHours(t*60*60)); + assertEquals(t, + TimeUnit.MILLISECONDS.toHours(t*1000L*60*60)); + assertEquals(t, + TimeUnit.MICROSECONDS.toHours(t*1000000L*60*60)); + assertEquals(t, + TimeUnit.NANOSECONDS.toHours(t*1000000000L*60*60)); + } + } + + /** + * toDays correctly converts sample values in different units to + * days + */ + public void testToDays() { + for (long t = 0; t < 88888; ++t) { + assertEquals(t, + TimeUnit.DAYS.toDays(t)); + assertEquals(t, + TimeUnit.HOURS.toDays(t*24)); + assertEquals(t, + TimeUnit.MINUTES.toDays(t*60*24)); + assertEquals(t, + TimeUnit.SECONDS.toDays(t*60*60*24)); + assertEquals(t, + TimeUnit.MILLISECONDS.toDays(t*1000L*60*60*24)); + assertEquals(t, + TimeUnit.MICROSECONDS.toDays(t*1000000L*60*60*24)); + assertEquals(t, + TimeUnit.NANOSECONDS.toDays(t*1000000000L*60*60*24)); } } /** - * convert saturates positive too-large values to Long.MAX_VALUE + * convert saturates positive too-large values to Long.MAX_VALUE * and negative to LONG.MIN_VALUE */ public void testConvertSaturate() { @@ -160,10 +291,29 @@ public class TimeUnitTest extends JSR166 assertEquals(Long.MIN_VALUE, TimeUnit.NANOSECONDS.convert(-Long.MAX_VALUE / 4, TimeUnit.SECONDS)); + assertEquals(Long.MAX_VALUE, + TimeUnit.NANOSECONDS.convert(Long.MAX_VALUE / 2, + TimeUnit.MINUTES)); + assertEquals(Long.MIN_VALUE, + TimeUnit.NANOSECONDS.convert(-Long.MAX_VALUE / 4, + TimeUnit.MINUTES)); + assertEquals(Long.MAX_VALUE, + TimeUnit.NANOSECONDS.convert(Long.MAX_VALUE / 2, + TimeUnit.HOURS)); + assertEquals(Long.MIN_VALUE, + TimeUnit.NANOSECONDS.convert(-Long.MAX_VALUE / 4, + TimeUnit.HOURS)); + assertEquals(Long.MAX_VALUE, + TimeUnit.NANOSECONDS.convert(Long.MAX_VALUE / 2, + TimeUnit.DAYS)); + assertEquals(Long.MIN_VALUE, + TimeUnit.NANOSECONDS.convert(-Long.MAX_VALUE / 4, + TimeUnit.DAYS)); + } /** - * toNanos saturates positive too-large values to Long.MAX_VALUE + * toNanos saturates positive too-large values to Long.MAX_VALUE * and negative to LONG.MIN_VALUE */ public void testToNanosSaturate() { @@ -179,10 +329,10 @@ public class TimeUnitTest extends JSR166 */ public void testToString() { String s = TimeUnit.SECONDS.toString(); - assertTrue(s.indexOf("econd") >= 0); + assertTrue(s.indexOf("ECOND") >= 0); } - + /** * Timed wait without holding lock throws * IllegalMonitorStateException @@ -200,10 +350,10 @@ public class TimeUnitTest extends JSR166 } catch (InterruptedException ie) { threadUnexpectedException(); - } - catch(IllegalMonitorStateException success) { } - + catch (IllegalMonitorStateException success) { + } + } }); t.start(); @@ -211,11 +361,11 @@ public class TimeUnitTest extends JSR166 Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); - } catch(Exception e) { + } catch (Exception e) { unexpectedException(); } } - + /** * timedWait throws InterruptedException when interrupted */ @@ -223,7 +373,7 @@ public class TimeUnitTest extends JSR166 Thread t = new Thread(new Runnable() { public void run() { Object o = new Object(); - + TimeUnit tu = TimeUnit.MILLISECONDS; try { synchronized(o) { @@ -231,8 +381,8 @@ public class TimeUnitTest extends JSR166 } threadShouldThrow(); } - catch(InterruptedException success) {} - catch(IllegalMonitorStateException failure) { + catch (InterruptedException success) {} + catch (IllegalMonitorStateException failure) { threadUnexpectedException(); } } @@ -242,32 +392,32 @@ public class TimeUnitTest extends JSR166 Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); - } catch(Exception e) { + } catch (Exception e) { unexpectedException(); } } - - + + /** * timedJoin throws InterruptedException when interrupted */ public void testTimedJoin() { Thread t = new Thread(new Runnable() { public void run() { - TimeUnit tu = TimeUnit.MILLISECONDS; + TimeUnit tu = TimeUnit.MILLISECONDS; try { Thread s = new Thread(new Runnable() { public void run() { try { Thread.sleep(MEDIUM_DELAY_MS); - } catch(InterruptedException success){} + } catch (InterruptedException success) {} } }); s.start(); tu.timedJoin(s,MEDIUM_DELAY_MS); threadShouldThrow(); } - catch(Exception e) {} + catch (Exception e) {} } }); t.start(); @@ -275,11 +425,11 @@ public class TimeUnitTest extends JSR166 Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); - } catch(Exception e) { + } catch (Exception e) { unexpectedException(); } } - + /** * timedSleep throws InterruptedException when interrupted */ @@ -293,7 +443,7 @@ public class TimeUnitTest extends JSR166 tu.sleep(MEDIUM_DELAY_MS); threadShouldThrow(); } - catch(InterruptedException success) {} + catch (InterruptedException success) {} } }); t.start(); @@ -301,13 +451,13 @@ public class TimeUnitTest extends JSR166 Thread.sleep(SHORT_DELAY_MS); t.interrupt(); t.join(); - } catch(Exception e) { + } catch (Exception e) { unexpectedException(); } } /** - * a deserialized serialized unit is equal + * a deserialized serialized unit is equal */ public void testSerialization() { TimeUnit q = TimeUnit.MILLISECONDS; @@ -321,9 +471,9 @@ public class TimeUnitTest extends JSR166 ByteArrayInputStream bin = new ByteArrayInputStream(bout.toByteArray()); ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(bin)); TimeUnit r = (TimeUnit)in.readObject(); - + assertEquals(q.toString(), r.toString()); - } catch(Exception e){ + } catch (Exception e) { e.printStackTrace(); unexpectedException(); }