| /* | |
| * 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. | |
| */ | |
| import test.time.testDefaultParsing | |
| import kotlin.test.Test | |
| import kotlin.time.Duration | |
| import kotlin.time.Duration.Companion.days | |
| import kotlin.time.Duration.Companion.hours | |
| import kotlin.time.Duration.Companion.minutes | |
| import kotlin.time.Duration.Companion.nanoseconds | |
| /** | |
| * Dedicated test class for Duration parsing on wasmJs platform. | |
| * | |
| * These tests are separate from the main Duration tests because Wasm uses its own | |
| * floating-point arithmetic internally, which can produce different rounding behavior | |
| * compared to JVM or Native platforms. The differences are particularly noticeable when | |
| * parsing fractional durations that approach the limits of floating-point precision. | |
| * | |
| * The tests here verify that Duration parsing correctly handles edge cases where | |
| * Wasm's number representation might cause values to round differently than | |
| * on other platforms, ensuring consistent behavior across all Kotlin targets. | |
| */ | |
| class DurationWasmTest { | |
| @Test | |
| fun nanosecondsRounding() { | |
| testDefaultParsing(1.minutes - 1.nanoseconds, "59.999999999s", "0.999999999991666610m") | |
| for (i in 1..9) { | |
| testDefaultParsing(1.minutes, "1m", "0.99999999999166661${i}m") | |
| } | |
| for (i in 0..1) { | |
| testDefaultParsing(1.days - 1.nanoseconds, "23h 59m 59.999999999s", "0.99999999999999417${i}d") | |
| } | |
| for (i in 2..9) { | |
| testDefaultParsing(1.days, "1d", "0.99999999999999417${i}d") | |
| } | |
| for (i in 0..3) { | |
| testDefaultParsing(Duration.ZERO, "0s", "0.0000000000000057870370370370${i}d", "0.0000000000083333333333333${i}m") | |
| } | |
| for (i in 4..9) { | |
| testDefaultParsing(1.nanoseconds, "1ns", "0.0000000000000057870370370370${i}d", "0.0000000000083333333333333${i}m") | |
| } | |
| for (i in 0..5) { | |
| testDefaultParsing(Duration.ZERO, "0s", "0.00000000000000${i}d") | |
| testDefaultParsing(1.hours - 1.nanoseconds, "59m 59.999999999s", "0.99999999999986105${i}h") | |
| } | |
| for (i in 6..9) { | |
| testDefaultParsing(1.nanoseconds, "1ns", "0.00000000000000${i}d") | |
| testDefaultParsing(1.hours, "1h", "0.99999999999986105${i}h") | |
| } | |
| for (i in 0..8) { | |
| testDefaultParsing(Duration.ZERO, "0s", "0.000000000000138888888888888${i}h") | |
| } | |
| testDefaultParsing(1.nanoseconds, "1ns", "0.0000000000001388888888888889h") | |
| } | |
| } |