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/publicdomain/zero/1.0/
5  * Other contributors include Andrew Wright, Jeffrey Hayes,
6  * Pat Fisher, Mike Judd.
7  */
8 
9 package jsr166;
10 
11 import junit.framework.Test;
12 import junit.framework.TestSuite;
13 
14 public class SystemTest extends JSR166TestCase {
15     // android-note: Removed because the CTS runner does a bad job of
16     // retrying tests that have suite() declarations.
17     //
18     // public static void main(String[] args) {
19     //     main(suite(), args);
20     // }
21     // public static Test suite() {
22     //     return new TestSuite(SystemTest.class);
23     // }
24 
25     /**
26      * Worst case rounding for millisecs; set for 60 cycle millis clock.
27      * This value might need to be changed on JVMs with coarser
28      * System.currentTimeMillis clocks.
29      */
30     static final long MILLIS_ROUND = 17;
31 
32     /**
33      * Nanos between readings of millis is no longer than millis (plus
34      * possible rounding).
35      * This shows only that nano timing not (much) worse than milli.
36      */
testNanoTime1()37     public void testNanoTime1() throws InterruptedException {
38         long m1 = System.currentTimeMillis();
39         Thread.sleep(1);
40         long n1 = System.nanoTime();
41         Thread.sleep(SHORT_DELAY_MS);
42         long n2 = System.nanoTime();
43         Thread.sleep(1);
44         long m2 = System.currentTimeMillis();
45         long millis = m2 - m1;
46         long nanos = n2 - n1;
47         assertTrue(nanos >= 0);
48         long nanosAsMillis = nanos / 1000000;
49         assertTrue(nanosAsMillis <= millis + MILLIS_ROUND);
50     }
51 
52     /**
53      * Millis between readings of nanos is less than nanos, adjusting
54      * for rounding.
55      * This shows only that nano timing not (much) worse than milli.
56      */
testNanoTime2()57     public void testNanoTime2() throws InterruptedException {
58         long n1 = System.nanoTime();
59         Thread.sleep(1);
60         long m1 = System.currentTimeMillis();
61         Thread.sleep(SHORT_DELAY_MS);
62         long m2 = System.currentTimeMillis();
63         Thread.sleep(1);
64         long n2 = System.nanoTime();
65         long millis = m2 - m1;
66         long nanos = n2 - n1;
67 
68         assertTrue(nanos >= 0);
69         long nanosAsMillis = nanos / 1000000;
70         assertTrue(millis <= nanosAsMillis + MILLIS_ROUND);
71     }
72 
73 }
74