mirror of
https://github.com/mifi/lossless-cut.git
synced 2024-11-25 19:52:44 +01:00
41c18546c2
and improve types
120 lines
2.8 KiB
TypeScript
120 lines
2.8 KiB
TypeScript
import { test, it, expect } from 'vitest';
|
|
|
|
import { convertSegmentsToChapters, partitionIntoOverlappingRanges, getSegApparentEnd, formatSegNum } from './segments';
|
|
|
|
it('converts segments to chapters with gaps', () => {
|
|
expect(convertSegmentsToChapters([
|
|
{
|
|
start: 104.612,
|
|
end: 189.053,
|
|
name: 'label 1',
|
|
},
|
|
{
|
|
start: 300.448,
|
|
end: 476.194,
|
|
name: 'label 2',
|
|
},
|
|
{
|
|
start: 567.075,
|
|
end: 704.264,
|
|
name: 'label 3',
|
|
},
|
|
{
|
|
start: 704.264,
|
|
end: 855.455,
|
|
name: 'label 4',
|
|
},
|
|
])).toMatchSnapshot();
|
|
});
|
|
|
|
it('converts segments to chapters with no gaps', () => {
|
|
expect(convertSegmentsToChapters([
|
|
{
|
|
start: 0,
|
|
end: 2,
|
|
name: 'label 1',
|
|
},
|
|
{
|
|
start: 2,
|
|
end: 3,
|
|
name: 'label 2',
|
|
},
|
|
])).toMatchSnapshot();
|
|
});
|
|
|
|
it('converts segments to chapters with single long segment', () => {
|
|
expect(convertSegmentsToChapters([
|
|
{
|
|
start: 0,
|
|
end: 1,
|
|
name: 'label 1',
|
|
},
|
|
])).toMatchSnapshot();
|
|
});
|
|
|
|
it('detects overlapping segments', () => {
|
|
expect(partitionIntoOverlappingRanges([
|
|
{ start: 0, end: 1 },
|
|
])).toEqual([]);
|
|
|
|
expect(partitionIntoOverlappingRanges([
|
|
{ start: 0, end: 1 },
|
|
{ start: 1, end: 2 },
|
|
])).toEqual([]);
|
|
|
|
expect(partitionIntoOverlappingRanges([
|
|
{ start: 0, end: 1 },
|
|
{ start: 0.5, end: 2 },
|
|
{ start: 2, end: 3 },
|
|
])).toEqual([
|
|
[
|
|
{ start: 0, end: 1 },
|
|
{ start: 0.5, end: 2 },
|
|
],
|
|
]);
|
|
|
|
expect(partitionIntoOverlappingRanges([
|
|
{ start: 0, end: 2 },
|
|
{ start: 0.5, end: 1 },
|
|
])).toEqual([
|
|
[
|
|
{ start: 0, end: 2 },
|
|
{ start: 0.5, end: 1 },
|
|
],
|
|
]);
|
|
|
|
expect(partitionIntoOverlappingRanges([
|
|
{ start: 9, end: 10.5 },
|
|
{ start: 11, end: 12 },
|
|
{ start: 11.5, end: 12.5 },
|
|
{ start: 11.5, end: 13 },
|
|
{ start: 15, end: 17 },
|
|
{ start: 17, end: 20 },
|
|
{ start: 17.5, end: 18.5 },
|
|
{ start: 18, end: 19.5 },
|
|
{ start: 19, end: 19.5 },
|
|
{ start: 19.5, end: 22 },
|
|
{ start: 22, end: 25 },
|
|
])).toEqual([
|
|
[{ start: 11, end: 12 }, { start: 11.5, end: 13 }, { start: 11.5, end: 12.5 }],
|
|
[{ start: 17, end: 20 }, { start: 17.5, end: 18.5 }, { start: 18, end: 19.5 }, { start: 19, end: 19.5 }, { start: 19.5, end: 22 }],
|
|
]);
|
|
});
|
|
|
|
it('detects overlapping segments, undefined end', () => {
|
|
expect(partitionIntoOverlappingRanges([
|
|
{ start: 1, end: undefined },
|
|
{ start: 1.5, end: undefined },
|
|
], undefined, (seg) => getSegApparentEnd(seg, 2))).toEqual([
|
|
[{ start: 1, end: undefined }, { start: 1.5, end: undefined }],
|
|
]);
|
|
});
|
|
|
|
test('formatSegNum', () => {
|
|
expect(formatSegNum(0, 9)).toBe('1');
|
|
expect(formatSegNum(0, 10)).toBe('01');
|
|
|
|
expect(formatSegNum(0, 10, 2)).toBe('01');
|
|
expect(formatSegNum(0, 10, 3)).toBe('001');
|
|
});
|