MicroUtils/klock/src/commonTest/kotlin/korlibs/time/TimeSpanTest.kt

109 lines
3.6 KiB
Kotlin

package korlibs.time
import kotlin.test.*
class TimeSpanTest {
@Test
fun testToTimeString() {
assertEquals("00:00:01", 1.seconds.toTimeString(components = 3))
assertEquals("00:01:02", 62.seconds.toTimeString(components = 3))
assertEquals("01:01:00", 3660.seconds.toTimeString(components = 3))
assertEquals("00:01", 1.seconds.toTimeString(components = 2))
assertEquals("01:02", 62.seconds.toTimeString(components = 2))
assertEquals("61:00", 3660.seconds.toTimeString(components = 2))
assertEquals("01", 1.seconds.toTimeString(components = 1))
assertEquals("62", 62.seconds.toTimeString(components = 1))
assertEquals("3660", 3660.seconds.toTimeString(components = 1))
assertEquals("01:01:02.500", 3662.5.seconds.toTimeString(components = 3, addMilliseconds = true))
assertEquals("61:02.500", 3662.5.seconds.toTimeString(components = 2, addMilliseconds = true))
assertEquals("3662.500", 3662.5.seconds.toTimeString(components = 1, addMilliseconds = true))
}
@Test
fun testOperators() {
assertEquals((-1).seconds, -(1.seconds))
}
@Test
fun testTimes() {
assertEquals(1000.nanoseconds, 1.microseconds)
assertEquals(1000.microseconds, 1.milliseconds)
assertEquals(1000.milliseconds, 1.seconds)
assertEquals(60.seconds, 1.minutes)
assertEquals(60.minutes, 1.hours)
assertEquals(24.hours, 1.days)
assertEquals(7.days, 1.weeks)
}
@Test
fun testTimes2() {
val second = 1.seconds
val hour = 1.hours
val week = 1.weeks
assertEquals(second.nanoseconds, 1_000_000_000.0)
assertEquals(second.microseconds, 1_000_000.0)
assertEquals(second.milliseconds, 1_000.0)
assertEquals(second.seconds, 1.0)
assertEquals(hour.minutes, 60.0)
assertEquals(hour.hours, 1.0)
assertEquals(week.days, 7.0)
assertEquals(week.weeks, 1.0)
}
@Test
fun testNull() {
assertTrue { TimeSpan.ZERO != TimeSpan.NIL }
assertTrue { TimeSpan.NIL == TimeSpan.NIL }
assertTrue { TimeSpan.NIL.isNil }
}
@Test
fun ratio() {
assertEquals(0.5, 0.5.seconds / 1.seconds)
assertEquals(5.0, 10.seconds / 2000.milliseconds)
}
@Test
fun remaining() {
if (KotlinVersion.CURRENT < KotlinVersion(1, 9, 20)) return // @TODO: This should be only for WASM
assertEquals(0.5.seconds, 0.5.seconds % 1.seconds)
assertEquals(0.seconds, 1.seconds % 1.seconds)
assertEquals(0.5.seconds, 1.5.seconds % 1.seconds)
assertEquals((-0.5).seconds, ((-1.5).seconds) % 1.seconds)
}
@Test
fun umod() {
assertEquals(0.5.seconds, 0.5.seconds umod 1.seconds)
assertEquals(0.seconds, 1.seconds umod 1.seconds)
assertEquals(0.5.seconds, 1.5.seconds umod 1.seconds)
assertEquals(0.5.seconds, (-1.5).seconds umod 1.seconds)
}
@Test
fun clamp() {
assertEquals(1.seconds, min(1.seconds, 2.seconds))
assertEquals(2.seconds, max(1.seconds, 2.seconds))
assertEquals(1.seconds, min(2.seconds, 1.seconds))
assertEquals(2.seconds, max(2.seconds, 1.seconds))
assertEquals(1.seconds, 1.seconds.clamp(0.seconds, 2.seconds))
assertEquals(0.seconds, (-1).seconds.clamp(0.seconds, 2.seconds))
assertEquals(2.seconds, 2.1.seconds.clamp(0.seconds, 2.seconds))
}
@Test
fun testToString() {
assertEquals("1s", 1.seconds.toString())
assertEquals("500us", 0.5.milliseconds.toString())
}
}