diff --git a/kotlin-native/runtime/src/main/kotlin/kotlin/time/formatToDecimals.kt b/kotlin-native/runtime/src/main/kotlin/kotlin/time/DurationNative.kt similarity index 88% rename from kotlin-native/runtime/src/main/kotlin/kotlin/time/formatToDecimals.kt rename to kotlin-native/runtime/src/main/kotlin/kotlin/time/DurationNative.kt index 0ada5a7480f..155b8215350 100644 --- a/kotlin-native/runtime/src/main/kotlin/kotlin/time/formatToDecimals.kt +++ b/kotlin-native/runtime/src/main/kotlin/kotlin/time/DurationNative.kt @@ -7,6 +7,8 @@ package kotlin.time import kotlin.native.internal.GCUnsafeCall +internal actual inline val durationAssertionsEnabled: Boolean get() = true + @GCUnsafeCall("Kotlin_DurationValue_formatToExactDecimals") internal actual external fun formatToExactDecimals(value: Double, decimals: Int): String diff --git a/libraries/stdlib/js/src/kotlin/time/formatToDecimals.kt b/libraries/stdlib/js/src/kotlin/time/DurationJs.kt similarity index 94% rename from libraries/stdlib/js/src/kotlin/time/formatToDecimals.kt rename to libraries/stdlib/js/src/kotlin/time/DurationJs.kt index f4f958ae3ce..37661def558 100644 --- a/libraries/stdlib/js/src/kotlin/time/formatToDecimals.kt +++ b/libraries/stdlib/js/src/kotlin/time/DurationJs.kt @@ -8,6 +8,8 @@ package kotlin.time import kotlin.js.json import kotlin.math.* +internal actual inline val durationAssertionsEnabled: Boolean get() = true + internal actual fun formatToExactDecimals(value: Double, decimals: Int): String { val rounded = if (decimals == 0) { value diff --git a/libraries/stdlib/jvm/src/kotlin/time/formatToDecimals.kt b/libraries/stdlib/jvm/src/kotlin/time/DurationJvm.kt similarity index 91% rename from libraries/stdlib/jvm/src/kotlin/time/formatToDecimals.kt rename to libraries/stdlib/jvm/src/kotlin/time/DurationJvm.kt index 2ea65d1dff3..e904507dcc7 100644 --- a/libraries/stdlib/jvm/src/kotlin/time/formatToDecimals.kt +++ b/libraries/stdlib/jvm/src/kotlin/time/DurationJvm.kt @@ -9,6 +9,8 @@ import java.math.RoundingMode import java.text.DecimalFormat import kotlin.concurrent.getOrSet +internal actual val durationAssertionsEnabled: Boolean = Duration::class.java.desiredAssertionStatus() + private val precisionFormats = Array(4) { ThreadLocal() } private fun createFormatForDecimals(decimals: Int) = DecimalFormat("0").apply { diff --git a/libraries/stdlib/src/kotlin/time/Duration.kt b/libraries/stdlib/src/kotlin/time/Duration.kt index 181e9fca7ff..f2601ab678a 100644 --- a/libraries/stdlib/src/kotlin/time/Duration.kt +++ b/libraries/stdlib/src/kotlin/time/Duration.kt @@ -38,12 +38,13 @@ public value class Duration internal constructor(private val rawValue: Long) : C private val storageUnit get() = if (isInNanos()) DurationUnit.NANOSECONDS else DurationUnit.MILLISECONDS init { - // TODO: disable assertions in final version - if (isInNanos()) { - if (value !in -MAX_NANOS..MAX_NANOS) throw AssertionError("$value ns is out of nanoseconds range") - } else { - if (value !in -MAX_MILLIS..MAX_MILLIS) throw AssertionError("$value ms is out of milliseconds range") - if (value in -MAX_NANOS_IN_MILLIS..MAX_NANOS_IN_MILLIS) throw AssertionError("$value ms is denormalized") + if (durationAssertionsEnabled) { + if (isInNanos()) { + if (value !in -MAX_NANOS..MAX_NANOS) throw AssertionError("$value ns is out of nanoseconds range") + } else { + if (value !in -MAX_MILLIS..MAX_MILLIS) throw AssertionError("$value ms is out of milliseconds range") + if (value in -MAX_NANOS_IN_MILLIS..MAX_NANOS_IN_MILLIS) throw AssertionError("$value ms is denormalized") + } } } @@ -1421,6 +1422,7 @@ private fun durationOfMillisNormalized(millis: Long) = durationOfMillis(millis.coerceIn(-MAX_MILLIS, MAX_MILLIS)) } +internal expect val durationAssertionsEnabled: Boolean internal expect fun formatToExactDecimals(value: Double, decimals: Int): String internal expect fun formatUpToDecimals(value: Double, decimals: Int): String \ No newline at end of file diff --git a/libraries/stdlib/wasm/src/kotlin/time/Duration.kt b/libraries/stdlib/wasm/src/kotlin/time/Duration.kt index 45159fb8928..0f204149709 100644 --- a/libraries/stdlib/wasm/src/kotlin/time/Duration.kt +++ b/libraries/stdlib/wasm/src/kotlin/time/Duration.kt @@ -4,5 +4,6 @@ */ package kotlin.time +internal actual inline val durationAssertionsEnabled: Boolean get() = true internal actual fun formatToExactDecimals(value: Double, decimals: Int): String = TODO("Wasm stdlib: Duration") internal actual fun formatUpToDecimals(value: Double, decimals: Int): String = TODO("Wasm stdlib: Duration") \ No newline at end of file