mirror of
https://github.com/permissionlesstech/bitchat.git
synced 2026-08-22 07:16:03 +00:00
Merge 16e0a3d0902633478f16bc38bf88e582c5b45941 into 1f59e814f90c3f489f48d68262cb1bf640bf6181
This commit is contained in:
commit
ae397934df
@ -10,12 +10,22 @@ import SwiftUI
|
||||
|
||||
extension Color {
|
||||
private static var peerColorCache: [String: Color] = [:]
|
||||
|
||||
|
||||
#if DEBUG
|
||||
/// Counts cache-miss computations; exposed only so regression tests can
|
||||
/// verify a repeated seed hits the cache instead of recomputing.
|
||||
static var _peerColorComputeCountForTesting = 0
|
||||
#endif
|
||||
|
||||
init(peerSeed: String, isDark: Bool) {
|
||||
let cacheKey = peerSeed + (isDark ? "|dark" : "|light")
|
||||
if let cached = Self.peerColorCache[cacheKey] {
|
||||
self = cached
|
||||
return
|
||||
}
|
||||
#if DEBUG
|
||||
Self._peerColorComputeCountForTesting += 1
|
||||
#endif
|
||||
let h = peerSeed.djb2()
|
||||
var hue = Double(h % 1000) / 1000.0
|
||||
let orange = 30.0 / 360.0
|
||||
|
||||
45
bitchatTests/Utils/ColorPeerTests.swift
Normal file
45
bitchatTests/Utils/ColorPeerTests.swift
Normal file
@ -0,0 +1,45 @@
|
||||
//
|
||||
// ColorPeerTests.swift
|
||||
// bitchatTests
|
||||
//
|
||||
// Tests for Color(peerSeed:isDark:) caching
|
||||
//
|
||||
|
||||
import Testing
|
||||
import SwiftUI
|
||||
@testable import bitchat
|
||||
|
||||
struct ColorPeerTests {
|
||||
|
||||
@Test func repeatedSeedHitsCacheInsteadOfRecomputing() {
|
||||
let seed = "cache-hit-\(UUID().uuidString)"
|
||||
|
||||
let before = Color._peerColorComputeCountForTesting
|
||||
let first = Color(peerSeed: seed, isDark: true)
|
||||
let afterFirst = Color._peerColorComputeCountForTesting
|
||||
let second = Color(peerSeed: seed, isDark: true)
|
||||
let afterSecond = Color._peerColorComputeCountForTesting
|
||||
|
||||
#expect(afterFirst == before + 1)
|
||||
#expect(afterSecond == afterFirst)
|
||||
#expect(first == second)
|
||||
}
|
||||
|
||||
@Test func differentAppearanceForSameSeedIsNotCachedTogether() {
|
||||
let seed = "appearance-\(UUID().uuidString)"
|
||||
|
||||
let before = Color._peerColorComputeCountForTesting
|
||||
_ = Color(peerSeed: seed, isDark: true)
|
||||
_ = Color(peerSeed: seed, isDark: false)
|
||||
let after = Color._peerColorComputeCountForTesting
|
||||
|
||||
#expect(after == before + 2)
|
||||
}
|
||||
|
||||
@Test func sameSeedProducesSameColor() {
|
||||
let seed = "deterministic-\(UUID().uuidString)"
|
||||
let a = Color(peerSeed: seed, isDark: false)
|
||||
let b = Color(peerSeed: seed, isDark: false)
|
||||
#expect(a == b)
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user