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