summaryrefslogtreecommitdiff
path: root/SoraTests
diff options
context:
space:
mode:
authorFuwn <[email protected]>2026-02-18 12:26:07 -0800
committerFuwn <[email protected]>2026-02-18 12:26:11 -0800
commit314ebb285d11caad11482885769402df80c45391 (patch)
tree67a8a254e3d6bac23501134b08d6daf5d14710a8 /SoraTests
parentperf: memoize generic list derived data and folder grouping (diff)
downloadsora-testing-314ebb285d11caad11482885769402df80c45391.tar.xz
sora-testing-314ebb285d11caad11482885769402df80c45391.zip
perf: eliminate repeated favorites sort map and grid recompute
Diffstat (limited to 'SoraTests')
-rw-r--r--SoraTests/ViewDerivedDataTests.swift47
1 files changed, 47 insertions, 0 deletions
diff --git a/SoraTests/ViewDerivedDataTests.swift b/SoraTests/ViewDerivedDataTests.swift
index b8a4bba..da5ad0d 100644
--- a/SoraTests/ViewDerivedDataTests.swift
+++ b/SoraTests/ViewDerivedDataTests.swift
@@ -55,6 +55,53 @@ final class ViewDerivedDataTests: XCTestCase {
)
}
+ func testFavoritesViewDerivedCollectionsAreReferencedOncePerRenderPass() throws {
+ let source = try loadSource(at: "Sora/Views/FavoritesView.swift")
+ let normalizedSource = strippingCommentsAndStrings(from: source)
+
+ let filteredFavoritesUsages = referenceCount(
+ for: "filteredFavorites",
+ in: normalizedSource
+ )
+ let sortedFilteredFavoritesUsages = referenceCount(
+ for: "sortedFilteredFavorites",
+ in: normalizedSource
+ )
+ let inlinePostMappingCount = tokenCount(
+ matching: #"\bsortedFilteredFavorites\s*\.\s*map\s*\{"#,
+ in: normalizedSource
+ )
+ let columnsSplitterUsages = invocationCount(
+ forFunction: "getColumnsData",
+ in: normalizedSource
+ )
+
+ // swiftlint:disable:next prefer_nimble
+ XCTAssertLessThanOrEqual(
+ filteredFavoritesUsages,
+ 1,
+ "filteredFavorites should be consumed once per dependency change."
+ )
+ // swiftlint:disable:next prefer_nimble
+ XCTAssertLessThanOrEqual(
+ sortedFilteredFavoritesUsages,
+ 1,
+ "sortedFilteredFavorites should be consumed once per dependency change."
+ )
+ // swiftlint:disable:next prefer_nimble
+ XCTAssertEqual(
+ inlinePostMappingCount,
+ 0,
+ "Favorites grid should not remap sorted favorites to posts inline on each cell render."
+ )
+ // swiftlint:disable:next prefer_nimble
+ XCTAssertLessThanOrEqual(
+ columnsSplitterUsages,
+ 1,
+ "Favorites grid column distribution should be derived once per dependency change."
+ )
+ }
+
private func referenceCount(for symbol: String, in source: String) -> Int {
let totalMatches = tokenCount(
matching: #"\b\#(symbol)\b"#,