jetstream 16.0.0

Jetstream is a RPC framework for Rust, based on the 9P protocol and QUIC.
Documentation
// JetStream WireFormat — Time Tests
// Copyright (c) 2024, Sevki <s@sevki.io>
// SPDX-License-Identifier: BSD-3-Clause
// r[impl jetstream.wireformat.swift.test-compat]

import XCTest
@testable import JetStreamWireFormat

final class TimeTests: XCTestCase {

    // r[verify jetstream.wireformat.swift.systime]
    // r[verify jetstream.wireformat.systime]
    func testDateRoundTrip() throws {
        // Use a known timestamp: 2024-01-01T00:00:00Z = 1704067200000 ms
        let date = Date(timeIntervalSince1970: 1704067200.0)
        var writer = BinaryWriter()
        try date.encode(writer: &writer)
        var reader = BinaryReader(data: writer.data)
        let decoded = try Date.decode(reader: &reader)
        // Compare with millisecond precision
        XCTAssertEqual(
            Int64(decoded.timeIntervalSince1970 * 1000),
            Int64(date.timeIntervalSince1970 * 1000)
        )
    }

    func testDateByteSize() {
        XCTAssertEqual(Date().byteSize(), 8)
    }

    func testEpochDate() throws {
        let date = Date(timeIntervalSince1970: 0)
        var writer = BinaryWriter()
        try date.encode(writer: &writer)
        // Should encode as 0 ms
        XCTAssertEqual(writer.data, Data([0, 0, 0, 0, 0, 0, 0, 0]))
    }

    func testDateEncoding() throws {
        // 1000 ms = 1 second since epoch
        let date = Date(timeIntervalSince1970: 1.0)
        var writer = BinaryWriter()
        try date.encode(writer: &writer)
        var reader = BinaryReader(data: writer.data)
        let millis = try UInt64.decode(reader: &reader)
        XCTAssertEqual(millis, 1000)
    }

    // r[verify jetstream.wireformat.swift.test-compat]
    func testDateKnownBytes() throws {
        // 1704067200000 ms = 0x0000018CC251F400
        // In LE: 00 F4 51 C2 8C 01 00 00
        let expected = Data([0x00, 0xF4, 0x51, 0xC2, 0x8C, 0x01, 0x00, 0x00])
        let date = Date(timeIntervalSince1970: 1704067200.0)
        var writer = BinaryWriter()
        try date.encode(writer: &writer)
        XCTAssertEqual(writer.data, expected)
    }
}