Home | History | Annotate | Download | only in jsr166
      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      */
     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      */
     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