Skip to content

Commit 28d8265

Browse files
committed
add custom UInt64 property unit tests
1 parent 724a533 commit 28d8265

File tree

1 file changed

+93
-1
lines changed

1 file changed

+93
-1
lines changed

Tests/FoundationEssentialsTests/ProgressManager/ProgressManagerPropertiesTests.swift

Lines changed: 93 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -881,7 +881,7 @@ extension ProgressManager.Properties {
881881
}
882882
}
883883

884-
@Suite("Progress Manager Image URL (Non-retaining) Properties", .tags(.progressManager)) struct ProgressManagerImageURLProperties {
884+
@Suite("Progress Manager URL (Non-retaining) Properties", .tags(.progressManager)) struct ProgressManagerURLProperties {
885885
func doSomething(subprogress: consuming Subprogress) async {
886886
let manager = subprogress.start(totalCount: 1)
887887

@@ -946,3 +946,95 @@ extension ProgressManager.Properties {
946946
}
947947
}
948948

949+
extension ProgressManager.Properties {
950+
var totalPixelCount: TotalPixelCount.Type { TotalPixelCount.self }
951+
struct TotalPixelCount: Sendable, ProgressManager.Property {
952+
typealias Value = UInt64
953+
954+
typealias Summary = [UInt64]
955+
956+
static var key: String { "MyApp.TotalPixelCount" }
957+
958+
static var defaultValue: UInt64 { 0 }
959+
960+
static var defaultSummary: [UInt64] { [] }
961+
962+
static func reduce(into summary: inout [UInt64], value: UInt64) {
963+
summary.append(value)
964+
}
965+
966+
static func merge(_ summary1: [UInt64], _ summary2: [UInt64]) -> [UInt64] {
967+
summary1 + summary2
968+
}
969+
970+
static func terminate(_ parentSummary: [UInt64], _ childSummary: [UInt64]) -> [UInt64] {
971+
parentSummary + childSummary
972+
}
973+
}
974+
}
975+
976+
@Suite("Progress Manager UInt64 (Retaining) Properties", .tags(.progressManager)) struct ProgressManagerUInt64Properties {
977+
978+
func doSomething(subprogress: consuming Subprogress) async {
979+
let manager = subprogress.start(totalCount: 1)
980+
981+
manager.withProperties { properties in
982+
properties.completedCount = 1
983+
properties.totalPixelCount = 24
984+
}
985+
986+
#expect(manager.summary(of: ProgressManager.Properties.TotalPixelCount.self) == [24])
987+
}
988+
989+
func doSomethingTwoLevels(subprogress: consuming Subprogress) async {
990+
let manager = subprogress.start(totalCount: 2)
991+
992+
manager.withProperties { properties in
993+
properties.completedCount = 1
994+
properties.totalPixelCount = 26
995+
}
996+
997+
await doSomething(subprogress: manager.subprogress(assigningCount: 1))
998+
999+
#expect(manager.summary(of: ProgressManager.Properties.TotalPixelCount.self) == [26, 24])
1000+
}
1001+
1002+
@Test func discreteManager() async throws {
1003+
let manager = ProgressManager(totalCount: 1)
1004+
1005+
manager.withProperties { properties in
1006+
properties.totalPixelCount = 42
1007+
}
1008+
1009+
#expect(manager.fractionCompleted == 0.0)
1010+
#expect(manager.summary(of: ProgressManager.Properties.TotalPixelCount.self) == [42])
1011+
}
1012+
1013+
@Test func twoLevelsManager() async throws {
1014+
let manager = ProgressManager(totalCount: 2)
1015+
1016+
manager.withProperties { properties in
1017+
properties.completedCount = 1
1018+
properties.totalPixelCount = 42
1019+
}
1020+
1021+
await doSomething(subprogress: manager.subprogress(assigningCount: 1))
1022+
1023+
#expect(manager.fractionCompleted == 1.0)
1024+
#expect(manager.summary(of: ProgressManager.Properties.TotalPixelCount.self) == [42, 24])
1025+
}
1026+
1027+
@Test func threeLevelsManager() async throws {
1028+
let manager = ProgressManager(totalCount: 2)
1029+
1030+
manager.withProperties { properties in
1031+
properties.completedCount = 1
1032+
properties.totalPixelCount = 42
1033+
}
1034+
1035+
await doSomethingTwoLevels(subprogress: manager.subprogress(assigningCount: 1))
1036+
1037+
#expect(manager.fractionCompleted == 1.0)
1038+
#expect(manager.summary(of: ProgressManager.Properties.TotalPixelCount.self) == [42, 26, 24])
1039+
}
1040+
}

0 commit comments

Comments
 (0)