test/jdk/java/util/concurrent/tck/TimeUnit8Test.java
author dl
Fri, 08 Jun 2018 11:38:40 -0700
changeset 50477 cb0efe0cc20e
parent 47216 71c04702a3d5
permissions -rw-r--r--
8204375: Add TimeUnit#convert(Duration) Reviewed-by: martin, scolebourne, plevart, rriggs
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
36732
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
     1
/*
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
     2
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
     3
 *
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
     4
 * This code is free software; you can redistribute it and/or modify it
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
     5
 * under the terms of the GNU General Public License version 2 only, as
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
     6
 * published by the Free Software Foundation.
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
     7
 *
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
     8
 * This code is distributed in the hope that it will be useful, but WITHOUT
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
     9
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    10
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    11
 * version 2 for more details (a copy is included in the LICENSE file that
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    12
 * accompanied this code).
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    13
 *
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License version
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    15
 * 2 along with this work; if not, write to the Free Software Foundation,
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    16
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    17
 *
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    18
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    19
 * or visit www.oracle.com if you need additional information or have any
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    20
 * questions.
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    21
 */
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    22
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    23
/*
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    24
 * This file is available under and governed by the GNU General Public
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    25
 * License version 2 only, as published by the Free Software Foundation.
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    26
 * However, the following notice accompanied the original version of this
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    27
 * file:
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    28
 *
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    29
 * Written by Doug Lea and Martin Buchholz with assistance from
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    30
 * members of JCP JSR-166 Expert Group and released to the public
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    31
 * domain, as explained at
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    32
 * http://creativecommons.org/publicdomain/zero/1.0/
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    33
 */
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    34
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    35
import static java.util.concurrent.TimeUnit.DAYS;
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    36
import static java.util.concurrent.TimeUnit.HOURS;
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    37
import static java.util.concurrent.TimeUnit.MICROSECONDS;
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    38
import static java.util.concurrent.TimeUnit.MILLISECONDS;
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    39
import static java.util.concurrent.TimeUnit.MINUTES;
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    40
import static java.util.concurrent.TimeUnit.NANOSECONDS;
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    41
import static java.util.concurrent.TimeUnit.SECONDS;
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    42
50477
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
    43
import java.time.Duration;
36732
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    44
import java.time.temporal.ChronoUnit;
50477
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
    45
import java.util.Arrays;
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
    46
import java.util.concurrent.ThreadLocalRandom;
36732
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    47
import java.util.concurrent.TimeUnit;
50477
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
    48
