import Testing import CoreGraphics @testable import OnyxMenuBar // Eine feste Breite für den schlimmsten Fall lässt neben jedem gewöhnlichen // Wert Platz stehen: „↓ 13 KB/s" braucht gut halb so viel wie „↓ 999,9 MB/s". // Eine Breite, die jedem Wert folgt, schiebt dagegen bei jeder Messung alle // Symbole rechts davon hin und her. // // Also: sofort wachsen, aber erst nach einer Weile schrumpfen. @Suite("Mitwachsende Breite") struct AdaptiveWidthTests { @Test("Am Anfang gilt, was gebraucht wird") func startsAtNeeded() { var width = AdaptiveWidth(minimum: 20) #expect(width.update(needed: 60) == 60) } @Test("Mehr Platz wird sofort genommen") func growsImmediately() { // Sonst wird abgeschnitten, und abgeschnittene Messwerte sind falsche // Messwerte. var width = AdaptiveWidth(minimum: 20) _ = width.update(needed: 40) #expect(width.update(needed: 80) == 80) } @Test("Weniger Platz wird nicht sofort abgegeben") func shrinksOnlyAfterPatience() { var width = AdaptiveWidth(minimum: 20) _ = width.update(needed: 80) for _ in 0..<(AdaptiveWidth.shrinkAfter - 1) { #expect(width.update(needed: 40) == 80) } } @Test("Nach genügend ruhigen Messungen schrumpft es") func shrinksEventually() { var width = AdaptiveWidth(minimum: 20) _ = width.update(needed: 80) var last: CGFloat = 0 for _ in 0..