Bring back Duration construction extensions KT-46229

Return the extension properties for constructing Duration from numbers,
but this time place them in Duration.Companion rather than on top-level.

- provide the new set of construction extension properties
  in companion of Duration
- leave top-level extension properties experimental,
  increase their deprecation level to ERROR,
  propose the extension properties in companion instead.
- leave Duration companion static factory functions experimental,
  deprecate them and propose the extension properties in companion instead.
This commit is contained in:
Ilya Gorbunov
2021-09-19 04:50:41 +03:00
committed by Space
parent 96611de344
commit 21a9198fff
10 changed files with 818 additions and 288 deletions
+168 -21
View File
@@ -1,106 +1,127 @@
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.days() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.days(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Double.days' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.days", imports = {"kotlin.time.Duration.Companion.days"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Double.days: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.days() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.days(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Int.days' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.days", imports = {"kotlin.time.Duration.Companion.days"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Int.days: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.days() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.days(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Long.days' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.days", imports = {"kotlin.time.Duration.Companion.days"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Long.days: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.hours() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.hours(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Double.hours' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.hours", imports = {"kotlin.time.Duration.Companion.hours"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Double.hours: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.hours() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.hours(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Int.hours' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.hours", imports = {"kotlin.time.Duration.Companion.hours"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Int.hours: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.hours() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.hours(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Long.hours' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.hours", imports = {"kotlin.time.Duration.Companion.hours"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Long.hours: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.microseconds() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.microseconds(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Double.microseconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.microseconds", imports = {"kotlin.time.Duration.Companion.microseconds"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Double.microseconds: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.microseconds() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.microseconds(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Int.microseconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.microseconds", imports = {"kotlin.time.Duration.Companion.microseconds"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Int.microseconds: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.microseconds() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.microseconds(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Long.microseconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.microseconds", imports = {"kotlin.time.Duration.Companion.microseconds"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Long.microseconds: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.milliseconds() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.milliseconds(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Double.milliseconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.milliseconds", imports = {"kotlin.time.Duration.Companion.milliseconds"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Double.milliseconds: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.milliseconds() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.milliseconds(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Int.milliseconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.milliseconds", imports = {"kotlin.time.Duration.Companion.milliseconds"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Int.milliseconds: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.milliseconds() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.milliseconds(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Long.milliseconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.milliseconds", imports = {"kotlin.time.Duration.Companion.milliseconds"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Long.milliseconds: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.minutes() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.minutes(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Double.minutes' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.minutes", imports = {"kotlin.time.Duration.Companion.minutes"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Double.minutes: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.minutes() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.minutes(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Int.minutes' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.minutes", imports = {"kotlin.time.Duration.Companion.minutes"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Int.minutes: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.minutes() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.minutes(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Long.minutes' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.minutes", imports = {"kotlin.time.Duration.Companion.minutes"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Long.minutes: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.nanoseconds() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.nanoseconds(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Double.nanoseconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.nanoseconds", imports = {"kotlin.time.Duration.Companion.nanoseconds"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Double.nanoseconds: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.nanoseconds() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.nanoseconds(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Int.nanoseconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.nanoseconds", imports = {"kotlin.time.Duration.Companion.nanoseconds"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Int.nanoseconds: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.nanoseconds() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.nanoseconds(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Long.nanoseconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.nanoseconds", imports = {"kotlin.time.Duration.Companion.nanoseconds"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Long.nanoseconds: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.seconds() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.seconds(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Double.seconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.seconds", imports = {"kotlin.time.Duration.Companion.seconds"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Double.seconds: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.seconds() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.seconds(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Int.seconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.seconds", imports = {"kotlin.time.Duration.Companion.seconds"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Int.seconds: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.seconds() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.seconds(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Long.seconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.seconds", imports = {"kotlin.time.Duration.Companion.seconds"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Long.seconds: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@@ -279,60 +300,177 @@ public final inline class Duration : kotlin.Comparable<kotlin.time.Duration> {
public final val ZERO: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Double.days: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Int.days: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Long.days: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Double.hours: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Int.hours: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Long.hours: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Double.microseconds: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Int.microseconds: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Long.microseconds: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Double.milliseconds: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Int.milliseconds: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Long.milliseconds: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Double.minutes: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Int.minutes: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Long.minutes: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Double.nanoseconds: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Int.nanoseconds: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Long.nanoseconds: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Double.seconds: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Int.seconds: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Long.seconds: kotlin.time.Duration { get; }
public final fun convert(value: kotlin.Double, sourceUnit: kotlin.time.DurationUnit, targetUnit: kotlin.time.DurationUnit): kotlin.Double
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Double.days' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.days", imports = {"kotlin.time.Duration.Companion.days"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun days(value: kotlin.Double): kotlin.time.Duration
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Int.days' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.days", imports = {"kotlin.time.Duration.Companion.days"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun days(value: kotlin.Int): kotlin.time.Duration
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Long.days' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.days", imports = {"kotlin.time.Duration.Companion.days"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun days(value: kotlin.Long): kotlin.time.Duration
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Double.hours' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.hours", imports = {"kotlin.time.Duration.Companion.hours"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun hours(value: kotlin.Double): kotlin.time.Duration
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Int.hours' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.hours", imports = {"kotlin.time.Duration.Companion.hours"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun hours(value: kotlin.Int): kotlin.time.Duration
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Long.hours' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.hours", imports = {"kotlin.time.Duration.Companion.hours"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun hours(value: kotlin.Long): kotlin.time.Duration
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Double.microseconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.microseconds", imports = {"kotlin.time.Duration.Companion.microseconds"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun microseconds(value: kotlin.Double): kotlin.time.Duration
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Int.microseconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.microseconds", imports = {"kotlin.time.Duration.Companion.microseconds"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun microseconds(value: kotlin.Int): kotlin.time.Duration
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Long.microseconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.microseconds", imports = {"kotlin.time.Duration.Companion.microseconds"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun microseconds(value: kotlin.Long): kotlin.time.Duration
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Double.milliseconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.milliseconds", imports = {"kotlin.time.Duration.Companion.milliseconds"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun milliseconds(value: kotlin.Double): kotlin.time.Duration
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Int.milliseconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.milliseconds", imports = {"kotlin.time.Duration.Companion.milliseconds"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun milliseconds(value: kotlin.Int): kotlin.time.Duration
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Long.milliseconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.milliseconds", imports = {"kotlin.time.Duration.Companion.milliseconds"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun milliseconds(value: kotlin.Long): kotlin.time.Duration
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Double.minutes' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.minutes", imports = {"kotlin.time.Duration.Companion.minutes"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun minutes(value: kotlin.Double): kotlin.time.Duration
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Int.minutes' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.minutes", imports = {"kotlin.time.Duration.Companion.minutes"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun minutes(value: kotlin.Int): kotlin.time.Duration
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Long.minutes' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.minutes", imports = {"kotlin.time.Duration.Companion.minutes"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun minutes(value: kotlin.Long): kotlin.time.Duration
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Double.nanoseconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.nanoseconds", imports = {"kotlin.time.Duration.Companion.nanoseconds"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun nanoseconds(value: kotlin.Double): kotlin.time.Duration
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Int.nanoseconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.nanoseconds", imports = {"kotlin.time.Duration.Companion.nanoseconds"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun nanoseconds(value: kotlin.Int): kotlin.time.Duration
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Long.nanoseconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.nanoseconds", imports = {"kotlin.time.Duration.Companion.nanoseconds"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun nanoseconds(value: kotlin.Long): kotlin.time.Duration
public final fun parse(value: kotlin.String): kotlin.time.Duration
@@ -344,12 +482,21 @@ public final inline class Duration : kotlin.Comparable<kotlin.time.Duration> {
public final fun parseOrNull(value: kotlin.String): kotlin.time.Duration?
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Double.seconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.seconds", imports = {"kotlin.time.Duration.Companion.seconds"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun seconds(value: kotlin.Double): kotlin.time.Duration
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Int.seconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.seconds", imports = {"kotlin.time.Duration.Companion.seconds"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun seconds(value: kotlin.Int): kotlin.time.Duration
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Long.seconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.seconds", imports = {"kotlin.time.Duration.Companion.seconds"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun seconds(value: kotlin.Long): kotlin.time.Duration
}
}
+168 -21
View File
@@ -1,106 +1,127 @@
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.days() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.days(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Double.days' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.days", imports = {"kotlin.time.Duration.Companion.days"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Double.days: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.days() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.days(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Int.days' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.days", imports = {"kotlin.time.Duration.Companion.days"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Int.days: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.days() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.days(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Long.days' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.days", imports = {"kotlin.time.Duration.Companion.days"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Long.days: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.hours() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.hours(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Double.hours' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.hours", imports = {"kotlin.time.Duration.Companion.hours"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Double.hours: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.hours() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.hours(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Int.hours' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.hours", imports = {"kotlin.time.Duration.Companion.hours"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Int.hours: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.hours() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.hours(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Long.hours' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.hours", imports = {"kotlin.time.Duration.Companion.hours"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Long.hours: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.microseconds() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.microseconds(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Double.microseconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.microseconds", imports = {"kotlin.time.Duration.Companion.microseconds"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Double.microseconds: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.microseconds() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.microseconds(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Int.microseconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.microseconds", imports = {"kotlin.time.Duration.Companion.microseconds"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Int.microseconds: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.microseconds() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.microseconds(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Long.microseconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.microseconds", imports = {"kotlin.time.Duration.Companion.microseconds"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Long.microseconds: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.milliseconds() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.milliseconds(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Double.milliseconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.milliseconds", imports = {"kotlin.time.Duration.Companion.milliseconds"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Double.milliseconds: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.milliseconds() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.milliseconds(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Int.milliseconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.milliseconds", imports = {"kotlin.time.Duration.Companion.milliseconds"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Int.milliseconds: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.milliseconds() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.milliseconds(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Long.milliseconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.milliseconds", imports = {"kotlin.time.Duration.Companion.milliseconds"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Long.milliseconds: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.minutes() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.minutes(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Double.minutes' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.minutes", imports = {"kotlin.time.Duration.Companion.minutes"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Double.minutes: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.minutes() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.minutes(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Int.minutes' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.minutes", imports = {"kotlin.time.Duration.Companion.minutes"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Int.minutes: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.minutes() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.minutes(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Long.minutes' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.minutes", imports = {"kotlin.time.Duration.Companion.minutes"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Long.minutes: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.nanoseconds() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.nanoseconds(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Double.nanoseconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.nanoseconds", imports = {"kotlin.time.Duration.Companion.nanoseconds"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Double.nanoseconds: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.nanoseconds() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.nanoseconds(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Int.nanoseconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.nanoseconds", imports = {"kotlin.time.Duration.Companion.nanoseconds"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Int.nanoseconds: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.nanoseconds() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.nanoseconds(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Long.nanoseconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.nanoseconds", imports = {"kotlin.time.Duration.Companion.nanoseconds"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Long.nanoseconds: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.seconds() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.seconds(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Double.seconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.seconds", imports = {"kotlin.time.Duration.Companion.seconds"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Double.seconds: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.seconds() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.seconds(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Int.seconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.seconds", imports = {"kotlin.time.Duration.Companion.seconds"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Int.seconds: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use Duration.seconds() function instead.", replaceWith = kotlin.ReplaceWith(expression = "Duration.seconds(this)", imports = {"kotlin.time.Duration"}))
@kotlin.Deprecated(message = "Use 'Long.seconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "this.seconds", imports = {"kotlin.time.Duration.Companion.seconds"}))
@kotlin.DeprecatedSinceKotlin(errorSince = "1.6", warningSince = "1.5")
public val kotlin.Long.seconds: kotlin.time.Duration { get; }
@kotlin.SinceKotlin(version = "1.3")
@@ -279,60 +300,177 @@ public final inline class Duration : kotlin.Comparable<kotlin.time.Duration> {
public final val ZERO: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Double.days: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Int.days: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Long.days: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Double.hours: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Int.hours: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Long.hours: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Double.microseconds: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Int.microseconds: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Long.microseconds: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Double.milliseconds: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Int.milliseconds: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Long.milliseconds: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Double.minutes: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Int.minutes: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Long.minutes: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Double.nanoseconds: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Int.nanoseconds: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Long.nanoseconds: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Double.seconds: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Int.seconds: kotlin.time.Duration { get; }
@kotlin.internal.InlineOnly
public final val kotlin.Long.seconds: kotlin.time.Duration { get; }
public final fun convert(value: kotlin.Double, sourceUnit: kotlin.time.DurationUnit, targetUnit: kotlin.time.DurationUnit): kotlin.Double
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Double.days' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.days", imports = {"kotlin.time.Duration.Companion.days"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun days(value: kotlin.Double): kotlin.time.Duration
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Int.days' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.days", imports = {"kotlin.time.Duration.Companion.days"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun days(value: kotlin.Int): kotlin.time.Duration
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Long.days' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.days", imports = {"kotlin.time.Duration.Companion.days"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun days(value: kotlin.Long): kotlin.time.Duration
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Double.hours' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.hours", imports = {"kotlin.time.Duration.Companion.hours"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun hours(value: kotlin.Double): kotlin.time.Duration
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Int.hours' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.hours", imports = {"kotlin.time.Duration.Companion.hours"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun hours(value: kotlin.Int): kotlin.time.Duration
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Long.hours' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.hours", imports = {"kotlin.time.Duration.Companion.hours"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun hours(value: kotlin.Long): kotlin.time.Duration
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Double.microseconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.microseconds", imports = {"kotlin.time.Duration.Companion.microseconds"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun microseconds(value: kotlin.Double): kotlin.time.Duration
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Int.microseconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.microseconds", imports = {"kotlin.time.Duration.Companion.microseconds"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun microseconds(value: kotlin.Int): kotlin.time.Duration
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Long.microseconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.microseconds", imports = {"kotlin.time.Duration.Companion.microseconds"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun microseconds(value: kotlin.Long): kotlin.time.Duration
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Double.milliseconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.milliseconds", imports = {"kotlin.time.Duration.Companion.milliseconds"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun milliseconds(value: kotlin.Double): kotlin.time.Duration
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Int.milliseconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.milliseconds", imports = {"kotlin.time.Duration.Companion.milliseconds"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun milliseconds(value: kotlin.Int): kotlin.time.Duration
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Long.milliseconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.milliseconds", imports = {"kotlin.time.Duration.Companion.milliseconds"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun milliseconds(value: kotlin.Long): kotlin.time.Duration
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Double.minutes' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.minutes", imports = {"kotlin.time.Duration.Companion.minutes"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun minutes(value: kotlin.Double): kotlin.time.Duration
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Int.minutes' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.minutes", imports = {"kotlin.time.Duration.Companion.minutes"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun minutes(value: kotlin.Int): kotlin.time.Duration
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Long.minutes' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.minutes", imports = {"kotlin.time.Duration.Companion.minutes"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun minutes(value: kotlin.Long): kotlin.time.Duration
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Double.nanoseconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.nanoseconds", imports = {"kotlin.time.Duration.Companion.nanoseconds"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun nanoseconds(value: kotlin.Double): kotlin.time.Duration
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Int.nanoseconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.nanoseconds", imports = {"kotlin.time.Duration.Companion.nanoseconds"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun nanoseconds(value: kotlin.Int): kotlin.time.Duration
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Long.nanoseconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.nanoseconds", imports = {"kotlin.time.Duration.Companion.nanoseconds"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun nanoseconds(value: kotlin.Long): kotlin.time.Duration
public final fun parse(value: kotlin.String): kotlin.time.Duration
@@ -344,12 +482,21 @@ public final inline class Duration : kotlin.Comparable<kotlin.time.Duration> {
public final fun parseOrNull(value: kotlin.String): kotlin.time.Duration?
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Double.seconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.seconds", imports = {"kotlin.time.Duration.Companion.seconds"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun seconds(value: kotlin.Double): kotlin.time.Duration
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Int.seconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.seconds", imports = {"kotlin.time.Duration.Companion.seconds"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun seconds(value: kotlin.Int): kotlin.time.Duration
@kotlin.SinceKotlin(version = "1.5")
@kotlin.time.ExperimentalTime
@kotlin.Deprecated(message = "Use 'Long.seconds' extension property from Duration.Companion instead.", replaceWith = kotlin.ReplaceWith(expression = "value.seconds", imports = {"kotlin.time.Duration.Companion.seconds"}))
@kotlin.DeprecatedSinceKotlin(warningSince = "1.6")
public final fun seconds(value: kotlin.Long): kotlin.time.Duration
}
}
@@ -8,6 +8,9 @@ package kotlin.jdk8.time.test
import kotlin.random.Random
import kotlin.test.*
import kotlin.time.*
import kotlin.time.Duration.Companion.days
import kotlin.time.Duration.Companion.nanoseconds
import kotlin.time.Duration.Companion.seconds
import java.time.Duration as JTDuration
class DurationConversionTest {
@@ -15,7 +18,7 @@ class DurationConversionTest {
fun twoWayConversion() {
fun test(days: Int, hours: Int, minutes: Int, seconds: Int, millis: Int, nanos: Int) {
val duration = with(Duration) {
days(days) + hours(hours) + minutes(minutes) + seconds(seconds) + milliseconds(millis) + nanoseconds(nanos)
days.days + hours.hours + minutes.minutes + seconds.seconds + millis.milliseconds + nanos.nanoseconds
}
val jtDuration = JTDuration.ZERO
.plusDays(days.toLong())
@@ -50,12 +53,12 @@ class DurationConversionTest {
val duration1 = jtDuration1.toKotlinDuration()
val duration2 = jtDuration1.toKotlinDuration()
assertEquals(duration1, duration2)
assertEquals(Duration.days(365 * 150), duration2)
assertEquals((365 * 150).days, duration2)
}
@Test
fun kotlinToJavaClamping() {
val duration = Duration.seconds(Long.MAX_VALUE) * 5
val duration = Long.MAX_VALUE.seconds * 5
val jtDuration = duration.toJavaDuration()
assertEquals(JTDuration.ofSeconds(Long.MAX_VALUE), jtDuration)
@@ -66,7 +69,7 @@ class DurationConversionTest {
@Test
fun randomIsoConversionEquivalence() {
repeat(100) {
val duration = Duration.nanoseconds(Random.nextLong(-(1L shl 53) + 1, 1L shl 53))
val duration = Random.nextLong(-(1L shl 53) + 1, 1L shl 53).nanoseconds
val fromString = JTDuration.parse(duration.toIsoString())
val fromDuration = duration.toJavaDuration()
@@ -37,7 +37,7 @@ internal class HrTimeSource(val process: Process) : TimeSource {
override fun markNow(): TimeMark = object : TimeMark() {
val startedAt = process.hrtime()
override fun elapsedNow(): Duration =
process.hrtime(startedAt).let { (seconds, nanos) -> Duration.seconds(seconds) + Duration.nanoseconds(nanos) }
process.hrtime(startedAt).let { (seconds, nanos) -> seconds.toDuration(DurationUnit.SECONDS) + nanos.toDuration(DurationUnit.NANOSECONDS) }
}
override fun toString(): String = "TimeSource(process.hrtime())"
@@ -9,37 +9,42 @@ import samples.*
import kotlin.test.*
import kotlin.time.*
import kotlin.time.Duration.Companion.days
import kotlin.time.Duration.Companion.milliseconds
import kotlin.time.Duration.Companion.minutes
import kotlin.time.Duration.Companion.nanoseconds
import kotlin.time.Duration.Companion.seconds
class Durations {
@Sample
fun toIsoString() {
assertPrints(Duration.nanoseconds(25).toIsoString(), "PT0.000000025S")
assertPrints(Duration.milliseconds(120.3).toIsoString(), "PT0.120300S")
assertPrints(Duration.seconds(30.5).toIsoString(), "PT30.500S")
assertPrints(Duration.minutes(30.5).toIsoString(), "PT30M30S")
assertPrints(Duration.seconds(86420).toIsoString(), "PT24H0M20S")
assertPrints(Duration.days(2).toIsoString(), "PT48H")
assertPrints(25.nanoseconds.toIsoString(), "PT0.000000025S")
assertPrints(120.3.milliseconds.toIsoString(), "PT0.120300S")
assertPrints(30.5.seconds.toIsoString(), "PT30.500S")
assertPrints(30.5.minutes.toIsoString(), "PT30M30S")
assertPrints(86420.seconds.toIsoString(), "PT24H0M20S")
assertPrints(2.days.toIsoString(), "PT48H")
assertPrints(Duration.ZERO.toIsoString(), "PT0S")
assertPrints(Duration.INFINITE.toIsoString(), "PT9999999999999H")
}
@Sample
fun toStringDefault() {
assertPrints(Duration.days(45), "45d")
assertPrints(Duration.days(1.5), "1d 12h")
assertPrints(Duration.minutes(1230), "20h 30m")
assertPrints(Duration.minutes(920), "15h 20m")
assertPrints(Duration.seconds(1.546), "1.546s")
assertPrints(Duration.milliseconds(25.12), "25.12ms")
assertPrints(45.days, "45d")
assertPrints(1.5.days, "1d 12h")
assertPrints(1230.minutes, "20h 30m")
assertPrints(920.minutes, "15h 20m")
assertPrints(1.546.seconds, "1.546s")
assertPrints(25.12.milliseconds, "25.12ms")
}
@Sample
fun toStringDecimals() {
assertPrints(Duration.minutes(1230).toString(DurationUnit.DAYS, 2), "0.85d")
assertPrints(Duration.minutes(1230).toString(DurationUnit.HOURS, 2), "20.50h")
assertPrints(Duration.minutes(1230).toString(DurationUnit.MINUTES), "1230m")
assertPrints(Duration.minutes(1230).toString(DurationUnit.SECONDS), "73800s")
assertPrints(1230.minutes.toString(DurationUnit.DAYS, 2), "0.85d")
assertPrints(1230.minutes.toString(DurationUnit.HOURS, 2), "20.50h")
assertPrints(1230.minutes.toString(DurationUnit.MINUTES), "1230m")
assertPrints(1230.minutes.toString(DurationUnit.SECONDS), "73800s")
}
@Sample
+251 -32
View File
@@ -18,9 +18,9 @@ import kotlin.math.*
* The type can store duration values up to ±146 years with nanosecond precision,
* and up to ±146 million years with millisecond precision.
*
* To construct a duration, use either the extension function [toDuration] available on [Int], [Long], and [Double] numeric types,
* or the `Duration` companion object functions [Duration.hours], [Duration.minutes], [Duration.seconds], and so on,
* taking [Int], [Long], or [Double] numbers as parameters.
* To construct a duration use either the extension function [toDuration],
* or the extension properties [hours], [minutes], [seconds], and so on,
* available on [Int], [Long], and [Double] numeric types.
*
* To get the value of this duration expressed in a particular [duration units][DurationUnit]
* use the functions [toInt], [toLong], and [toDouble]
@@ -59,12 +59,141 @@ public value class Duration internal constructor(private val rawValue: Long) : C
public fun convert(value: Double, sourceUnit: DurationUnit, targetUnit: DurationUnit): Double =
convertDurationUnit(value, sourceUnit, targetUnit)
// Duration construction extension properties in Duration companion scope
/** Returns a [Duration] equal to this [Int] number of nanoseconds. */
@kotlin.internal.InlineOnly
public inline val Int.nanoseconds get() = toDuration(DurationUnit.NANOSECONDS)
/** Returns a [Duration] equal to this [Long] number of nanoseconds. */
@kotlin.internal.InlineOnly
public inline val Long.nanoseconds get() = toDuration(DurationUnit.NANOSECONDS)
/**
* Returns a [Duration] equal to this [Double] number of nanoseconds.
*
* @throws IllegalArgumentException if this [Double] value is `NaN`.
*/
@kotlin.internal.InlineOnly
public inline val Double.nanoseconds get() = toDuration(DurationUnit.NANOSECONDS)
/** Returns a [Duration] equal to this [Int] number of microseconds. */
@kotlin.internal.InlineOnly
public inline val Int.microseconds get() = toDuration(DurationUnit.MICROSECONDS)
/** Returns a [Duration] equal to this [Long] number of microseconds. */
@kotlin.internal.InlineOnly
public inline val Long.microseconds get() = toDuration(DurationUnit.MICROSECONDS)
/**
* Returns a [Duration] equal to this [Double] number of microseconds.
*
* @throws IllegalArgumentException if this [Double] value is `NaN`.
*/
@kotlin.internal.InlineOnly
public inline val Double.microseconds get() = toDuration(DurationUnit.MICROSECONDS)
/** Returns a [Duration] equal to this [Int] number of milliseconds. */
@kotlin.internal.InlineOnly
public inline val Int.milliseconds get() = toDuration(DurationUnit.MILLISECONDS)
/** Returns a [Duration] equal to this [Long] number of milliseconds. */
@kotlin.internal.InlineOnly
public inline val Long.milliseconds get() = toDuration(DurationUnit.MILLISECONDS)
/**
* Returns a [Duration] equal to this [Double] number of milliseconds.
*
* @throws IllegalArgumentException if this [Double] value is `NaN`.
*/
@kotlin.internal.InlineOnly
public inline val Double.milliseconds get() = toDuration(DurationUnit.MILLISECONDS)
/** Returns a [Duration] equal to this [Int] number of seconds. */
@kotlin.internal.InlineOnly
public inline val Int.seconds get() = toDuration(DurationUnit.SECONDS)
/** Returns a [Duration] equal to this [Long] number of seconds. */
@kotlin.internal.InlineOnly
public inline val Long.seconds get() = toDuration(DurationUnit.SECONDS)
/**
* Returns a [Duration] equal to this [Double] number of seconds.
*
* @throws IllegalArgumentException if this [Double] value is `NaN`.
*/
@kotlin.internal.InlineOnly
public inline val Double.seconds get() = toDuration(DurationUnit.SECONDS)
/** Returns a [Duration] equal to this [Int] number of minutes. */
@kotlin.internal.InlineOnly
public inline val Int.minutes get() = toDuration(DurationUnit.MINUTES)
/** Returns a [Duration] equal to this [Long] number of minutes. */
@kotlin.internal.InlineOnly
public inline val Long.minutes get() = toDuration(DurationUnit.MINUTES)
/**
* Returns a [Duration] equal to this [Double] number of minutes.
*
* @throws IllegalArgumentException if this [Double] value is `NaN`.
*/
@kotlin.internal.InlineOnly
public inline val Double.minutes get() = toDuration(DurationUnit.MINUTES)
/** Returns a [Duration] equal to this [Int] number of hours. */
@kotlin.internal.InlineOnly
public inline val Int.hours get() = toDuration(DurationUnit.HOURS)
/** Returns a [Duration] equal to this [Long] number of hours. */
@kotlin.internal.InlineOnly
public inline val Long.hours get() = toDuration(DurationUnit.HOURS)
/**
* Returns a [Duration] equal to this [Double] number of hours.
*
* @throws IllegalArgumentException if this [Double] value is `NaN`.
*/
@kotlin.internal.InlineOnly
public inline val Double.hours get() = toDuration(DurationUnit.HOURS)
/** Returns a [Duration] equal to this [Int] number of days. */
@kotlin.internal.InlineOnly
public inline val Int.days get() = toDuration(DurationUnit.DAYS)
/** Returns a [Duration] equal to this [Long] number of days. */
@kotlin.internal.InlineOnly
public inline val Long.days get() = toDuration(DurationUnit.DAYS)
/**
* Returns a [Duration] equal to this [Double] number of days.
*
* @throws IllegalArgumentException if this [Double] value is `NaN`.
*/
@kotlin.internal.InlineOnly
public inline val Double.days get() = toDuration(DurationUnit.DAYS)
// deprecated static factory functions
/** Returns a [Duration] representing the specified [value] number of nanoseconds. */
@SinceKotlin("1.5")
@ExperimentalTime
@Deprecated("Use 'Int.nanoseconds' extension property from Duration.Companion instead.", ReplaceWith("value.nanoseconds", "kotlin.time.Duration.Companion.nanoseconds"))
@DeprecatedSinceKotlin(warningSince = "1.6")
public fun nanoseconds(value: Int): Duration = value.toDuration(DurationUnit.NANOSECONDS)
/** Returns a [Duration] representing the specified [value] number of nanoseconds. */
@SinceKotlin("1.5")
@ExperimentalTime
@Deprecated("Use 'Long.nanoseconds' extension property from Duration.Companion instead.", ReplaceWith("value.nanoseconds", "kotlin.time.Duration.Companion.nanoseconds"))
@DeprecatedSinceKotlin(warningSince = "1.6")
public fun nanoseconds(value: Long): Duration = value.toDuration(DurationUnit.NANOSECONDS)
/**
@@ -73,14 +202,24 @@ public value class Duration internal constructor(private val rawValue: Long) : C
* @throws IllegalArgumentException if the provided `Double` [value] is `NaN`.
*/
@SinceKotlin("1.5")
@ExperimentalTime
@Deprecated("Use 'Double.nanoseconds' extension property from Duration.Companion instead.", ReplaceWith("value.nanoseconds", "kotlin.time.Duration.Companion.nanoseconds"))
@DeprecatedSinceKotlin(warningSince = "1.6")
public fun nanoseconds(value: Double): Duration = value.toDuration(DurationUnit.NANOSECONDS)
/** Returns a [Duration] representing the specified [value] number of microseconds. */
@SinceKotlin("1.5")
@ExperimentalTime
@Deprecated("Use 'Int.microseconds' extension property from Duration.Companion instead.", ReplaceWith("value.microseconds", "kotlin.time.Duration.Companion.microseconds"))
@DeprecatedSinceKotlin(warningSince = "1.6")
public fun microseconds(value: Int): Duration = value.toDuration(DurationUnit.MICROSECONDS)
/** Returns a [Duration] representing the specified [value] number of microseconds. */
@SinceKotlin("1.5")
@ExperimentalTime
@Deprecated("Use 'Long.microseconds' extension property from Duration.Companion instead.", ReplaceWith("value.microseconds", "kotlin.time.Duration.Companion.microseconds"))
@DeprecatedSinceKotlin(warningSince = "1.6")
public fun microseconds(value: Long): Duration = value.toDuration(DurationUnit.MICROSECONDS)
/**
@@ -89,14 +228,24 @@ public value class Duration internal constructor(private val rawValue: Long) : C
* @throws IllegalArgumentException if the provided `Double` [value] is `NaN`.
*/
@SinceKotlin("1.5")
@ExperimentalTime
@Deprecated("Use 'Double.microseconds' extension property from Duration.Companion instead.", ReplaceWith("value.microseconds", "kotlin.time.Duration.Companion.microseconds"))
@DeprecatedSinceKotlin(warningSince = "1.6")
public fun microseconds(value: Double): Duration = value.toDuration(DurationUnit.MICROSECONDS)
/** Returns a [Duration] representing the specified [value] number of milliseconds. */
@SinceKotlin("1.5")
@ExperimentalTime
@Deprecated("Use 'Int.milliseconds' extension property from Duration.Companion instead.", ReplaceWith("value.milliseconds", "kotlin.time.Duration.Companion.milliseconds"))
@DeprecatedSinceKotlin(warningSince = "1.6")
public fun milliseconds(value: Int): Duration = value.toDuration(DurationUnit.MILLISECONDS)
/** Returns a [Duration] representing the specified [value] number of milliseconds. */
@SinceKotlin("1.5")
@ExperimentalTime
@Deprecated("Use 'Long.milliseconds' extension property from Duration.Companion instead.", ReplaceWith("value.milliseconds", "kotlin.time.Duration.Companion.milliseconds"))
@DeprecatedSinceKotlin(warningSince = "1.6")
public fun milliseconds(value: Long): Duration = value.toDuration(DurationUnit.MILLISECONDS)
/**
@@ -105,14 +254,24 @@ public value class Duration internal constructor(private val rawValue: Long) : C
* @throws IllegalArgumentException if the provided `Double` [value] is `NaN`.
*/
@SinceKotlin("1.5")
@ExperimentalTime
@Deprecated("Use 'Double.milliseconds' extension property from Duration.Companion instead.", ReplaceWith("value.milliseconds", "kotlin.time.Duration.Companion.milliseconds"))
@DeprecatedSinceKotlin(warningSince = "1.6")
public fun milliseconds(value: Double): Duration = value.toDuration(DurationUnit.MILLISECONDS)
/** Returns a [Duration] representing the specified [value] number of seconds. */
@SinceKotlin("1.5")
@ExperimentalTime
@Deprecated("Use 'Int.seconds' extension property from Duration.Companion instead.", ReplaceWith("value.seconds", "kotlin.time.Duration.Companion.seconds"))
@DeprecatedSinceKotlin(warningSince = "1.6")
public fun seconds(value: Int): Duration = value.toDuration(DurationUnit.SECONDS)
/** Returns a [Duration] representing the specified [value] number of seconds. */
@SinceKotlin("1.5")
@ExperimentalTime
@Deprecated("Use 'Long.seconds' extension property from Duration.Companion instead.", ReplaceWith("value.seconds", "kotlin.time.Duration.Companion.seconds"))
@DeprecatedSinceKotlin(warningSince = "1.6")
public fun seconds(value: Long): Duration = value.toDuration(DurationUnit.SECONDS)
/**
@@ -121,14 +280,24 @@ public value class Duration internal constructor(private val rawValue: Long) : C
* @throws IllegalArgumentException if the provided `Double` [value] is `NaN`.
*/
@SinceKotlin("1.5")
@ExperimentalTime
@Deprecated("Use 'Double.seconds' extension property from Duration.Companion instead.", ReplaceWith("value.seconds", "kotlin.time.Duration.Companion.seconds"))
@DeprecatedSinceKotlin(warningSince = "1.6")
public fun seconds(value: Double): Duration = value.toDuration(DurationUnit.SECONDS)
/** Returns a [Duration] representing the specified [value] number of minutes. */
@SinceKotlin("1.5")
@ExperimentalTime
@Deprecated("Use 'Int.minutes' extension property from Duration.Companion instead.", ReplaceWith("value.minutes", "kotlin.time.Duration.Companion.minutes"))
@DeprecatedSinceKotlin(warningSince = "1.6")
public fun minutes(value: Int): Duration = value.toDuration(DurationUnit.MINUTES)
/** Returns a [Duration] representing the specified [value] number of minutes. */
@SinceKotlin("1.5")
@ExperimentalTime
@Deprecated("Use 'Long.minutes' extension property from Duration.Companion instead.", ReplaceWith("value.minutes", "kotlin.time.Duration.Companion.minutes"))
@DeprecatedSinceKotlin(warningSince = "1.6")
public fun minutes(value: Long): Duration = value.toDuration(DurationUnit.MINUTES)
/**
@@ -137,14 +306,24 @@ public value class Duration internal constructor(private val rawValue: Long) : C
* @throws IllegalArgumentException if the provided `Double` [value] is `NaN`.
*/
@SinceKotlin("1.5")
@ExperimentalTime
@Deprecated("Use 'Double.minutes' extension property from Duration.Companion instead.", ReplaceWith("value.minutes", "kotlin.time.Duration.Companion.minutes"))
@DeprecatedSinceKotlin(warningSince = "1.6")
public fun minutes(value: Double): Duration = value.toDuration(DurationUnit.MINUTES)
/** Returns a [Duration] representing the specified [value] number of hours. */
@SinceKotlin("1.5")
@ExperimentalTime
@Deprecated("Use 'Int.hours' extension property from Duration.Companion instead.", ReplaceWith("value.hours", "kotlin.time.Duration.Companion.hours"))
@DeprecatedSinceKotlin(warningSince = "1.6")
public fun hours(value: Int): Duration = value.toDuration(DurationUnit.HOURS)
/** Returns a [Duration] representing the specified [value] number of hours. */
@SinceKotlin("1.5")
@ExperimentalTime
@Deprecated("Use 'Long.hours' extension property from Duration.Companion instead.", ReplaceWith("value.hours", "kotlin.time.Duration.Companion.hours"))
@DeprecatedSinceKotlin(warningSince = "1.6")
public fun hours(value: Long): Duration = value.toDuration(DurationUnit.HOURS)
/**
@@ -153,14 +332,24 @@ public value class Duration internal constructor(private val rawValue: Long) : C
* @throws IllegalArgumentException if the provided `Double` [value] is `NaN`.
*/
@SinceKotlin("1.5")
@ExperimentalTime
@Deprecated("Use 'Double.hours' extension property from Duration.Companion instead.", ReplaceWith("value.hours", "kotlin.time.Duration.Companion.hours"))
@DeprecatedSinceKotlin(warningSince = "1.6")
public fun hours(value: Double): Duration = value.toDuration(DurationUnit.HOURS)
/** Returns a [Duration] representing the specified [value] number of days. */
@SinceKotlin("1.5")
@ExperimentalTime
@Deprecated("Use 'Int.days' extension property from Duration.Companion instead.", ReplaceWith("value.days", "kotlin.time.Duration.Companion.days"))
@DeprecatedSinceKotlin(warningSince = "1.6")
public fun days(value: Int): Duration = value.toDuration(DurationUnit.DAYS)
/** Returns a [Duration] representing the specified [value] number of days. */
@SinceKotlin("1.5")
@ExperimentalTime
@Deprecated("Use 'Long.days' extension property from Duration.Companion instead.", ReplaceWith("value.days", "kotlin.time.Duration.Companion.days"))
@DeprecatedSinceKotlin(warningSince = "1.6")
public fun days(value: Long): Duration = value.toDuration(DurationUnit.DAYS)
/**
@@ -169,6 +358,9 @@ public value class Duration internal constructor(private val rawValue: Long) : C
* @throws IllegalArgumentException if the provided `Double` [value] is `NaN`.
*/
@SinceKotlin("1.5")
@ExperimentalTime
@Deprecated("Use 'Double.days' extension property from Duration.Companion instead.", ReplaceWith("value.days", "kotlin.time.Duration.Companion.days"))
@DeprecatedSinceKotlin(warningSince = "1.6")
public fun days(value: Double): Duration = value.toDuration(DurationUnit.DAYS)
/**
@@ -882,160 +1074,187 @@ public fun Double.toDuration(unit: DurationUnit): Duration {
}
// constructing from number of units
// extension properties
// deprecated extension properties
/** Returns a [Duration] equal to this [Int] number of nanoseconds. */
@SinceKotlin("1.3")
@ExperimentalTime
@Deprecated("Use Duration.nanoseconds() function instead.", ReplaceWith("Duration.nanoseconds(this)", "kotlin.time.Duration"))
@Deprecated("Use 'Int.nanoseconds' extension property from Duration.Companion instead.", ReplaceWith("this.nanoseconds", "kotlin.time.Duration.Companion.nanoseconds"))
@DeprecatedSinceKotlin(warningSince = "1.5", errorSince = "1.6")
public val Int.nanoseconds get() = toDuration(DurationUnit.NANOSECONDS)
/** Returns a [Duration] equal to this [Long] number of nanoseconds. */
@SinceKotlin("1.3")
@ExperimentalTime
@Deprecated("Use Duration.nanoseconds() function instead.", ReplaceWith("Duration.nanoseconds(this)", "kotlin.time.Duration"))
@Deprecated("Use 'Long.nanoseconds' extension property from Duration.Companion instead.", ReplaceWith("this.nanoseconds", "kotlin.time.Duration.Companion.nanoseconds"))
@DeprecatedSinceKotlin(warningSince = "1.5", errorSince = "1.6")
public val Long.nanoseconds get() = toDuration(DurationUnit.NANOSECONDS)
/**
* Returns a [Duration] equal to this [Double] number of nanoseconds.
*
* @throws IllegalArgumentException if this `Double` value is `NaN`.
* @throws IllegalArgumentException if this [Double] value is `NaN`.
*/
@SinceKotlin("1.3")
@ExperimentalTime
@Deprecated("Use Duration.nanoseconds() function instead.", ReplaceWith("Duration.nanoseconds(this)", "kotlin.time.Duration"))
@Deprecated("Use 'Double.nanoseconds' extension property from Duration.Companion instead.", ReplaceWith("this.nanoseconds", "kotlin.time.Duration.Companion.nanoseconds"))
@DeprecatedSinceKotlin(warningSince = "1.5", errorSince = "1.6")
public val Double.nanoseconds get() = toDuration(DurationUnit.NANOSECONDS)
/** Returns a [Duration] equal to this [Int] number of microseconds. */
@SinceKotlin("1.3")
@ExperimentalTime
@Deprecated("Use Duration.microseconds() function instead.", ReplaceWith("Duration.microseconds(this)", "kotlin.time.Duration"))
@Deprecated("Use 'Int.microseconds' extension property from Duration.Companion instead.", ReplaceWith("this.microseconds", "kotlin.time.Duration.Companion.microseconds"))
@DeprecatedSinceKotlin(warningSince = "1.5", errorSince = "1.6")
public val Int.microseconds get() = toDuration(DurationUnit.MICROSECONDS)
/** Returns a [Duration] equal to this [Long] number of microseconds. */
@SinceKotlin("1.3")
@ExperimentalTime
@Deprecated("Use Duration.microseconds() function instead.", ReplaceWith("Duration.microseconds(this)", "kotlin.time.Duration"))
@Deprecated("Use 'Long.microseconds' extension property from Duration.Companion instead.", ReplaceWith("this.microseconds", "kotlin.time.Duration.Companion.microseconds"))
@DeprecatedSinceKotlin(warningSince = "1.5", errorSince = "1.6")
public val Long.microseconds get() = toDuration(DurationUnit.MICROSECONDS)
/**
* Returns a [Duration] equal to this [Double] number of microseconds.
*
* @throws IllegalArgumentException if this `Double` value is `NaN`.
* @throws IllegalArgumentException if this [Double] value is `NaN`.
*/
@SinceKotlin("1.3")
@ExperimentalTime
@Deprecated("Use Duration.microseconds() function instead.", ReplaceWith("Duration.microseconds(this)", "kotlin.time.Duration"))
@Deprecated("Use 'Double.microseconds' extension property from Duration.Companion instead.", ReplaceWith("this.microseconds", "kotlin.time.Duration.Companion.microseconds"))
@DeprecatedSinceKotlin(warningSince = "1.5", errorSince = "1.6")
public val Double.microseconds get() = toDuration(DurationUnit.MICROSECONDS)
/** Returns a [Duration] equal to this [Int] number of milliseconds. */
@SinceKotlin("1.3")
@ExperimentalTime
@Deprecated("Use Duration.milliseconds() function instead.", ReplaceWith("Duration.milliseconds(this)", "kotlin.time.Duration"))
@Deprecated("Use 'Int.milliseconds' extension property from Duration.Companion instead.", ReplaceWith("this.milliseconds", "kotlin.time.Duration.Companion.milliseconds"))
@DeprecatedSinceKotlin(warningSince = "1.5", errorSince = "1.6")
public val Int.milliseconds get() = toDuration(DurationUnit.MILLISECONDS)
/** Returns a [Duration] equal to this [Long] number of milliseconds. */
@SinceKotlin("1.3")
@ExperimentalTime
@Deprecated("Use Duration.milliseconds() function instead.", ReplaceWith("Duration.milliseconds(this)", "kotlin.time.Duration"))
@Deprecated("Use 'Long.milliseconds' extension property from Duration.Companion instead.", ReplaceWith("this.milliseconds", "kotlin.time.Duration.Companion.milliseconds"))
@DeprecatedSinceKotlin(warningSince = "1.5", errorSince = "1.6")
public val Long.milliseconds get() = toDuration(DurationUnit.MILLISECONDS)
/**
* Returns a [Duration] equal to this [Double] number of milliseconds.
*
* @throws IllegalArgumentException if this `Double` value is `NaN`.
* @throws IllegalArgumentException if this [Double] value is `NaN`.
*/
@SinceKotlin("1.3")
@ExperimentalTime
@Deprecated("Use Duration.milliseconds() function instead.", ReplaceWith("Duration.milliseconds(this)", "kotlin.time.Duration"))
@Deprecated("Use 'Double.milliseconds' extension property from Duration.Companion instead.", ReplaceWith("this.milliseconds", "kotlin.time.Duration.Companion.milliseconds"))
@DeprecatedSinceKotlin(warningSince = "1.5", errorSince = "1.6")
public val Double.milliseconds get() = toDuration(DurationUnit.MILLISECONDS)
/** Returns a [Duration] equal to this [Int] number of seconds. */
@SinceKotlin("1.3")
@ExperimentalTime
@Deprecated("Use Duration.seconds() function instead.", ReplaceWith("Duration.seconds(this)", "kotlin.time.Duration"))
@Deprecated("Use 'Int.seconds' extension property from Duration.Companion instead.", ReplaceWith("this.seconds", "kotlin.time.Duration.Companion.seconds"))
@DeprecatedSinceKotlin(warningSince = "1.5", errorSince = "1.6")
public val Int.seconds get() = toDuration(DurationUnit.SECONDS)
/** Returns a [Duration] equal to this [Long] number of seconds. */
@SinceKotlin("1.3")
@ExperimentalTime
@Deprecated("Use Duration.seconds() function instead.", ReplaceWith("Duration.seconds(this)", "kotlin.time.Duration"))
@Deprecated("Use 'Long.seconds' extension property from Duration.Companion instead.", ReplaceWith("this.seconds", "kotlin.time.Duration.Companion.seconds"))
@DeprecatedSinceKotlin(warningSince = "1.5", errorSince = "1.6")
public val Long.seconds get() = toDuration(DurationUnit.SECONDS)
/**
* Returns a [Duration] equal to this [Double] number of seconds.
*
* @throws IllegalArgumentException if this `Double` value is `NaN`.
* @throws IllegalArgumentException if this [Double] value is `NaN`.
*/
@SinceKotlin("1.3")
@ExperimentalTime
@Deprecated("Use Duration.seconds() function instead.", ReplaceWith("Duration.seconds(this)", "kotlin.time.Duration"))
@Deprecated("Use 'Double.seconds' extension property from Duration.Companion instead.", ReplaceWith("this.seconds", "kotlin.time.Duration.Companion.seconds"))
@DeprecatedSinceKotlin(warningSince = "1.5", errorSince = "1.6")
public val Double.seconds get() = toDuration(DurationUnit.SECONDS)
/** Returns a [Duration] equal to this [Int] number of minutes. */
@SinceKotlin("1.3")
@ExperimentalTime
@Deprecated("Use Duration.minutes() function instead.", ReplaceWith("Duration.minutes(this)", "kotlin.time.Duration"))
@Deprecated("Use 'Int.minutes' extension property from Duration.Companion instead.", ReplaceWith("this.minutes", "kotlin.time.Duration.Companion.minutes"))
@DeprecatedSinceKotlin(warningSince = "1.5", errorSince = "1.6")
public val Int.minutes get() = toDuration(DurationUnit.MINUTES)
/** Returns a [Duration] equal to this [Long] number of minutes. */
@SinceKotlin("1.3")
@ExperimentalTime
@Deprecated("Use Duration.minutes() function instead.", ReplaceWith("Duration.minutes(this)", "kotlin.time.Duration"))
@Deprecated("Use 'Long.minutes' extension property from Duration.Companion instead.", ReplaceWith("this.minutes", "kotlin.time.Duration.Companion.minutes"))
@DeprecatedSinceKotlin(warningSince = "1.5", errorSince = "1.6")
public val Long.minutes get() = toDuration(DurationUnit.MINUTES)
/**
* Returns a [Duration] equal to this [Double] number of minutes.
*
* @throws IllegalArgumentException if this `Double` value is `NaN`.
* @throws IllegalArgumentException if this [Double] value is `NaN`.
*/
@SinceKotlin("1.3")
@ExperimentalTime
@Deprecated("Use Duration.minutes() function instead.", ReplaceWith("Duration.minutes(this)", "kotlin.time.Duration"))
@Deprecated("Use 'Double.minutes' extension property from Duration.Companion instead.", ReplaceWith("this.minutes", "kotlin.time.Duration.Companion.minutes"))
@DeprecatedSinceKotlin(warningSince = "1.5", errorSince = "1.6")
public val Double.minutes get() = toDuration(DurationUnit.MINUTES)
/** Returns a [Duration] equal to this [Int] number of hours. */
@SinceKotlin("1.3")
@ExperimentalTime
@Deprecated("Use Duration.hours() function instead.", ReplaceWith("Duration.hours(this)", "kotlin.time.Duration"))
@Deprecated("Use 'Int.hours' extension property from Duration.Companion instead.", ReplaceWith("this.hours", "kotlin.time.Duration.Companion.hours"))
@DeprecatedSinceKotlin(warningSince = "1.5", errorSince = "1.6")
public val Int.hours get() = toDuration(DurationUnit.HOURS)
/** Returns a [Duration] equal to this [Long] number of hours. */
@SinceKotlin("1.3")
@ExperimentalTime
@Deprecated("Use Duration.hours() function instead.", ReplaceWith("Duration.hours(this)", "kotlin.time.Duration"))
@Deprecated("Use 'Long.hours' extension property from Duration.Companion instead.", ReplaceWith("this.hours", "kotlin.time.Duration.Companion.hours"))
@DeprecatedSinceKotlin(warningSince = "1.5", errorSince = "1.6")
public val Long.hours get() = toDuration(DurationUnit.HOURS)
/**
* Returns a [Duration] equal to this [Double] number of hours.
*
* @throws IllegalArgumentException if this `Double` value is `NaN`.
* @throws IllegalArgumentException if this [Double] value is `NaN`.
*/
@SinceKotlin("1.3")
@ExperimentalTime
@Deprecated("Use Duration.hours() function instead.", ReplaceWith("Duration.hours(this)", "kotlin.time.Duration"))
@Deprecated("Use 'Double.hours' extension property from Duration.Companion instead.", ReplaceWith("this.hours", "kotlin.time.Duration.Companion.hours"))
@DeprecatedSinceKotlin(warningSince = "1.5", errorSince = "1.6")
public val Double.hours get() = toDuration(DurationUnit.HOURS)
/** Returns a [Duration] equal to this [Int] number of days. */
@SinceKotlin("1.3")
@ExperimentalTime
@Deprecated("Use Duration.days() function instead.", ReplaceWith("Duration.days(this)", "kotlin.time.Duration"))
@Deprecated("Use 'Int.days' extension property from Duration.Companion instead.", ReplaceWith("this.days", "kotlin.time.Duration.Companion.days"))
@DeprecatedSinceKotlin(warningSince = "1.5", errorSince = "1.6")
public val Int.days get() = toDuration(DurationUnit.DAYS)
/** Returns a [Duration] equal to this [Long] number of days. */
@SinceKotlin("1.3")
@ExperimentalTime
@Deprecated("Use Duration.days() function instead.", ReplaceWith("Duration.days(this)", "kotlin.time.Duration"))
@Deprecated("Use 'Long.days' extension property from Duration.Companion instead.", ReplaceWith("this.days", "kotlin.time.Duration.Companion.days"))
@DeprecatedSinceKotlin(warningSince = "1.5", errorSince = "1.6")
public val Long.days get() = toDuration(DurationUnit.DAYS)
/**
* Returns a [Duration] equal to this [Double] number of days.
*
* @throws IllegalArgumentException if this `Double` value is `NaN`.
* @throws IllegalArgumentException if this [Double] value is `NaN`.
*/
@SinceKotlin("1.3")
@ExperimentalTime
@Deprecated("Use Duration.days() function instead.", ReplaceWith("Duration.days(this)", "kotlin.time.Duration"))
@Deprecated("Use 'Double.days' extension property from Duration.Companion instead.", ReplaceWith("this.days", "kotlin.time.Duration.Companion.days"))
@DeprecatedSinceKotlin(warningSince = "1.5", errorSince = "1.6")
public val Double.days get() = toDuration(DurationUnit.DAYS)
+175 -170
View File
@@ -13,6 +13,13 @@ import kotlin.native.concurrent.SharedImmutable
import kotlin.test.*
import kotlin.time.*
import kotlin.random.*
import kotlin.time.Duration.Companion.days
import kotlin.time.Duration.Companion.hours
import kotlin.time.Duration.Companion.microseconds
import kotlin.time.Duration.Companion.milliseconds
import kotlin.time.Duration.Companion.minutes
import kotlin.time.Duration.Companion.nanoseconds
import kotlin.time.Duration.Companion.seconds
@SharedImmutable
private val units = DurationUnit.values()
@@ -47,8 +54,8 @@ class DurationTest {
val borderValue = convertDurationUnit(MAX_NANOS, DurationUnit.NANOSECONDS, unit)
val d1 = borderValue.toDuration(unit)
val d2 = (borderValue + 1).toDuration(unit)
assertNotEquals(d1, d1 + Duration.nanoseconds(1))
assertEquals(d2, d2 + Duration.nanoseconds(1))
assertNotEquals(d1, d1 + 1.nanoseconds)
assertEquals(d2, d2 + 1.nanoseconds)
}
assertEquals(Long.MAX_VALUE / 1000, Long.MAX_VALUE.toDuration(DurationUnit.MICROSECONDS).inWholeMilliseconds)
@@ -96,8 +103,8 @@ class DurationTest {
}
run { // invariant Duration.nanoseconds(d.inWholeNanoseconds) == d when whole nanoseconds fits into Long range
val d1 = Duration.nanoseconds(MAX_NANOS + 1)
val d2 = Duration.nanoseconds(d1.inWholeNanoseconds)
val d1 = (MAX_NANOS + 1).nanoseconds
val d2 = d1.inWholeNanoseconds.nanoseconds
assertEquals(d1.inWholeNanoseconds, d2.inWholeNanoseconds)
assertEquals(d1, d2)
}
@@ -115,10 +122,10 @@ class DurationTest {
)
}
val d4 = Duration.nanoseconds(Long.MAX_VALUE)
val d3 = Duration.nanoseconds(MAX_NANOS + 1)
val d2 = Duration.nanoseconds(MAX_NANOS)
val d1 = Duration.nanoseconds(MAX_NANOS - 1)
val d4 = Long.MAX_VALUE.nanoseconds
val d3 = (MAX_NANOS + 1).nanoseconds
val d2 = MAX_NANOS.nanoseconds
val d1 = (MAX_NANOS - 1).nanoseconds
assertGreater(d4, d2, "same sign, different ranges")
assertGreater(d3, d2, "same sign, different ranges 2")
@@ -136,57 +143,57 @@ class DurationTest {
val n2 = Random.nextLong(Long.MAX_VALUE)
val n3 = Random.nextDouble()
assertEquals(n1.toDuration(DurationUnit.DAYS), Duration.days(n1))
assertEquals(n2.toDuration(DurationUnit.DAYS), Duration.days(n2))
assertEquals(n3.toDuration(DurationUnit.DAYS), Duration.days(n3))
assertEquals(n1.toDuration(DurationUnit.DAYS), n1.days)
assertEquals(n2.toDuration(DurationUnit.DAYS), n2.days)
assertEquals(n3.toDuration(DurationUnit.DAYS), n3.days)
assertEquals(n1.toDuration(DurationUnit.HOURS), Duration.hours(n1))
assertEquals(n2.toDuration(DurationUnit.HOURS), Duration.hours(n2))
assertEquals(n3.toDuration(DurationUnit.HOURS), Duration.hours(n3))
assertEquals(n1.toDuration(DurationUnit.HOURS), n1.hours)
assertEquals(n2.toDuration(DurationUnit.HOURS), n2.hours)
assertEquals(n3.toDuration(DurationUnit.HOURS), n3.hours)
assertEquals(n1.toDuration(DurationUnit.MINUTES), Duration.minutes(n1))
assertEquals(n2.toDuration(DurationUnit.MINUTES), Duration.minutes(n2))
assertEquals(n3.toDuration(DurationUnit.MINUTES), Duration.minutes(n3))
assertEquals(n1.toDuration(DurationUnit.MINUTES), n1.minutes)
assertEquals(n2.toDuration(DurationUnit.MINUTES), n2.minutes)
assertEquals(n3.toDuration(DurationUnit.MINUTES), n3.minutes)
assertEquals(n1.toDuration(DurationUnit.SECONDS), Duration.seconds(n1))
assertEquals(n2.toDuration(DurationUnit.SECONDS), Duration.seconds(n2))
assertEquals(n3.toDuration(DurationUnit.SECONDS), Duration.seconds(n3))
assertEquals(n1.toDuration(DurationUnit.SECONDS), n1.seconds)
assertEquals(n2.toDuration(DurationUnit.SECONDS), n2.seconds)
assertEquals(n3.toDuration(DurationUnit.SECONDS), n3.seconds)
assertEquals(n1.toDuration(DurationUnit.MILLISECONDS), Duration.milliseconds(n1))
assertEquals(n2.toDuration(DurationUnit.MILLISECONDS), Duration.milliseconds(n2))
assertEquals(n3.toDuration(DurationUnit.MILLISECONDS), Duration.milliseconds(n3))
assertEquals(n1.toDuration(DurationUnit.MILLISECONDS), n1.milliseconds)
assertEquals(n2.toDuration(DurationUnit.MILLISECONDS), n2.milliseconds)
assertEquals(n3.toDuration(DurationUnit.MILLISECONDS), n3.milliseconds)
assertEquals(n1.toDuration(DurationUnit.MICROSECONDS), Duration.microseconds(n1))
assertEquals(n2.toDuration(DurationUnit.MICROSECONDS), Duration.microseconds(n2))
assertEquals(n3.toDuration(DurationUnit.MICROSECONDS), Duration.microseconds(n3))
assertEquals(n1.toDuration(DurationUnit.MICROSECONDS), n1.microseconds)
assertEquals(n2.toDuration(DurationUnit.MICROSECONDS), n2.microseconds)
assertEquals(n3.toDuration(DurationUnit.MICROSECONDS), n3.microseconds)
assertEquals(n1.toDuration(DurationUnit.NANOSECONDS), Duration.nanoseconds(n1))
assertEquals(n2.toDuration(DurationUnit.NANOSECONDS), Duration.nanoseconds(n2))
assertEquals(n3.toDuration(DurationUnit.NANOSECONDS), Duration.nanoseconds(n3))
assertEquals(n1.toDuration(DurationUnit.NANOSECONDS), n1.nanoseconds)
assertEquals(n2.toDuration(DurationUnit.NANOSECONDS), n2.nanoseconds)
assertEquals(n3.toDuration(DurationUnit.NANOSECONDS), n3.nanoseconds)
}
@Test
fun conversionToNumber() {
assertEquals(24, Duration.days(1).inWholeHours)
assertEquals(0.5, Duration.hours(12).toDouble(DurationUnit.DAYS))
assertEquals(0, Duration.hours(12).inWholeDays)
assertEquals(15, Duration.hours(0.25).inWholeMinutes)
assertEquals(600, Duration.minutes(10).inWholeSeconds)
assertEquals(500, Duration.seconds(0.5).inWholeMilliseconds)
assertEquals(50_000, Duration.seconds(0.05).inWholeMicroseconds)
assertEquals(50_000, Duration.milliseconds(0.05).inWholeNanoseconds)
assertEquals(24, 1.days.inWholeHours)
assertEquals(0.5, 12.hours.toDouble(DurationUnit.DAYS))
assertEquals(0, 12.hours.inWholeDays)
assertEquals(15, 0.25.hours.inWholeMinutes)
assertEquals(600, 10.minutes.inWholeSeconds)
assertEquals(500, 0.5.seconds.inWholeMilliseconds)
assertEquals(50_000, 0.05.seconds.inWholeMicroseconds)
assertEquals(50_000, 0.05.milliseconds.inWholeNanoseconds)
assertEquals(365 * 86400 * 1_000_000_000L, Duration.days(365).inWholeNanoseconds)
assertEquals(365 * 86400 * 1_000_000_000L, 365.days.inWholeNanoseconds)
assertEquals(0, Duration.ZERO.inWholeNanoseconds)
assertEquals(0, Duration.ZERO.inWholeMicroseconds)
assertEquals(0, Duration.ZERO.inWholeMilliseconds)
assertEquals(10500, Duration.seconds(10.5).inWholeMilliseconds)
assertEquals(11, Duration.milliseconds(11.5).inWholeMilliseconds)
assertEquals(-11, Duration.milliseconds((-11.5)).inWholeMilliseconds)
assertEquals(252_000_000, Duration.milliseconds(252).inWholeNanoseconds)
assertEquals(Long.MAX_VALUE, (Duration.days(365) * 293).inWholeNanoseconds) // clamping overflowed value
assertEquals(10500, 10.5.seconds.inWholeMilliseconds)
assertEquals(11, 11.5.milliseconds.inWholeMilliseconds)
assertEquals(-11, (-11.5).milliseconds.inWholeMilliseconds)
assertEquals(252_000_000, 252.milliseconds.inWholeNanoseconds)
assertEquals(Long.MAX_VALUE, (365.days * 293).inWholeNanoseconds) // clamping overflowed value
repeat(100) {
val value = Random.nextLong(1000)
@@ -219,7 +226,7 @@ class DurationTest {
val s = Random.nextInt(60)
val ns = Random.nextInt(1e9.toInt())
val expectedNs = if (isNsRange) ns else ns - (ns % NANOS_IN_MILLIS)
(Duration.days(d) + Duration.hours(h) + Duration.minutes(m) + Duration.seconds(s) + Duration.nanoseconds(ns)).run {
(d.days + h.hours + m.minutes + s.seconds + ns.nanoseconds).run {
toComponents { seconds, nanoseconds ->
assertEquals(d * 86400 + h * 3600 + m * 60 + s, seconds)
assertEquals(expectedNs, nanoseconds)
@@ -248,7 +255,7 @@ class DurationTest {
@Test
fun componentsOfCarriedSum() {
(Duration.hours(36) + Duration.minutes(90) + Duration.seconds(90) + Duration.milliseconds(1500)).run {
(36.hours + 90.minutes + 90.seconds + 1500.milliseconds).run {
toComponents { days, hours, minutes, seconds, nanoseconds ->
assertEquals(1, days)
assertEquals(13, hours)
@@ -292,11 +299,11 @@ class DurationTest {
fun infinite() {
assertTrue(Duration.INFINITE.isInfinite())
assertTrue((-Duration.INFINITE).isInfinite())
assertTrue(Duration.nanoseconds(Double.POSITIVE_INFINITY).isInfinite())
assertTrue(Double.POSITIVE_INFINITY.nanoseconds.isInfinite())
// seconds converted to nanoseconds overflow to infinite
assertTrue(Duration.seconds(Double.MAX_VALUE).isInfinite())
assertTrue(Duration.seconds((-Double.MAX_VALUE)).isInfinite())
assertTrue(Double.MAX_VALUE.seconds.isInfinite())
assertTrue((-Double.MAX_VALUE).seconds.isInfinite())
}
@@ -312,8 +319,8 @@ class DurationTest {
@Test
fun signAndAbsoluteValue() {
val negative = -Duration.seconds(1)
val positive = Duration.seconds(1)
val negative = -1.seconds
val positive = 1.seconds
val zero = Duration.ZERO
assertTrue(negative.isNegative())
@@ -344,23 +351,23 @@ class DurationTest {
assertEquals(0, Duration.ZERO.compareTo(value))
assertEquals(0, Duration.ZERO.toDouble(DurationUnit.NANOSECONDS).compareTo(value.toDouble(DurationUnit.NANOSECONDS)))
}
equivalentToZero(Duration.seconds(-0.0))
equivalentToZero((-0.0).seconds)
equivalentToZero((-0.0).toDuration(DurationUnit.DAYS))
equivalentToZero(-Duration.ZERO)
equivalentToZero(Duration.seconds(-1) / Double.POSITIVE_INFINITY)
equivalentToZero(Duration.seconds(0) / -1)
equivalentToZero(Duration.seconds(-1) * 0.0)
equivalentToZero(Duration.seconds(0) * -1)
equivalentToZero((-1).seconds / Double.POSITIVE_INFINITY)
equivalentToZero(0.seconds / -1)
equivalentToZero((-1).seconds * 0.0)
equivalentToZero(0.seconds * -1)
}
@Test
fun addition() {
assertEquals(Duration.hours(1.5), Duration.hours(1) + Duration.minutes(30))
assertEquals(Duration.days(0.5), Duration.hours(6) + Duration.minutes(360))
assertEquals(Duration.seconds(0.5), Duration.milliseconds(200) + Duration.microseconds(300_000))
assertEquals(1.5.hours, 1.hours + 30.minutes)
assertEquals(0.5.days, 6.hours + 360.minutes)
assertEquals(0.5.seconds, 200.milliseconds + 300_000.microseconds)
for (value in listOf(Duration.ZERO, Duration.nanoseconds(1), Duration.days(500 * 365))) {
for (value in listOf(Duration.ZERO, 1.nanoseconds, (500 * 365).days)) {
for (inf in listOf(Duration.INFINITE, -Duration.INFINITE)) {
for (result in listOf(inf + inf, inf + value, inf + (-value), value + inf, (-value) + inf)) {
assertEquals(inf, result)
@@ -373,35 +380,35 @@ class DurationTest {
@Test
fun subtraction() {
assertEquals(Duration.hours(10), Duration.days(0.5) - Duration.minutes(120))
assertEquals(Duration.milliseconds(850), Duration.seconds(1) - Duration.milliseconds(150))
assertEquals(Duration.milliseconds(1150), Duration.seconds(1) - Duration.milliseconds(-150))
assertEquals(Duration.milliseconds(1), Duration.microseconds(Long.MAX_VALUE) - Duration.microseconds(Long.MAX_VALUE - 1_000))
assertEquals(Duration.milliseconds(-1), Duration.microseconds(Long.MAX_VALUE - 1_000) - Duration.microseconds(Long.MAX_VALUE))
assertEquals(10.hours, 0.5.days - 120.minutes)
assertEquals(850.milliseconds, 1.seconds - 150.milliseconds)
assertEquals(1150.milliseconds, 1.seconds - (-150).milliseconds)
assertEquals(1.milliseconds, Long.MAX_VALUE.microseconds - (Long.MAX_VALUE - 1_000).microseconds)
assertEquals((-1).milliseconds, (Long.MAX_VALUE - 1_000).microseconds - Long.MAX_VALUE.microseconds)
run {
val offset = 2L * NANOS_IN_MILLIS
val value = MAX_NANOS + offset
val base = Duration.nanoseconds(value)
val base = value.nanoseconds
val baseNs = base.inWholeMilliseconds * NANOS_IN_MILLIS
assertEquals(baseNs, base.inWholeNanoseconds) // base stored as millis
val smallDeltas = listOf(1L, 2L, 1000L, NANOS_IN_MILLIS - 1L) + List(10) { Random.nextLong(NANOS_IN_MILLIS.toLong()) }
for (smallDeltaNs in smallDeltas) {
assertEquals(base, base - Duration.nanoseconds(smallDeltaNs), "delta: $smallDeltaNs")
assertEquals(base, base - smallDeltaNs.nanoseconds, "delta: $smallDeltaNs")
}
val deltas = listOf(offset + 1L, offset + 1500L) +
List(10) { Random.nextLong(offset + 1500, offset + 10000) } +
List(100) { Random.nextLong(offset + 1500, MAX_NANOS) }
for (deltaNs in deltas) {
val delta = Duration.nanoseconds(deltaNs)
val delta = deltaNs.nanoseconds
assertEquals(deltaNs, delta.inWholeNanoseconds)
assertEquals(baseNs - deltaNs, (base - delta).inWholeNanoseconds, "base: $baseNs, delta: $deltaNs")
}
}
for (value in listOf(Duration.ZERO, Duration.nanoseconds(1), Duration.days(500 * 365))) {
for (value in listOf(Duration.ZERO, 1.nanoseconds, (500 * 365).days)) {
for (inf in listOf(Duration.INFINITE, -Duration.INFINITE)) {
for (result in listOf(inf - (-inf), inf - value, inf - (-value), value - (-inf), (-value) - (-inf))) {
assertEquals(inf, result)
@@ -414,31 +421,31 @@ class DurationTest {
@Test
fun multiplication() {
assertEquals(Duration.days(1), Duration.hours(12) * 2)
assertEquals(Duration.days(1), Duration.minutes(60) * 24.0)
assertEquals(Duration.microseconds(1), Duration.nanoseconds(20) * 50)
assertEquals(1.days, 12.hours * 2)
assertEquals(1.days, 60.minutes * 24.0)
assertEquals(1.microseconds, 20.nanoseconds * 50)
assertEquals(Duration.days(1), 2 * Duration.hours(12))
assertEquals(Duration.hours(12.5), 12.5 * Duration.minutes(60))
assertEquals(Duration.microseconds(1), 50 * Duration.nanoseconds(20))
assertEquals(1.days, 2 * 12.hours)
assertEquals(12.5.hours, 12.5 * 60.minutes)
assertEquals(1.microseconds, 50 * 20.nanoseconds)
assertEquals(Duration.ZERO, 0 * Duration.hours(1))
assertEquals(Duration.ZERO, Duration.seconds(1) * 0.0)
assertEquals(Duration.ZERO, 0 * 1.hours)
assertEquals(Duration.ZERO, 1.seconds * 0.0)
run { // promoting nanos range to millis range after multiplication
val value = MAX_NANOS
assertEquals(value, (Duration.nanoseconds(value) * 1_000_000).inWholeMilliseconds)
assertEquals(value / 1000, (Duration.nanoseconds(value) * 1_000).inWholeMilliseconds)
assertEquals(Duration.INFINITE, Duration.nanoseconds(Long.MAX_VALUE / 1000 + 1) * 1_000_000_000)
assertEquals(value, (value.nanoseconds * 1_000_000).inWholeMilliseconds)
assertEquals(value / 1000, (value.nanoseconds * 1_000).inWholeMilliseconds)
assertEquals(Duration.INFINITE, (Long.MAX_VALUE / 1000 + 1).nanoseconds * 1_000_000_000)
}
run {
val value = MAX_NANOS / Int.MAX_VALUE
assertTrue((Duration.nanoseconds(value) * Int.MIN_VALUE).inWholeNanoseconds < -MAX_NANOS)
assertTrue((value.nanoseconds * Int.MIN_VALUE).inWholeNanoseconds < -MAX_NANOS)
}
assertEquals(Duration.INFINITE, Duration.days(Int.MAX_VALUE) * Int.MAX_VALUE)
assertEquals(-Duration.INFINITE, Duration.days(Int.MAX_VALUE) * Int.MIN_VALUE)
assertEquals(Duration.INFINITE, Int.MAX_VALUE.days * Int.MAX_VALUE)
assertEquals(-Duration.INFINITE, Int.MAX_VALUE.days * Int.MIN_VALUE)
assertEquals(Duration.INFINITE, Duration.INFINITE * Double.POSITIVE_INFINITY)
assertEquals(Duration.INFINITE, Duration.INFINITE * Double.MIN_VALUE)
@@ -451,20 +458,20 @@ class DurationTest {
@Test
fun divisionByNumber() {
assertEquals(Duration.hours(12), Duration.days(1) / 2)
assertEquals(Duration.minutes(60), Duration.days(1) / 24.0)
assertEquals(Duration.seconds(20), Duration.minutes(2) / 6)
assertEquals(Duration.days(365), Duration.days(365 * 299) / 299)
assertEquals(Duration.days(365), Duration.days(365 * 299.5) / 299.5)
assertEquals(12.hours, 1.days / 2)
assertEquals(60.minutes, 1.days / 24.0)
assertEquals(20.seconds, 2.minutes / 6)
assertEquals(365.days, (365 * 299).days / 299)
assertEquals(365.days, (365 * 299.5).days / 299.5)
run {
val value = MAX_NANOS
assertEquals(value, (Duration.milliseconds(value) / 1_000_000).inWholeNanoseconds)
assertEquals(value, (value.milliseconds / 1_000_000).inWholeNanoseconds)
}
assertEquals(Duration.INFINITE, Duration.seconds(1) / 0)
assertEquals(-Duration.INFINITE, -Duration.seconds(1) / 0.0)
assertEquals(Duration.INFINITE, -Duration.seconds(1) / (-0.0))
assertEquals(Duration.INFINITE, 1.seconds / 0)
assertEquals(-Duration.INFINITE, -1.seconds / 0.0)
assertEquals(Duration.INFINITE, -1.seconds / (-0.0))
assertEquals(Duration.INFINITE, Duration.INFINITE / Int.MAX_VALUE)
assertEquals(Duration.INFINITE, -Duration.INFINITE / Int.MIN_VALUE)
@@ -478,10 +485,10 @@ class DurationTest {
@Test
fun divisionByDuration() {
assertEquals(24.0, Duration.days(1) / Duration.hours(1))
assertEquals(0.1, Duration.minutes(9) / Duration.hours(1.5))
assertEquals(50.0, Duration.microseconds(1) / Duration.nanoseconds(20))
assertEquals(299.0, Duration.days(365 * 299) / Duration.days(365))
assertEquals(24.0, 1.days / 1.hours)
assertEquals(0.1, 9.minutes / 1.5.hours)
assertEquals(50.0, 1.microseconds / 20.nanoseconds)
assertEquals(299.0, (365 * 299).days / 365.days)
assertTrue((Duration.INFINITE / Duration.INFINITE).isNaN())
assertTrue((Duration.ZERO / Duration.ZERO).isNaN())
@@ -503,31 +510,31 @@ class DurationTest {
test(Duration.ZERO, "PT0S", "P0D", "PT0H", "PT0M", "P0DT0H", "PT0H0M", "PT0H0S")
// single unit
test(Duration.days(1), "PT24H", "P1D", "PT1440M", "PT86400S")
test(Duration.hours(1), "PT1H")
test(Duration.minutes(1), "PT1M")
test(Duration.seconds(1), "PT1S")
test(Duration.milliseconds(1), "PT0.001S")
test(Duration.microseconds(1), "PT0.000001S")
test(Duration.nanoseconds(1), "PT0.000000001S", "PT0.0000000009S")
test(Duration.nanoseconds(0.9), "PT0.000000001S")
test(1.days, "PT24H", "P1D", "PT1440M", "PT86400S")
test(1.hours, "PT1H")
test(1.minutes, "PT1M")
test(1.seconds, "PT1S")
test(1.milliseconds, "PT0.001S")
test(1.microseconds, "PT0.000001S")
test(1.nanoseconds, "PT0.000000001S", "PT0.0000000009S")
test(0.9.nanoseconds, "PT0.000000001S")
// rounded to zero
test(Duration.nanoseconds(0.1), "PT0S")
test(0.1.nanoseconds, "PT0S")
test(Duration.ZERO, "PT0S", "PT0.0000000004S")
// several units combined
test(Duration.days(1) + Duration.minutes(1), "PT24H1M")
test(Duration.days(1) + Duration.seconds(1), "PT24H0M1S")
test(Duration.days(1) + Duration.milliseconds(1), "PT24H0M0.001S")
test(Duration.hours(1) + Duration.minutes(30), "PT1H30M")
test(Duration.hours(1) + Duration.milliseconds(500), "PT1H0M0.500S")
test(Duration.minutes(2) + Duration.milliseconds(500), "PT2M0.500S")
test(Duration.milliseconds(90_500), "PT1M30.500S")
test(1.days + 1.minutes, "PT24H1M")
test(1.days + 1.seconds, "PT24H0M1S")
test(1.days + 1.milliseconds, "PT24H0M0.001S")
test(1.hours + 30.minutes, "PT1H30M")
test(1.hours + 500.milliseconds, "PT1H0M0.500S")
test(2.minutes + 500.milliseconds, "PT2M0.500S")
test(90_500.milliseconds, "PT1M30.500S")
// with sign
test(-Duration.days(1) + Duration.minutes(15), "-PT23H45M", "PT-23H-45M", "+PT-24H+15M")
test(-Duration.days(1) - Duration.minutes(15), "-PT24H15M", "PT-24H-15M", "-PT25H-45M")
test(-1.days + 15.minutes, "-PT23H45M", "PT-23H-45M", "+PT-24H+15M")
test(-1.days - 15.minutes, "-PT24H15M", "PT-24H-15M", "-PT25H-45M")
test(Duration.ZERO, "PT0S", "P1DT-24H", "+PT-1H+60M", "-PT1M-60S")
// infinite
@@ -557,10 +564,8 @@ class DurationTest {
@Test
fun parseAndFormatInUnits() {
var d = with(Duration) {
days(1) + hours(15) + minutes(31) + seconds(45) +
milliseconds(678) + microseconds(920) + nanoseconds(516.34)
}
var d = 1.days + 15.hours + 31.minutes + 45.seconds +
678.milliseconds + 920.microseconds + 516.34.nanoseconds
fun test(unit: DurationUnit, vararg representations: String) {
assertFails { d.toString(unit, -1) }
@@ -577,16 +582,16 @@ class DurationTest {
test(DurationUnit.DAYS, "2d", "1.6d", "1.65d", "1.647d")
test(DurationUnit.HOURS, "40h", "39.5h", "39.53h")
test(DurationUnit.MINUTES, "2372m", "2371.8m", "2371.76m")
d -= Duration.hours(39)
d -= 39.hours
test(DurationUnit.SECONDS, "1906s", "1905.7s", "1905.68s", "1905.679s")
d -= Duration.seconds(1904)
d -= 1904.seconds
test(DurationUnit.MILLISECONDS, "1679ms", "1678.9ms", "1678.92ms", "1678.921ms")
d -= Duration.milliseconds(1678)
d -= 1678.milliseconds
test(DurationUnit.MICROSECONDS, "921us", "920.5us", "920.52us", "920.516us")
d -= Duration.microseconds(920)
d -= 920.microseconds
// no sub-nanosecond precision
test(DurationUnit.NANOSECONDS, "516ns", "516.0ns", "516.00ns", "516.000ns", "516.0000ns")
d = (d - Duration.nanoseconds(516)) / 17
d = (d - 516.nanoseconds) / 17
test(DurationUnit.NANOSECONDS, "0ns", "0.0ns", "0.00ns", "0.000ns", "0.0000ns")
// infinite
@@ -594,14 +599,14 @@ class DurationTest {
// test(DurationUnit.DAYS, "2.08e+294d")
// test(DurationUnit.NANOSECONDS, "1.80e+308ns")
assertEquals("0.500000000000s", Duration.seconds(0.5).toString(DurationUnit.SECONDS, 100))
assertEquals("99999000000000.000000000000ns", Duration.seconds(99_999).toString(DurationUnit.NANOSECONDS, 15))
assertEquals("0.500000000000s", 0.5.seconds.toString(DurationUnit.SECONDS, 100))
assertEquals("99999000000000.000000000000ns", 99_999.seconds.toString(DurationUnit.NANOSECONDS, 15))
assertContains(
listOf(
"-4611686018427388000000000.000000000000ns",
"-4611686018427387904000000.000000000000ns"
),
(-Duration.milliseconds(MAX_MILLIS - 1)).toString(DurationUnit.NANOSECONDS, 15)
(-(MAX_MILLIS - 1).milliseconds).toString(DurationUnit.NANOSECONDS, 15)
)
d = Duration.INFINITE
@@ -643,62 +648,62 @@ class DurationTest {
}
}
test(Duration.days(101), "101d", "2424h")
test(Duration.days(45.3), "45d 7h 12m", "45.3d", "45d 7.2h") // 0.3d == 7.2h
test(Duration.days(45), "45d")
test(101.days, "101d", "2424h")
test(45.3.days, "45d 7h 12m", "45.3d", "45d 7.2h") // 0.3d == 7.2h
test(45.days, "45d")
test(Duration.days(40.5), "40d 12h", "40.5d", "40d 720m")
test(Duration.days(40) + Duration.minutes(20), "40d 0h 20m", "40d 20m", "40d 1200s")
test(Duration.days(40) + Duration.seconds(20), "40d 0h 0m 20s", "40d 20s")
test(Duration.days(40) + Duration.nanoseconds(100), "40d 0h 0m 0.000000100s", "40d 100ns")
test(40.5.days, "40d 12h", "40.5d", "40d 720m")
test(40.days + 20.minutes, "40d 0h 20m", "40d 20m", "40d 1200s")
test(40.days + 20.seconds, "40d 0h 0m 20s", "40d 20s")
test(40.days + 100.nanoseconds, "40d 0h 0m 0.000000100s", "40d 100ns")
test(Duration.hours(40) + Duration.minutes(15), "1d 16h 15m", "40h 15m")
test(Duration.hours(40), "1d 16h", "40h")
test(40.hours + 15.minutes, "1d 16h 15m", "40h 15m")
test(40.hours, "1d 16h", "40h")
test(Duration.hours(12.5), "12h 30m")
test(Duration.hours(12) + Duration.seconds(15), "12h 0m 15s")
test(Duration.hours(12) + Duration.nanoseconds(1), "12h 0m 0.000000001s")
test(Duration.minutes(30), "30m")
test(Duration.minutes(17.5), "17m 30s")
test(12.5.hours, "12h 30m")
test(12.hours + 15.seconds, "12h 0m 15s")
test(12.hours + 1.nanoseconds, "12h 0m 0.000000001s")
test(30.minutes, "30m")
test(17.5.minutes, "17m 30s")
test(Duration.minutes(16.5), "16m 30s")
test(Duration.seconds(1097.1), "18m 17.1s")
test(Duration.seconds(90.36), "1m 30.36s")
test(Duration.seconds(50), "50s")
test(Duration.seconds(1.3), "1.3s")
test(Duration.seconds(1), "1s")
test(16.5.minutes, "16m 30s")
test(1097.1.seconds, "18m 17.1s")
test(90.36.seconds, "1m 30.36s")
test(50.seconds, "50s")
test(1.3.seconds, "1.3s")
test(1.seconds, "1s")
test(Duration.seconds(0.5), "500ms")
test(Duration.milliseconds(40.2), "40.2ms")
test(Duration.milliseconds(4.225), "4.225ms")
test(Duration.milliseconds(4.24501), "4.245010ms", "4ms 245us 10ns")
test(Duration.milliseconds(1), "1ms")
test(0.5.seconds, "500ms")
test(40.2.milliseconds, "40.2ms")
test(4.225.milliseconds, "4.225ms")
test(4.24501.milliseconds, "4.245010ms", "4ms 245us 10ns")
test(1.milliseconds, "1ms")
test(Duration.milliseconds(0.75), "750us")
test(Duration.microseconds(75.35), "75.35us")
test(Duration.microseconds(7.25), "7.25us")
test(Duration.microseconds(1.035), "1.035us")
test(Duration.microseconds(1.005), "1.005us")
test(Duration.nanoseconds(1800), "1.8us", "1800ns", "0.0000000005h")
test(0.75.milliseconds, "750us")
test(75.35.microseconds, "75.35us")
test(7.25.microseconds, "7.25us")
test(1.035.microseconds, "1.035us")
test(1.005.microseconds, "1.005us")
test(1800.nanoseconds, "1.8us", "1800ns", "0.0000000005h")
test(Duration.nanoseconds(950.5), "951ns")
test(Duration.nanoseconds(85.23), "85ns")
test(Duration.nanoseconds(8.235), "8ns")
test(Duration.nanoseconds(1), "1ns", "0.9ns", "0.001us", "0.0009us")
test(Duration.nanoseconds(1.3), "1ns")
test(Duration.nanoseconds(0.75), "1ns")
test(Duration.nanoseconds(0.7512), "1ns")
test(950.5.nanoseconds, "951ns")
test(85.23.nanoseconds, "85ns")
test(8.235.nanoseconds, "8ns")
test(1.nanoseconds, "1ns", "0.9ns", "0.001us", "0.0009us")
test(1.3.nanoseconds, "1ns")
test(0.75.nanoseconds, "1ns")
test(0.7512.nanoseconds, "1ns")
// equal to zero
// test(Duration.nanoseconds(0.023), "0.023ns")
// test(Duration.nanoseconds(0.0034), "0.0034ns")
// test(Duration.nanoseconds(0.0000035), "0.0000035ns")
// test(0.023.nanoseconds, "0.023ns")
// test(0.0034.nanoseconds, "0.0034ns")
// test(0.0000035.nanoseconds, "0.0000035ns")
test(Duration.ZERO, "0s", "0.4ns", "0000.0000ns")
test(Duration.days(365) * 10000, "3650000d")
test(Duration.days(300) * 100000, "30000000d")
test(Duration.days(365) * 100000, "36500000d")
test(Duration.milliseconds(MAX_MILLIS - 1), "53375995583d 15h 36m 27.902s") // max finite value
test(365.days * 10000, "3650000d")
test(300.days * 100000, "30000000d")
test(365.days * 100000, "36500000d")
test((MAX_MILLIS - 1).milliseconds, "53375995583d 15h 36m 27.902s") // max finite value
// all infinite
// val universeAge = Duration.days(365.25) * 13.799e9
@@ -9,6 +9,7 @@ package test.time
import kotlin.random.Random
import kotlin.test.*
import kotlin.time.*
import kotlin.time.Duration.Companion.nanoseconds
class MeasureTimeTest {
@@ -52,20 +53,20 @@ class MeasureTimeTest {
val timeSource = TestTimeSource()
val expectedNs = Random.nextLong(1_000_000_000L)
val elapsed = timeSource.measureTime {
timeSource += Duration.nanoseconds(expectedNs)
timeSource += expectedNs.nanoseconds
}
assertEquals(Duration.nanoseconds(expectedNs), elapsed)
assertEquals(expectedNs.nanoseconds, elapsed)
val expectedResult: Long
val (result, elapsed2) = timeSource.measureTimedValue {
timeSource += Duration.nanoseconds(expectedNs)
timeSource += expectedNs.nanoseconds
expectedResult = expectedNs
expectedNs
}
assertEquals(expectedResult, result)
assertEquals(Duration.nanoseconds(result), elapsed2)
assertEquals(result.nanoseconds, elapsed2)
}
}
@@ -8,19 +8,20 @@ package test.time
import kotlin.test.*
import kotlin.time.*
import kotlin.time.Duration.Companion.nanoseconds
class TestTimeSourceTest {
@Test
fun overflows() {
for (enormousDuration in listOf(Duration.INFINITE, Duration.nanoseconds(Double.MAX_VALUE), Duration.nanoseconds(Long.MAX_VALUE) * 2)) {
for (enormousDuration in listOf(Duration.INFINITE, Double.MAX_VALUE.nanoseconds, Long.MAX_VALUE.nanoseconds * 2)) {
assertFailsWith<IllegalStateException>(enormousDuration.toString()) { TestTimeSource() += enormousDuration }
assertFailsWith<IllegalStateException>((-enormousDuration).toString()) { TestTimeSource() += -enormousDuration }
}
val moderatePositiveDuration = Duration.nanoseconds(Long.MAX_VALUE) / 1.5
val borderlineQuarterPositiveDuration = Duration.nanoseconds(Long.MAX_VALUE / 4) // precise number of ns
val borderlineQuarterNegativeDuration = Duration.nanoseconds(Long.MIN_VALUE / 4)
val moderatePositiveDuration = Long.MAX_VALUE.nanoseconds / 1.5
val borderlineQuarterPositiveDuration = (Long.MAX_VALUE / 4).nanoseconds // precise number of ns
val borderlineQuarterNegativeDuration = (Long.MIN_VALUE / 4).nanoseconds
run {
val timeSource = TestTimeSource()
timeSource += moderatePositiveDuration
@@ -29,19 +30,19 @@ class TestTimeSourceTest {
run {
val timeSource = TestTimeSource()
repeat(4) { timeSource += borderlineQuarterPositiveDuration }
assertFailsWith<IllegalStateException>("Should overflow positive") { timeSource += Duration.nanoseconds(4) }
assertFailsWith<IllegalStateException>("Should overflow positive") { timeSource += 4.nanoseconds }
}
run {
val timeSource = TestTimeSource()
repeat(4) { timeSource += borderlineQuarterNegativeDuration }
assertFailsWith<IllegalStateException>("Should overflow negative") { timeSource += -Duration.nanoseconds(4) }
assertFailsWith<IllegalStateException>("Should overflow negative") { timeSource += -4.nanoseconds }
}
run {
val timeSource = TestTimeSource()
timeSource += moderatePositiveDuration
// does not overflow even if duration doesn't fit in long, but the result fits
timeSource += -moderatePositiveDuration - Duration.nanoseconds(Long.MAX_VALUE)
timeSource += -moderatePositiveDuration - Long.MAX_VALUE.nanoseconds
}
}
@@ -51,12 +52,12 @@ class TestTimeSourceTest {
val mark = timeSource.markNow()
repeat(10_000) {
timeSource += Duration.nanoseconds(0.4)
timeSource += 0.4.nanoseconds
assertEquals(Duration.ZERO, mark.elapsedNow())
}
timeSource += Duration.nanoseconds(1.9)
assertEquals(Duration.nanoseconds(2), mark.elapsedNow())
timeSource += 1.9.nanoseconds
assertEquals(2.nanoseconds, mark.elapsedNow())
}
}
+11 -9
View File
@@ -8,6 +8,8 @@ package test.time
import kotlin.test.*
import kotlin.time.*
import kotlin.time.Duration.Companion.milliseconds
import kotlin.time.Duration.Companion.nanoseconds
class TimeMarkTest {
@@ -27,19 +29,19 @@ class TimeMarkTest {
}
val mark = timeSource.markNow()
val markFuture1 = (mark + Duration.milliseconds(1)).apply { assertHasPassed(false) }
val markFuture2 = (mark - Duration.milliseconds((-1))).apply { assertHasPassed(false) }
val markFuture1 = (mark + 1.milliseconds).apply { assertHasPassed(false) }
val markFuture2 = (mark - (-1).milliseconds).apply { assertHasPassed(false) }
val markPast1 = (mark - Duration.milliseconds(1)).apply { assertHasPassed(true) }
val markPast2 = (markFuture1 + Duration.milliseconds((-2))).apply { assertHasPassed(true) }
val markPast1 = (mark - 1.milliseconds).apply { assertHasPassed(true) }
val markPast2 = (markFuture1 + (-2).milliseconds).apply { assertHasPassed(true) }
timeSource += Duration.nanoseconds(500_000)
timeSource += 500_000.nanoseconds
val elapsed = mark.elapsedNow()
val elapsedFromFuture = elapsed - Duration.milliseconds(1)
val elapsedFromPast = elapsed + Duration.milliseconds(1)
val elapsedFromFuture = elapsed - 1.milliseconds
val elapsedFromPast = elapsed + 1.milliseconds
assertEquals(Duration.milliseconds(0.5), elapsed)
assertEquals(0.5.milliseconds, elapsed)
assertEquals(elapsedFromFuture, markFuture1.elapsedNow())
assertEquals(elapsedFromFuture, markFuture2.elapsedNow())
@@ -49,7 +51,7 @@ class TimeMarkTest {
markFuture1.assertHasPassed(false)
markPast1.assertHasPassed(true)
timeSource += Duration.milliseconds(1)
timeSource += 1.milliseconds
markFuture1.assertHasPassed(true)
markPast1.assertHasPassed(true)