import java.util.stream.LongStream;
36732
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    49
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    50
import junit.framework.Test;
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    51
import junit.framework.TestSuite;
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    52
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    53
public class TimeUnit8Test extends JSR166TestCase {
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    54
    public static void main(String[] args) {
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    55
        main(suite(), args);
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    56
    }
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    57
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    58
    public static Test suite() {
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    59
        return new TestSuite(TimeUnit8Test.class);
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    60
    }
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    61
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    62
    /**
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    63
     * tests for toChronoUnit.
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    64
     */
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    65
    public void testToChronoUnit() throws Exception {
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    66
        assertSame(ChronoUnit.NANOS,   NANOSECONDS.toChronoUnit());
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    67
        assertSame(ChronoUnit.MICROS,  MICROSECONDS.toChronoUnit());
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    68
        assertSame(ChronoUnit.MILLIS,  MILLISECONDS.toChronoUnit());
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    69
        assertSame(ChronoUnit.SECONDS, SECONDS.toChronoUnit());
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    70
        assertSame(ChronoUnit.MINUTES, MINUTES.toChronoUnit());
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    71
        assertSame(ChronoUnit.HOURS,   HOURS.toChronoUnit());
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    72
        assertSame(ChronoUnit.DAYS,    DAYS.toChronoUnit());
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    73
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    74
        // Every TimeUnit has a defined ChronoUnit equivalent
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    75
        for (TimeUnit x : TimeUnit.values())
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    76
            assertSame(x, TimeUnit.of(x.toChronoUnit()));
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    77
    }
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    78
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    79
    /**
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    80
     * tests for TimeUnit.of(ChronoUnit).
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    81
     */
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    82
    public void testTimeUnitOf() throws Exception {
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    83
        assertSame(NANOSECONDS,  TimeUnit.of(ChronoUnit.NANOS));
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    84
        assertSame(MICROSECONDS, TimeUnit.of(ChronoUnit.MICROS));
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    85
        assertSame(MILLISECONDS, TimeUnit.of(ChronoUnit.MILLIS));
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    86
        assertSame(SECONDS,      TimeUnit.of(ChronoUnit.SECONDS));
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    87
        assertSame(MINUTES,      TimeUnit.of(ChronoUnit.MINUTES));
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    88
        assertSame(HOURS,        TimeUnit.of(ChronoUnit.HOURS));
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    89
        assertSame(DAYS,         TimeUnit.of(ChronoUnit.DAYS));
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    90
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    91
        assertThrows(NullPointerException.class,
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    92
                     () -> TimeUnit.of((ChronoUnit)null));
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    93
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    94
        // ChronoUnits either round trip to their TimeUnit
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    95
        // equivalents, or throw IllegalArgumentException.
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    96
        for (ChronoUnit cu : ChronoUnit.values()) {
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    97
            final TimeUnit tu;
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    98
            try {
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
    99
                tu = TimeUnit.of(cu);
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
   100
            } catch (IllegalArgumentException acceptable) {
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
   101
                continue;
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
   102
            }
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
   103
            assertSame(cu, tu.toChronoUnit());
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
   104
        }
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
   105
    }
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
   106
50477
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   107
    /**
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   108
     * convert(Duration) roundtrips with Duration.ofXXXX and Duration.of(long, ChronoUnit)
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   109
     */
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   110
    public void testConvertDuration_roundtripDurationOf() {
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   111
        long n = ThreadLocalRandom.current().nextLong();
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   112
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   113
        assertEquals(n, NANOSECONDS.convert(Duration.ofNanos(n)));
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   114
        assertEquals(n, NANOSECONDS.convert(Duration.of(n, ChronoUnit.NANOS)));
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   115
        assertEquals(n, MILLISECONDS.convert(Duration.ofMillis(n)));
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   116
        assertEquals(n, MILLISECONDS.convert(Duration.of(n, ChronoUnit.MILLIS)));
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   117
        assertEquals(n, SECONDS.convert(Duration.ofSeconds(n)));
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   118
        assertEquals(n, SECONDS.convert(Duration.of(n, ChronoUnit.SECONDS)));
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   119
        n /= 60;
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   120
        assertEquals(n, MINUTES.convert(Duration.ofMinutes(n)));
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   121
        assertEquals(n, MINUTES.convert(Duration.of(n, ChronoUnit.MINUTES)));
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   122
        n /= 60;
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   123
        assertEquals(n, HOURS.convert(Duration.ofHours(n)));
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   124
        assertEquals(n, HOURS.convert(Duration.of(n, ChronoUnit.HOURS)));
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   125
        n /= 24;
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   126
        assertEquals(n, DAYS.convert(Duration.ofDays(n)));
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   127
        assertEquals(n, DAYS.convert(Duration.of(n, ChronoUnit.DAYS)));
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   128
    }
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   129
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   130
    /**
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   131
     * convert(Duration.ofNanos(n)) agrees with convert(n, NANOSECONDS)
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   132
     */
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   133
    public void testConvertDuration_roundtripDurationOfNanos() {
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   134
        // Test values near unit transitions and near overflow.
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   135
        LongStream.concat(
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   136
                Arrays.stream(TimeUnit.values()).mapToLong(u -> u.toNanos(1)),
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   137
                LongStream.of(Long.MAX_VALUE, Long.MIN_VALUE))
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   138
            .flatMap(n -> LongStream.of(n, n + 1, n - 1))
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   139
            .flatMap(n -> LongStream.of(n, n + 1_000_000_000, n - 1_000_000_000))
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   140
            .flatMap(n -> LongStream.of(n, -n))
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   141
            // .peek(System.err::println)
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   142
            .forEach(n -> Arrays.stream(TimeUnit.values()).forEach(
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   143
                u -> assertEquals(u.convert(n, NANOSECONDS),
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   144
                                  u.convert(Duration.ofNanos(n)))));
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   145
    }
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   146
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   147
    /**
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   148
     * convert(Duration) doesn't misbehave near Long.MAX_VALUE and Long.MIN_VALUE.
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   149
     */
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   150
    public void testConvertDuration_nearOverflow() {
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   151
        ChronoUnit NANOS = ChronoUnit.NANOS;
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   152
        Duration maxDuration = Duration.ofSeconds(Long.MAX_VALUE, 999_999_999);
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   153
        Duration minDuration = Duration.ofSeconds(Long.MIN_VALUE, 0);
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   154
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   155
        for (TimeUnit u : TimeUnit.values()) {
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   156
            ChronoUnit cu = u.toChronoUnit();
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   157
            long r;
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   158
            if (u.toNanos(1) > SECONDS.toNanos(1)) {
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   159
                r = u.toNanos(1) / SECONDS.toNanos(1);
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   160
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   161
                assertThrows(ArithmeticException.class,
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   162
                             () -> Duration.of(Long.MAX_VALUE, cu),
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   163
                             () -> Duration.of(Long.MIN_VALUE, cu));
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   164
            } else {
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   165
                r = 1;
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   166
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   167
                Duration max = Duration.of(Long.MAX_VALUE, cu);
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   168
                Duration min = Duration.of(Long.MIN_VALUE, cu);
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   169
                assertEquals(Long.MAX_VALUE, u.convert(max));
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   170
                assertEquals(Long.MAX_VALUE - 1, u.convert(max.minus(1, NANOS)));
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   171
                assertEquals(Long.MAX_VALUE - 1, u.convert(max.minus(1, cu)));
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   172
                assertEquals(Long.MIN_VALUE, u.convert(min));
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   173
                assertEquals(Long.MIN_VALUE + 1, u.convert(min.plus(1, NANOS)));
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   174
                assertEquals(Long.MIN_VALUE + 1, u.convert(min.plus(1, cu)));
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   175
                assertEquals(Long.MAX_VALUE, u.convert(max.plus(1, NANOS)));
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   176
                if (u != SECONDS) {
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   177
                    assertEquals(Long.MAX_VALUE, u.convert(max.plus(1, cu)));
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   178
                    assertEquals(Long.MIN_VALUE, u.convert(min.minus(1, NANOS)));
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   179
                    assertEquals(Long.MIN_VALUE, u.convert(min.minus(1, cu)));
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   180
                }
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   181
            }
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   182
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   183
            assertEquals(Long.MAX_VALUE / r, u.convert(maxDuration));
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   184
            assertEquals(Long.MIN_VALUE / r, u.convert(minDuration));
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   185
        }
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   186
    }
cb0efe0cc20e 8204375: Add TimeUnit#convert(Duration)
dl
parents: 47216
diff changeset
   187
36732
7e6686d3f98a 8152083: Optimize TimeUnit conversions
dl
parents:
diff changeset
   188
}