diff options
| author | Fuwn <[email protected]> | 2026-02-18 12:26:07 -0800 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2026-02-18 12:26:11 -0800 |
| commit | 314ebb285d11caad11482885769402df80c45391 (patch) | |
| tree | 67a8a254e3d6bac23501134b08d6daf5d14710a8 /SoraTests | |
| parent | perf: memoize generic list derived data and folder grouping (diff) | |
| download | sora-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.swift | 47 |
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"#, |