18f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle/*
28f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Written by Doug Lea with assistance from members of JCP JSR-166
38f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Expert Group and released to the public domain, as explained at
48f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * http://creativecommons.org/publicdomain/zero/1.0/
58f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Other contributors include Andrew Wright, Jeffrey Hayes,
68f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle * Pat Fisher, Mike Judd.
78f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle */
88f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
98f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravlepackage jsr166;
108f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
118e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport junit.framework.Test;
128e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamathimport junit.framework.TestSuite;
138f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
148f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravlepublic class SystemTest extends JSR166TestCase {
158e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    // android-note: Removed because the CTS runner does a bad job of
168e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    // retrying tests that have suite() declarations.
178e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    //
188e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    // public static void main(String[] args) {
198e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    //     main(suite(), args);
208e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    // }
218e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    // public static Test suite() {
228e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    //     return new TestSuite(...);
238e9a0e92906742b17eb08d7fb83cca91965f9b8eNarayan Kamath    // }
248f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
258f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
268f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Worst case rounding for millisecs; set for 60 cycle millis clock.
278f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * This value might need to be changed on JVMs with coarser
288f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * System.currentTimeMillis clocks.
298f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
308f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    static final long MILLIS_ROUND = 17;
318f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
328f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
338f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Nanos between readings of millis is no longer than millis (plus
348f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * possible rounding).
358f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * This shows only that nano timing not (much) worse than milli.
368f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
378f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testNanoTime1() throws InterruptedException {
388f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        long m1 = System.currentTimeMillis();
398f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Thread.sleep(1);
408f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        long n1 = System.nanoTime();
418f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Thread.sleep(SHORT_DELAY_MS);
428f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        long n2 = System.nanoTime();
438f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Thread.sleep(1);
448f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        long m2 = System.currentTimeMillis();
458f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        long millis = m2 - m1;
468f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        long nanos = n2 - n1;
478f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(nanos >= 0);
488f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        long nanosAsMillis = nanos / 1000000;
498f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(nanosAsMillis <= millis + MILLIS_ROUND);
508f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
518f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
528f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    /**
538f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * Millis between readings of nanos is less than nanos, adjusting
548f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * for rounding.
558f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     * This shows only that nano timing not (much) worse than milli.
568f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle     */
578f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    public void testNanoTime2() throws InterruptedException {
588f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        long n1 = System.nanoTime();
598f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Thread.sleep(1);
608f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        long m1 = System.currentTimeMillis();
618f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Thread.sleep(SHORT_DELAY_MS);
628f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        long m2 = System.currentTimeMillis();
638f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        Thread.sleep(1);
648f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        long n2 = System.nanoTime();
658f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        long millis = m2 - m1;
668f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        long nanos = n2 - n1;
678f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
688f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(nanos >= 0);
698f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        long nanosAsMillis = nanos / 1000000;
708f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle        assertTrue(millis <= nanosAsMillis + MILLIS_ROUND);
718f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle    }
728f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle
738f0d92bba199d906c70a5e40d7f3516c1a424117Calin Juravle}
74