blob: 1525818ab311557b41e6c7352141ae52ab29b0d5 [file]
/*
* Copyright 2010-2025 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 test.time
import kotlin.math.sign
import kotlin.test.*
import kotlin.time.*
import kotlin.time.DurationUnit.*
class DurationUnitTest {
@Test
@OptIn(ExperimentalTime::class)
fun conversion() {
fun test(sourceValue: Double, sourceUnit: DurationUnit, targetValue: Double, targetUnit: DurationUnit) {
assertEquals(
targetValue, Duration.convert(sourceValue, sourceUnit, targetUnit),
"Expected $sourceValue $sourceUnit to be $targetValue $targetUnit"
)
assertEquals(
sourceValue, Duration.convert(targetValue, targetUnit, sourceUnit),
"Expected $targetValue $targetUnit to be $sourceValue $sourceUnit"
)
}
test(1.0, MINUTES, 60.0, SECONDS)
test(30.0, MINUTES, 0.5, HOURS)
test(12.0, HOURS, 0.5, DAYS)
test(720.0, MINUTES, 0.5, DAYS)
test(1.0, DAYS, 86400.0, SECONDS)
test(1.0, DAYS, 86400e9, NANOSECONDS)
test(50.0, NANOSECONDS, 0.05, MICROSECONDS)
test(50.0, NANOSECONDS, 50e-9, SECONDS)
test(16.0, MILLISECONDS, 0.016, SECONDS)
}
@Test
fun unitOrdering() {
val units = listOf(NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS)
for (i in units.indices) {
for (j in units.indices) {
assertEquals(
(i compareTo j).sign,
(units[i] compareTo units[j]).sign,
"Units ${units[i]} and ${units[j]} are not in the expected order"
)
}
}
}
}