summaryrefslogtreecommitdiff
path: root/test-runner/src/test/kotlin
diff options
context:
space:
mode:
authorClaude <noreply@anthropic.com>2026-05-26 07:46:09 +0000
committerClaude <noreply@anthropic.com>2026-05-26 07:46:09 +0000
commit3673ed0ef79d776c6da3bfa0db9de8b08326fd32 (patch)
tree369ec57c831fb3b3de7220f4ba06fb3cb6d32440 /test-runner/src/test/kotlin
parente64d07cb49dd3313eb8595935777f31fdfb2f373 (diff)
Fix ANR, false tack detections, and empty-state flash on track load
ANR: getSavedTracks() had no IO dispatcher — TackDetector ran on main thread at O(n²) cost (~77M ops for a 2.5h track). Added withContext(IO). TackDetector: replaced O(n) list.filter with O(log n) binary-search subList for before/after windows; O(n²) → O(n log n). Raised MIN_DELTA 60°→75° to stop detecting ordinary course corrections as maneuvers. Removed MAX_DELTA cap entirely — 180° crash-tacks are valid; the circularMAD stability windows are the real quality gate. TrackDetailSheet: dropped the arbitrary abs(delta)>70 Tack/Jibe heuristic. Now uses true wind angle when available for classification; falls back to "Maneuver" when TWD is absent. SavedTracksFragment: added isLoadingTracks StateFlow (MainViewModel); combine() suppresses the empty-state layout while the initial IO load runs so it no longer flashes "No saved tracks yet" before data arrives. 16/16 TackDetector tests pass. https://claude.ai/code/session_01KXYBuAHZkvv63DeUG6XaZD
Diffstat (limited to 'test-runner/src/test/kotlin')
-rw-r--r--test-runner/src/test/kotlin/org/terst/nav/track/TackDetectorTest.kt8
1 files changed, 4 insertions, 4 deletions
diff --git a/test-runner/src/test/kotlin/org/terst/nav/track/TackDetectorTest.kt b/test-runner/src/test/kotlin/org/terst/nav/track/TackDetectorTest.kt
index 6d946a0..265ba76 100644
--- a/test-runner/src/test/kotlin/org/terst/nav/track/TackDetectorTest.kt
+++ b/test-runner/src/test/kotlin/org/terst/nav/track/TackDetectorTest.kt
@@ -49,13 +49,13 @@ class TackDetectorTest {
}
@Test fun `heading change below MIN_DELTA is ignored`() {
- // 45° delta — below MIN_DELTA=60°
+ // 45° delta — below MIN_DELTA=75°
assertTrue(TackDetector.detectTacks(tackTrack(90.0, 135.0)).isEmpty())
}
- @Test fun `heading change above MAX_DELTA is ignored`() {
- // 170° delta — above MAX_DELTA=160° (U-turn, not a tack)
- assertTrue(TackDetector.detectTacks(tackTrack(90.0, 260.0)).isEmpty())
+ @Test fun `heading change of 170 degrees is detected`() {
+ // 170° delta — valid crash-tack; no upper cap
+ assertEquals(1, TackDetector.detectTacks(tackTrack(90.0, 260.0)).size)
}
@Test fun `detects two tacks in sequence with sufficient gap`() {