| /* |
| * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. |
| * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. |
| */ |
| |
| package kotlin.jdk8.time.test |
| |
| import kotlin.random.Random |
| import kotlin.test.* |
| import kotlin.time.* |
| import kotlin.time.Duration.Companion.days |
| import kotlin.time.Duration.Companion.milliseconds |
| import kotlin.time.Duration.Companion.nanoseconds |
| import java.time.Duration as JTDuration |
| |
| class DurationConversionTest { |
| @Test |
| fun twoWayConversion() { |
| fun test(days: Int, hours: Int, minutes: Int, seconds: Int, millis: Int, nanos: Int) { |
| val duration = with(Duration) { |
| days.days + hours.hours + minutes.minutes + seconds.seconds + millis.milliseconds + nanos.nanoseconds |
| } |
| val jtDuration = JTDuration.ZERO |
| .plusDays(days.toLong()) |
| .plusHours(hours.toLong()) |
| .plusMinutes(minutes.toLong()) |
| .plusSeconds(seconds.toLong()) |
| .plusMillis(millis.toLong()) |
| .plusNanos(nanos.toLong()) |
| |
| assertEquals(jtDuration, duration.toJavaDuration()) |
| assertEquals(duration, jtDuration.toKotlinDuration()) |
| } |
| |
| repeat(100) { |
| test( |
| days = Random.nextInt(-146 * 365, 146 * 365), |
| hours = Random.nextInt(-48, 48), |
| minutes = Random.nextInt(-600, 600), |
| seconds = Random.nextInt(-600, 600), |
| millis = Random.nextInt(-1000000, 1000000), |
| nanos = Random.nextInt() |
| ) |
| } |
| } |
| |
| @Test |
| fun javaToKotlinRounding() { |
| val jtDuration1 = JTDuration.ofDays(365L * 150) |
| val jtDuration2 = jtDuration1.plusNanos(1) |
| assertNotEquals(jtDuration1, jtDuration2) |
| |
| val duration1 = jtDuration1.toKotlinDuration() |
| val duration2 = jtDuration1.toKotlinDuration() |
| assertEquals(duration1, duration2) |
| assertEquals((365 * 150).days, duration2) |
| |
| val jtMaxDuration = JTDuration.ofSeconds(Long.MAX_VALUE, 999_999_999) |
| assertEquals(Duration.INFINITE, jtMaxDuration.toKotlinDuration()) |
| |
| val jtMinDuration = JTDuration.ofSeconds(Long.MIN_VALUE, 0) |
| assertEquals(-Duration.INFINITE, jtMinDuration.toKotlinDuration()) |
| } |
| |
| @Test |
| fun kotlinToJavaClamping() { |
| val finiteDuration = (Long.MAX_VALUE / 2 - 1).milliseconds |
| val jtFiniteDuration = finiteDuration.toJavaDuration() |
| assertEquals(JTDuration.ofMillis(finiteDuration.inWholeMilliseconds), jtFiniteDuration) |
| |
| val jtDuration = Duration.INFINITE.toJavaDuration() |
| assertEquals(JTDuration.ofSeconds(Long.MAX_VALUE), jtDuration) |
| |
| val jtnegDuration = (-Duration.INFINITE).toJavaDuration() |
| assertEquals(JTDuration.ofSeconds(Long.MIN_VALUE), jtnegDuration) |
| } |
| |
| @Test |
| fun randomIsoConversionEquivalence() { |
| repeat(100) { |
| val duration = Random.nextLong().nanoseconds |
| val fromString = JTDuration.parse(duration.toIsoString()) |
| val fromDuration = duration.toJavaDuration() |
| |
| assertEquals(fromString, fromDuration) |
| } |
| } |
| } |
| |