Skip to content

Commit e3c2355

Browse files
committed
Adapt the kotlinx.time classes API for the stdlib
1 parent f81909e commit e3c2355

File tree

4 files changed

+39
-668
lines changed

4 files changed

+39
-668
lines changed

fake-kotlinx-time/common/src/Clock.kt

Lines changed: 1 addition & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* Use of this source code is governed by the Apache 2.0 License that can be found in the LICENSE.txt file.
44
*/
55

6-
package kotlinx.datetime
6+
package kotlinx.time
77

88
import kotlin.time.*
99

@@ -59,70 +59,3 @@ public interface Clock {
5959

6060
}
6161
}
62-
63-
/**
64-
* Returns the current date at the given [time zone][timeZone], according to [this Clock][this].
65-
*
66-
* The time zone is important because the current date is not the same in all time zones at the same instant.
67-
*
68-
* @sample kotlinx.datetime.test.samples.ClockSamples.todayIn
69-
*/
70-
public fun Clock.todayIn(timeZone: TimeZone): LocalDate =
71-
now().toLocalDateTime(timeZone).date
72-
73-
/**
74-
* Returns a [TimeSource] that uses this [Clock] to mark a time instant and to find the amount of time elapsed since that mark.
75-
*
76-
* **Pitfall**: using this function with [Clock.System] is error-prone
77-
* because [Clock.System] is not well suited for measuring time intervals.
78-
* Please only use this conversion function on the [Clock] instances that are fully controlled programmatically.
79-
*/
80-
@ExperimentalTime
81-
public fun Clock.asTimeSource(): TimeSource.WithComparableMarks = object : TimeSource.WithComparableMarks {
82-
override fun markNow(): ComparableTimeMark = InstantTimeMark(now(), this@asTimeSource)
83-
}
84-
85-
@ExperimentalTime
86-
private class InstantTimeMark(private val instant: Instant, private val clock: Clock) : ComparableTimeMark {
87-
override fun elapsedNow(): Duration = saturatingDiff(clock.now(), instant)
88-
89-
override fun plus(duration: Duration): ComparableTimeMark = InstantTimeMark(instant.saturatingAdd(duration), clock)
90-
override fun minus(duration: Duration): ComparableTimeMark = InstantTimeMark(instant.saturatingAdd(-duration), clock)
91-
92-
override fun minus(other: ComparableTimeMark): Duration {
93-
if (other !is InstantTimeMark || other.clock != this.clock) {
94-
throw IllegalArgumentException("Subtracting or comparing time marks from different time sources is not possible: $this and $other")
95-
}
96-
return saturatingDiff(this.instant, other.instant)
97-
}
98-
99-
override fun equals(other: Any?): Boolean {
100-
return other is InstantTimeMark && this.clock == other.clock && this.instant == other.instant
101-
}
102-
103-
override fun hashCode(): Int = instant.hashCode()
104-
105-
override fun toString(): String = "InstantTimeMark($instant, $clock)"
106-
107-
private fun Instant.isSaturated() = this == Instant.MAX || this == Instant.MIN
108-
private fun Instant.saturatingAdd(duration: Duration): Instant {
109-
if (isSaturated()) {
110-
if (duration.isInfinite() && duration.isPositive() != this.isDistantFuture) {
111-
throw IllegalArgumentException("Summing infinities of different signs")
112-
}
113-
return this
114-
}
115-
return this + duration
116-
}
117-
private fun saturatingDiff(instant1: Instant, instant2: Instant): Duration = when {
118-
instant1 == instant2 ->
119-
Duration.ZERO
120-
instant1.isSaturated() || instant2.isSaturated() ->
121-
(instant1 - instant2) * Double.POSITIVE_INFINITY
122-
else ->
123-
instant1 - instant2
124-
}
125-
}
126-
127-
@Deprecated("Use Clock.todayIn instead", ReplaceWith("this.todayIn(timeZone)"), DeprecationLevel.WARNING)
128-
public fun Clock.todayAt(timeZone: TimeZone): LocalDate = todayIn(timeZone)

0 commit comments

Comments
 (0)