fix: clip metadata intervals to playable duration
This commit is contained in:
@@ -167,15 +167,24 @@ struct MiruroMetadataChecks {
|
||||
for duration in [0, -1, Double.nan, .infinity] {
|
||||
try require(MiruroMetadata(title: nil, intervals: [valid]).visibleIntervals(episode: 1, duration: duration).isEmpty, "wait for finite positive actual duration")
|
||||
}
|
||||
let invalid = [interval(.intro, -1, 10), interval(.intro, 10, 10), interval(.intro, 20, 10),
|
||||
interval(.intro, .nan, 10), interval(.intro, 0, .infinity), interval(.intro, 0, 101),
|
||||
let invalid = [interval(.intro, -10, 0), interval(.intro, 100, 110),
|
||||
interval(.intro, 10, 10), interval(.intro, 20, 10),
|
||||
interval(.intro, .nan, 10), interval(.intro, 0, .infinity),
|
||||
interval(episode: 2), interval(votes: -1), interval(votes: .nan),
|
||||
interval(provider: "SomeCrunchyrollProvider"), interval(length: 106)]
|
||||
try require(MiruroMetadata(title: nil, intervals: invalid).visibleIntervals(episode: 1, duration: 100).isEmpty, "bounds, episode, votes, provenance and reference-length rejection")
|
||||
let metadata = MiruroMetadata(title: nil, intervals: [valid])
|
||||
try require(metadata.visibleIntervals(episode: 1, duration: 100) == [valid], "end equal to duration allowed")
|
||||
try require(metadata.visibleIntervals(episode: 1, duration: 99).isEmpty, "duration shrink revalidates without trimming")
|
||||
try require(metadata.visibleIntervals(episode: 1, duration: 120) == [valid], "duration growth revalidates without scaling")
|
||||
try require(metadata.visibleIntervals(episode: 1, duration: 99) == [interval(.intro, 10, 99)], "duration shrink clips the visible interval")
|
||||
try require(metadata.visibleIntervals(episode: 1, duration: 120) == [valid] && metadata.intervals == [valid], "duration growth restores unchanged raw timestamps")
|
||||
let overlapping = MiruroMetadata(title: nil, intervals: [
|
||||
interval(.intro, -5.5, 10.25), interval(.outro, 90.75, 110.5)])
|
||||
try require(overlapping.visibleIntervals(episode: 1, duration: 100) == [
|
||||
interval(.intro, 0, 10.25), interval(.outro, 90.75, 100)], "partial overlaps clip at both playback boundaries")
|
||||
try require(overlapping.visibleIntervals(episode: 1, duration: 120) == [
|
||||
interval(.intro, 0, 10.25), interval(.outro, 90.75, 110.5)], "growth recomputes clipping from raw timestamps")
|
||||
try require(MiruroMetadata(title: nil, intervals: [interval(.intro, -10, 110)])
|
||||
.visibleIntervals(episode: 1, duration: 100) == [interval(.intro, 0, 100)], "interval spanning the video clips to the playable range")
|
||||
let first = interval(.intro, 5, 15, votes: 4), tied = interval(.intro, 20, 30, votes: 4)
|
||||
let ending = interval(.outro, 12, 40, votes: 2)
|
||||
let ranked = MiruroMetadata(title: nil, intervals: [interval(), first, tied, ending, interval(.outro, 50, 60, votes: 1)])
|
||||
|
||||
Reference in New Issue
Block a user