Minor updates to overlap detection and segment coalescing logic

This commit is contained in:
2026-04-28 14:11:38 -05:00
parent 28c2eea340
commit a3ca6665a9
14 changed files with 662 additions and 95 deletions

View File

@@ -115,6 +115,51 @@ func TestApplyHonorsCurrentOrder(t *testing.T) {
}
}
func TestApplyUsesEffectiveRunEndForReorderedSegments(t *testing.T) {
merged := model.MergedTranscript{
Segments: []model.Segment{
segment("a.json", 0, "Alice", 10, 20, "long"),
segment("a.json", 1, "Alice", 1, 2, "early"),
segment("a.json", 2, "Alice", 22, 23, "after long"),
},
}
got, summary := Apply(merged, 3)
if summary.OriginalSegmentsMerged != 3 || summary.CoalescedSegments != 1 {
t.Fatalf("summary = %#v", summary)
}
if len(got.Segments) != 1 {
t.Fatalf("segment count = %d, want 1", len(got.Segments))
}
if got.Segments[0].Text != "long early after long" {
t.Fatalf("text = %q", got.Segments[0].Text)
}
if got.Segments[0].Start != 1 || got.Segments[0].End != 23 {
t.Fatalf("bounds = %f-%f, want 1-23", got.Segments[0].Start, got.Segments[0].End)
}
}
func TestApplyDoesNotMergeBeyondEffectiveRunEndGap(t *testing.T) {
merged := model.MergedTranscript{
Segments: []model.Segment{
segment("a.json", 0, "Alice", 10, 20, "long"),
segment("a.json", 1, "Alice", 1, 2, "early"),
segment("a.json", 2, "Alice", 23.1, 24, "too late"),
},
}
got, summary := Apply(merged, 3)
if summary.OriginalSegmentsMerged != 2 || summary.CoalescedSegments != 1 {
t.Fatalf("summary = %#v", summary)
}
if len(got.Segments) != 2 {
t.Fatalf("segment count = %d, want 2", len(got.Segments))
}
if got.Segments[0].Text != "long early" || got.Segments[1].Text != "too late" {
t.Fatalf("segments = %#v", got.Segments)
}
}
func TestApplyDerivedProvenanceForMixedSourcesAndDerivedInputs(t *testing.T) {
first := segment("a.json", 0, "Alice", 1, 2, "first")
second := model.Segment{