package com.hawhamburg.micr0bu import com.hawhamburg.micr0bu.domain.asn1.ItsTime import org.junit.Assert.assertEquals import org.junit.Test /** * Pins the arithmetic that moves a transmit timestamp from the phone's wall clock onto GNSS time. * * The cases come from the 2026-09-10 bench session. The sending phone's clock was 1456 s fast * because it had no automatic time source, and every CAM it sent was stamped 24 minutes in the * future. After a manual correction it was 6 s slow. Both have to come out on GNSS time. */ class ItsTimeTest { private val gnssNow = 1_789_038_922_000L @Test fun `without a GNSS reading the wall-clock time is used unchanged`() { assertEquals(1_000L, ItsTime.onGnssTime(systemMs = 1_000L, gnssNowMs = null, systemNowMs = 5_000L)) } @Test fun `a phone clock running fast is pulled back onto GNSS time`() { val systemNow = gnssNow + 1_456_000L // A fix the wall clock stamped 0.8 s ago. It must still be 0.8 s old afterwards. val fix = systemNow - 800L assertEquals(gnssNow - 800L, ItsTime.onGnssTime(fix, gnssNow, systemNow)) } @Test fun `a phone clock running slow is pushed forward onto GNSS time`() { val systemNow = gnssNow - 6_000L assertEquals(gnssNow - 250L, ItsTime.onGnssTime(systemNow - 250L, gnssNow, systemNow)) } @Test fun `an accurate phone clock is left where it is`() { assertEquals(gnssNow - 40L, ItsTime.onGnssTime(gnssNow - 40L, gnssNow, gnssNow)) } }