Coverage Summary for Class: PlayableProgressTimeMark (com.vsevolodganin.clicktrack.model)

Class Method, % Branch, % Line, % Instruction, %
PlayableProgressTimeMark 0% (0/5) 0% (0/2) 0% (0/5) 0% (0/53)
PlayableProgressTimeMark$Companion 0% (0/1) 0% (0/1) 0% (0/2)
Total 0% (0/6) 0% (0/2) 0% (0/6) 0% (0/55)


 package com.vsevolodganin.clicktrack.model
 
 import kotlinx.serialization.Serializable
 import kotlin.time.Clock
 import kotlin.time.Duration
 import kotlin.time.DurationUnit
 import kotlin.time.ExperimentalTime
 import kotlin.time.TimeMark
 import kotlin.time.TimeSource
 import kotlin.time.toDuration
 
 @Serializable
 data class PlayProgress(
     private val position: Duration,
     val isPaused: Boolean = false,
     private val emissionTime: PlayableProgressTimeMark = PlayableProgressTimeSource.markNow(),
 ) {
     val realPosition: Duration get() = if (isPaused) position else position + emissionTime.elapsedNow()
 }
 
 @Serializable
 data class PlayableProgressTimeMark(private val startedAtMillis: Long) : TimeMark {
     override fun elapsedNow(): Duration {
         return (elapsedRealtimeNanos() - startedAtMillis).toDuration(DurationUnit.NANOSECONDS)
     }
 
     override fun plus(duration: Duration): PlayableProgressTimeMark {
         return PlayableProgressTimeMark(startedAtMillis + duration.inWholeNanoseconds)
     }
 
     override fun minus(duration: Duration): TimeMark {
         return PlayableProgressTimeMark(startedAtMillis - duration.inWholeNanoseconds)
     }
 }
 
 object PlayableProgressTimeSource : TimeSource {
     override fun markNow(): PlayableProgressTimeMark {
         return PlayableProgressTimeMark(elapsedRealtimeNanos())
     }
 }
 
 @OptIn(ExperimentalTime::class)
 private fun elapsedRealtimeNanos(): Long = Clock.System.now().run { epochSeconds * 1_000_000_000L + nanosecondsOfSecond }