Control Duration init block assertions on JVM with -ea option
On other platforms enable them unconditionally
This commit is contained in:
+2
@@ -7,6 +7,8 @@ package kotlin.time
|
|||||||
|
|
||||||
import kotlin.native.internal.GCUnsafeCall
|
import kotlin.native.internal.GCUnsafeCall
|
||||||
|
|
||||||
|
internal actual inline val durationAssertionsEnabled: Boolean get() = true
|
||||||
|
|
||||||
@GCUnsafeCall("Kotlin_DurationValue_formatToExactDecimals")
|
@GCUnsafeCall("Kotlin_DurationValue_formatToExactDecimals")
|
||||||
internal actual external fun formatToExactDecimals(value: Double, decimals: Int): String
|
internal actual external fun formatToExactDecimals(value: Double, decimals: Int): String
|
||||||
|
|
||||||
+2
@@ -8,6 +8,8 @@ package kotlin.time
|
|||||||
import kotlin.js.json
|
import kotlin.js.json
|
||||||
import kotlin.math.*
|
import kotlin.math.*
|
||||||
|
|
||||||
|
internal actual inline val durationAssertionsEnabled: Boolean get() = true
|
||||||
|
|
||||||
internal actual fun formatToExactDecimals(value: Double, decimals: Int): String {
|
internal actual fun formatToExactDecimals(value: Double, decimals: Int): String {
|
||||||
val rounded = if (decimals == 0) {
|
val rounded = if (decimals == 0) {
|
||||||
value
|
value
|
||||||
+2
@@ -9,6 +9,8 @@ import java.math.RoundingMode
|
|||||||
import java.text.DecimalFormat
|
import java.text.DecimalFormat
|
||||||
import kotlin.concurrent.getOrSet
|
import kotlin.concurrent.getOrSet
|
||||||
|
|
||||||
|
internal actual val durationAssertionsEnabled: Boolean = Duration::class.java.desiredAssertionStatus()
|
||||||
|
|
||||||
private val precisionFormats = Array(4) { ThreadLocal<DecimalFormat>() }
|
private val precisionFormats = Array(4) { ThreadLocal<DecimalFormat>() }
|
||||||
|
|
||||||
private fun createFormatForDecimals(decimals: Int) = DecimalFormat("0").apply {
|
private fun createFormatForDecimals(decimals: Int) = DecimalFormat("0").apply {
|
||||||
@@ -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
|
private val storageUnit get() = if (isInNanos()) DurationUnit.NANOSECONDS else DurationUnit.MILLISECONDS
|
||||||
|
|
||||||
init {
|
init {
|
||||||
// TODO: disable assertions in final version
|
if (durationAssertionsEnabled) {
|
||||||
if (isInNanos()) {
|
if (isInNanos()) {
|
||||||
if (value !in -MAX_NANOS..MAX_NANOS) throw AssertionError("$value ns is out of nanoseconds range")
|
if (value !in -MAX_NANOS..MAX_NANOS) throw AssertionError("$value ns is out of nanoseconds range")
|
||||||
} else {
|
} else {
|
||||||
if (value !in -MAX_MILLIS..MAX_MILLIS) throw AssertionError("$value ms is out of milliseconds range")
|
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 (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))
|
durationOfMillis(millis.coerceIn(-MAX_MILLIS, MAX_MILLIS))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal expect val durationAssertionsEnabled: Boolean
|
||||||
|
|
||||||
internal expect fun formatToExactDecimals(value: Double, decimals: Int): String
|
internal expect fun formatToExactDecimals(value: Double, decimals: Int): String
|
||||||
internal expect fun formatUpToDecimals(value: Double, decimals: Int): String
|
internal expect fun formatUpToDecimals(value: Double, decimals: Int): String
|
||||||
@@ -4,5 +4,6 @@
|
|||||||
*/
|
*/
|
||||||
package kotlin.time
|
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 formatToExactDecimals(value: Double, decimals: Int): String = TODO("Wasm stdlib: Duration")
|
||||||
internal actual fun formatUpToDecimals(value: Double, decimals: Int): String = TODO("Wasm stdlib: Duration")
|
internal actual fun formatUpToDecimals(value: Double, decimals: Int): String = TODO("Wasm stdlib: Duration")
|
||||||
Reference in New Issue
Block a user