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