| /* | |
| * 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) | |
| } | |
| } | |
| } | |