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