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