test/jdk/java/util/concurrent/TimeUnit/Basic.java
changeset 58138 1e4270f875ee
parent 47216 71c04702a3d5
equal deleted inserted replaced
58137:6a556bcd94fc 58138:1e4270f875ee
    22  */
    22  */
    23 
    23 
    24 /* @test
    24 /* @test
    25  * @bug 5057341 6363898
    25  * @bug 5057341 6363898
    26  * @summary Basic tests for TimeUnit
    26  * @summary Basic tests for TimeUnit
       
    27  * @library /test/lib
    27  * @author Martin Buchholz
    28  * @author Martin Buchholz
    28  */
    29  */
    29 
    30 
    30 import static java.util.concurrent.TimeUnit.DAYS;
    31 import static java.util.concurrent.TimeUnit.DAYS;
    31 import static java.util.concurrent.TimeUnit.HOURS;
    32 import static java.util.concurrent.TimeUnit.HOURS;
    37 
    38 
    38 import java.io.ByteArrayInputStream;
    39 import java.io.ByteArrayInputStream;
    39 import java.io.ByteArrayOutputStream;
    40 import java.io.ByteArrayOutputStream;
    40 import java.io.IOException;
    41 import java.io.IOException;
    41 import java.io.InputStream;
    42 import java.io.InputStream;
       
    43 import java.util.List;
    42 import java.io.ObjectOutputStream;
    44 import java.io.ObjectOutputStream;
    43 import java.io.ObjectInputStream;
    45 import java.io.ObjectInputStream;
    44 import java.util.Arrays;
    46 import java.util.Arrays;
       
    47 import java.util.concurrent.CompletableFuture;
       
    48 import java.util.concurrent.ThreadLocalRandom;
    45 import java.util.concurrent.TimeUnit;
    49 import java.util.concurrent.TimeUnit;
       
    50 import java.util.stream.Collectors;
       
    51 import java.util.stream.IntStream;
       
    52 import jdk.test.lib.Utils;
    46 
    53 
    47 public class Basic {
    54 public class Basic {
       
    55     static final long LONG_DELAY_MS = Utils.adjustTimeout(10_000);
       
    56 
    48     private static void realMain(String[] args) throws Throwable {
    57     private static void realMain(String[] args) throws Throwable {
    49 
    58 
    50         for (TimeUnit u : TimeUnit.values()) {
    59         for (TimeUnit u : TimeUnit.values()) {
    51             System.out.println(u);
    60             System.out.println(u);
    52             check(u instanceof TimeUnit);
    61             check(u instanceof TimeUnit);
    69         equal(  60L, MINUTES.toSeconds(1));
    78         equal(  60L, MINUTES.toSeconds(1));
    70         equal(1000L, SECONDS.toMillis(1));
    79         equal(1000L, SECONDS.toMillis(1));
    71         equal(1000L, MILLISECONDS.toMicros(1));
    80         equal(1000L, MILLISECONDS.toMicros(1));
    72         equal(1000L, MICROSECONDS.toNanos(1));
    81         equal(1000L, MICROSECONDS.toNanos(1));
    73 
    82 
    74         long t0 = System.nanoTime();
    83         //----------------------------------------------------------------
    75         MILLISECONDS.sleep(3); /* See windows bug 6313903, might not sleep */
    84         // TimeUnit.sleep sleeps for at least the specified time.
    76         long elapsedMillis = (System.nanoTime() - t0)/(1000L * 1000L);
    85         // TimeUnit.sleep(x, unit) for x <= 0 does not sleep at all.
    77         System.out.printf("elapsed=%d%n", elapsedMillis);
    86         //----------------------------------------------------------------
    78         check(elapsedMillis >= 0);
    87         ThreadLocalRandom rnd = ThreadLocalRandom.current();
    79         /* Might not sleep on windows: check(elapsedMillis >= 3); */
    88         int maxTimeoutMillis = rnd.nextInt(1, 12);
    80         check(elapsedMillis < 1000);
    89         List<CompletableFuture<?>> workers =
       
    90             IntStream.range(-1, maxTimeoutMillis + 1)
       
    91             .mapToObj(timeoutMillis -> (Runnable) () -> {
       
    92                 try {
       
    93                     long startTime = System.nanoTime();
       
    94                     MILLISECONDS.sleep(timeoutMillis);
       
    95                     long elapsedNanos = System.nanoTime() - startTime;
       
    96                     long timeoutNanos = MILLISECONDS.toNanos(timeoutMillis);
       
    97                     check(elapsedNanos >= timeoutNanos);
       
    98                 } catch (InterruptedException fail) {
       
    99                     throw new AssertionError(fail);
       
   100                 }})
       
   101             .map(CompletableFuture::runAsync)
       
   102             .collect(Collectors.toList());
       
   103 
       
   104         workers.forEach(CompletableFuture<?>::join);
    81 
   105 
    82         //----------------------------------------------------------------
   106         //----------------------------------------------------------------
    83         // Tests for serialized form compatibility with previous release
   107         // Tests for serialized form compatibility with previous release
    84         //----------------------------------------------------------------
   108         //----------------------------------------------------------------
    85         byte[] serializedForm = /* Generated using tiger */
   109         byte[] serializedForm = /* Generated using JDK 5 */
    86             {-84, -19, 0, 5, '~', 'r', 0, 29, 'j', 'a', 'v', 'a', '.',
   110             {-84, -19, 0, 5, '~', 'r', 0, 29, 'j', 'a', 'v', 'a', '.',
    87              'u', 't', 'i', 'l', '.', 'c', 'o', 'n', 'c', 'u', 'r', 'r', 'e',
   111              'u', 't', 'i', 'l', '.', 'c', 'o', 'n', 'c', 'u', 'r', 'r', 'e',
    88              'n', 't', '.', 'T', 'i', 'm', 'e', 'U', 'n', 'i', 't', 0, 0,
   112              'n', 't', '.', 'T', 'i', 'm', 'e', 'U', 'n', 'i', 't', 0, 0,
    89              0, 0, 0, 0, 0, 0, 18, 0, 0, 'x', 'r', 0, 14,
   113              0, 0, 0, 0, 0, 0, 18, 0, 0, 'x', 'r', 0, 14,
    90              'j', 'a', 'v', 'a', '.', 'l', 'a', 'n', 'g', '.', 'E', 'n', 'u',
   114              'j', 'a', 'v', 'a', '.', 'l', 'a', 'n', 'g', '.', 'E', 'n', 'u',