Bible reference merging logic.

This commit is contained in:
Jeremy Wall 2020-08-07 17:45:53 -04:00
parent aaa7ec151b
commit 573b9dc29d
2 changed files with 1257 additions and 100 deletions

View File

@ -32,9 +32,7 @@ describe('Reference', () => {
}); });
it('Should parse the reference: 2 Samuel 5:5-6:5', () => { it('Should parse the reference: 2 Samuel 5:5-6:5', () => {
expect(new BibleReference('II sam 5:5-6:5').toString()).toBe( expect(new BibleReference('II sam 5:5-6:5').toString()).toBe('2 Samuel 5:5 - 6:5');
'2 Samuel 5:5 - 6:5'
);
}); });
const booknames = [ const booknames = [
@ -268,22 +266,14 @@ describe('Reference', () => {
expect(book.name).toBe(bk.actual); expect(book.name).toBe(bk.actual);
for (let i = 1; i < book.lastChapter; i++) { for (let i = 1; i < book.lastChapter; i++) {
expect( expect(new BibleReference(bk.abbr + ' ' + i + ':3-' + (i + 1) + ':6').toString()).toBe(
new BibleReference( bk.actual + ' ' + i + ':3 - ' + (i + 1) + ':6'
bk.abbr + ' ' + i + ':3-' + (i + 1) + ':6' );
).toString()
).toBe(bk.actual + ' ' + i + ':3 - ' + (i + 1) + ':6');
} }
expect(new BibleReference(bk.abbr + ' 1:4-2:5').toString()).toBe( expect(new BibleReference(bk.abbr + ' 1:4-2:5').toString()).toBe(bk.actual + ' 1:4 - 2:5');
bk.actual + ' 1:4 - 2:5' expect(new BibleReference(bk.abbr + ' 1:1 - 5').toString()).toBe(bk.actual + ' 1:1 - 5');
); expect(new BibleReference(bk.abbr + ' 1:4 - 5').toString()).toBe(bk.actual + ' 1:4 - 5');
expect(new BibleReference(bk.abbr + ' 1:1 - 5').toString()).toBe(
bk.actual + ' 1:1 - 5'
);
expect(new BibleReference(bk.abbr + ' 1:4 - 5').toString()).toBe(
bk.actual + ' 1:4 - 5'
);
}); });
} }
@ -297,31 +287,70 @@ describe('Reference', () => {
}); });
describe('Reference Overlap Detection', () => { describe('Reference Overlap Detection', () => {
// it('Different books dont overlap', () => { it('Different books dont overlap', () => {
// const leftRf = new BibleReference('Gen 1:1-5'); const leftRef = new BibleReference('Gen 1:1-5');
// const rightRef = new BibleReference('Exodus 1:3-7'); const rightRef = new BibleReference('Exodus 1:3-7');
//
// expect(BibleReference.overlap(leftRf, rightRef)).toBe(Overlap.None); expect(BibleReference.overlap(leftRef, rightRef)).toBe(Overlap.None);
// }); expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Intersect)).toBeNull();
// });
// it('Different chapters dont overlap', () => {
// const leftRef = new BibleReference('Gen 1:1-5'); it('Different chapters dont overlap', () => {
// const rightRef = new BibleReference('Gen 2:1-5'); const leftRef = new BibleReference('Gen 1:1-5');
// const rightRef = new BibleReference('Gen 2:1-5');
// expect(BibleReference.overlap(leftRef, rightRef)).toBe(Overlap.None);
// }); expect(BibleReference.overlap(leftRef, rightRef)).toBe(Overlap.None);
// expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Intersect)).toBeNull();
// it('Detects Left intersects the front of Right', () => { expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.None)).toBeNull();
// const leftRef = new BibleReference('Gen 1:1-5'); });
// const rightRef = new BibleReference('Gen 1:4-5');
// it('Detects Left intersects the front of Right', () => {
// expect(BibleReference.overlap(leftRef, rightRef)).toBe(Overlap.Intersect); const leftRef = new BibleReference('Gen 1:1-5');
// }); const rightRef = new BibleReference('Gen 1:4-6');
expect(BibleReference.overlap(leftRef, rightRef)).toBe(Overlap.Intersect);
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Intersect)).toEqual(new BibleReference('Gen 1:1-6'));
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Subset)).toBeNull();
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.None)).toBeNull();
});
it('Detects Right intersects the front of left', () => { it('Detects Right intersects the front of left', () => {
const leftRef = new BibleReference('Gen 1:7-10'); const leftRef = new BibleReference('Gen 1:7-10');
const rightRef = new BibleReference('Gen 1:5-8'); const rightRef = new BibleReference('Gen 1:1-8');
expect(BibleReference.overlap(leftRef, rightRef)).toBe(Overlap.Intersect); expect(BibleReference.overlap(leftRef, rightRef)).toBe(Overlap.Intersect);
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Intersect)).toEqual(new BibleReference('Gen 1:1-10'));
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Subset)).toBeNull();
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.None)).toBeNull();
}); });
});
it('Detects Left embedded in Right', () => {
const leftRef = new BibleReference('Gen 1:2-8');
const rightRef = new BibleReference('Gen 1:1-10');
expect(BibleReference.overlap(leftRef, rightRef)).toBe(Overlap.Subset);
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Intersect)).toEqual(new BibleReference('Gen 1:1-10'));
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Subset)).toEqual(new BibleReference('Gen 1:1-10'));
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.None)).toBeNull();
});
it('Detects Both are Equal', () => {
const leftRef = new BibleReference('Gen 1:1-10');
const rightRef = new BibleReference('Gen 1:1-10');
expect(BibleReference.overlap(leftRef, rightRef)).toBe(Overlap.Subset);
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Intersect)).toEqual(new BibleReference('Gen 1:1-10'));
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Subset)).toEqual(new BibleReference('Gen 1:1-10'));
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.None)).toEqual(new BibleReference('Gen 1:1-10'));
});
it('Detects Right embedded in Left', () => {
const leftRef = new BibleReference('Gen 1:1-10');
const rightRef = new BibleReference('Gen 1:2-8');
expect(BibleReference.overlap(leftRef, rightRef)).toBe(Overlap.Subset);
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Intersect)).toEqual(new BibleReference('Gen 1:1-10'));
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Subset)).toEqual(new BibleReference('Gen 1:1-10'));
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.None)).toBeNull();
});
});

File diff suppressed because it is too large Load Diff