Files
kotlin-fork/libraries/stdlib/jdk8/test/time/DurationConversionTest.kt
T
Ilya Gorbunov 48ce45e22f [stdlib] Fix outdated documentation in Kotlin-Java Duration conversions
Add tests for documentation statements
2023-11-07 16:25:06 +00:00

90 lines
3.2 KiB
Kotlin

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