Files
bitchat/bitchatTests/Services/BLEPeerPublishCoalescerTests.swift

65 lines
2.2 KiB
Swift

import Foundation
import Testing
@testable import bitchat
struct BLEPeerPublishCoalescerTests {
@Test
func firstRequestPublishesImmediately() {
var coalescer = BLEPeerPublishCoalescer(minimumInterval: 0.1)
#expect(coalescer.requestPublish(now: Date(timeIntervalSince1970: 100)) == .publishNow)
}
@Test
func rapidRequestSchedulesAfterRemainingInterval() {
let now = Date(timeIntervalSince1970: 100)
var coalescer = BLEPeerPublishCoalescer(minimumInterval: 0.1)
_ = coalescer.requestPublish(now: now)
if case .schedule(let delay) = coalescer.requestPublish(now: now.addingTimeInterval(0.04)) {
#expect(abs(delay - 0.06) < 0.001)
} else {
Issue.record("Expected a scheduled publish")
}
}
@Test
func requestSkipsWhilePublishIsAlreadyPending() {
let now = Date(timeIntervalSince1970: 100)
var coalescer = BLEPeerPublishCoalescer(minimumInterval: 0.1)
_ = coalescer.requestPublish(now: now)
_ = coalescer.requestPublish(now: now.addingTimeInterval(0.04))
#expect(coalescer.requestPublish(now: now.addingTimeInterval(0.05)) == .skip)
}
@Test
func elapsedRequestPublishesImmediatelyEvenWithPendingPublish() {
let now = Date(timeIntervalSince1970: 100)
var coalescer = BLEPeerPublishCoalescer(minimumInterval: 0.1)
_ = coalescer.requestPublish(now: now)
_ = coalescer.requestPublish(now: now.addingTimeInterval(0.04))
#expect(coalescer.requestPublish(now: now.addingTimeInterval(0.11)) == .publishNow)
}
@Test
func scheduledPublishFiredClearsPendingState() {
let now = Date(timeIntervalSince1970: 100)
var coalescer = BLEPeerPublishCoalescer(minimumInterval: 0.1)
_ = coalescer.requestPublish(now: now)
_ = coalescer.requestPublish(now: now.addingTimeInterval(0.04))
coalescer.scheduledPublishFired(now: now.addingTimeInterval(0.1))
if case .schedule(let delay) = coalescer.requestPublish(now: now.addingTimeInterval(0.15)) {
#expect(abs(delay - 0.05) < 0.001)
} else {
Issue.record("Expected a scheduled publish")
}
}
}