import XCTest
@testable import RideForm

final class SessionClockTests: XCTestCase {
    func testConcurrentMappingCopiesAndValidationRemainConsistent() {
        let clock = SessionClock()
        let writer = DispatchQueue(label: "clock-test-writer")
        let reader = DispatchQueue(label: "clock-test-reader")
        let group = DispatchGroup()
        group.enter()
        writer.async {
            for i in 0..<10000 {
                clock.validateMapping(sensorTimestamp: Double(i)*0.01, receiptUptime: Double(i)*0.01+0.005)
            }
            group.leave()
        }
        group.enter()
        reader.async {
            for _ in 0..<10000 {
                let mapping = clock.mapping
                XCTAssertEqual(mapping.sensorToHostOffset, 0)
                XCTAssertFalse(mapping.checks.isEmpty)
            }
            group.leave()
        }
        XCTAssertEqual(group.wait(timeout: .now()+10), .success)
        XCTAssertTrue(clock.mapping.validated)
        clock.resetValidation()
        XCTAssertFalse(clock.mapping.validated)
    }
}
