mirror of
https://gitlab.com/walljm/dynamicbible.git
synced 2025-07-23 15:30:14 -04:00
Add an equal merging strategy
This commit is contained in:
parent
8ed0da3c1d
commit
99c5930b31
@ -338,10 +338,11 @@ describe('Reference Overlap Detection', () => {
|
||||
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.overlap(leftRef, rightRef)).toBe(Overlap.Equal);
|
||||
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Equal)).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'));
|
||||
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Intersect)).toEqual(new BibleReference('Gen 1:1-10'));
|
||||
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.None)).toBeNull();
|
||||
});
|
||||
|
||||
it('Detects Right embedded in Left', () => {
|
||||
@ -349,8 +350,9 @@ describe('Reference Overlap Detection', () => {
|
||||
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.Equal)).toBeNull();
|
||||
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Subset)).toEqual(new BibleReference('Gen 1:1-10'));
|
||||
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Intersect)).toEqual(new BibleReference('Gen 1:1-10'));
|
||||
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.None)).toBeNull();
|
||||
});
|
||||
|
||||
@ -359,8 +361,9 @@ describe('Reference Overlap Detection', () => {
|
||||
const rightRef = new BibleReference('Gen 2:1-10');
|
||||
|
||||
expect(BibleReference.overlap(leftRef, rightRef)).toBe(Overlap.Intersect);
|
||||
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Intersect)).toEqual(new BibleReference('Gen 1:1-2:10'));
|
||||
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Equal)).toBeNull();
|
||||
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Subset)).toBeNull();
|
||||
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Intersect)).toEqual(new BibleReference('Gen 1:1-2:10'));
|
||||
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.None)).toBeNull();
|
||||
});
|
||||
|
||||
@ -369,8 +372,9 @@ describe('Reference Overlap Detection', () => {
|
||||
const rightRef = new BibleReference('Gen 1:1-2:5');
|
||||
|
||||
expect(BibleReference.overlap(leftRef, rightRef)).toBe(Overlap.Intersect);
|
||||
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Intersect)).toEqual(new BibleReference('Gen 1:1-2:10'));
|
||||
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Equal)).toBeNull();
|
||||
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Subset)).toBeNull();
|
||||
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Intersect)).toEqual(new BibleReference('Gen 1:1-2:10'));
|
||||
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.None)).toBeNull();
|
||||
});
|
||||
|
||||
@ -379,8 +383,9 @@ describe('Reference Overlap Detection', () => {
|
||||
const rightRef = new BibleReference('Gen 1:1-2:5');
|
||||
|
||||
expect(BibleReference.overlap(leftRef, rightRef)).toBe(Overlap.None);
|
||||
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Intersect)).toBeNull();
|
||||
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Equal)).toBeNull();
|
||||
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Subset)).toBeNull();
|
||||
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Intersect)).toBeNull();
|
||||
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.None)).toBeNull();
|
||||
});
|
||||
|
||||
@ -389,10 +394,11 @@ describe('Reference Overlap Detection', () => {
|
||||
const rightRef = new BibleReference('Gen 1:1-3:1');
|
||||
|
||||
expect(BibleReference.overlap(leftRef, rightRef)).toBe(Overlap.Subset);
|
||||
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Equal)).toBeNull();
|
||||
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Subset)).toEqual(new BibleReference('Gen 1:1-3:1'));
|
||||
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Intersect).toString()).toEqual(
|
||||
new BibleReference('Gen 1:1-3:1').toString()
|
||||
);
|
||||
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Subset)).toEqual(new BibleReference('Gen 1:1-3:1'));
|
||||
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.None)).toBeNull();
|
||||
});
|
||||
|
||||
@ -401,10 +407,11 @@ describe('Reference Overlap Detection', () => {
|
||||
const rightRef = new BibleReference('Gen 1:1-2:5');
|
||||
|
||||
expect(BibleReference.overlap(leftRef, rightRef)).toBe(Overlap.Subset);
|
||||
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Equal)).toBeNull();
|
||||
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Subset)).toEqual(new BibleReference('Gen 1:1-3:1'));
|
||||
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Intersect).toString()).toEqual(
|
||||
new BibleReference('Gen 1:1-3:1').toString()
|
||||
);
|
||||
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Subset)).toEqual(new BibleReference('Gen 1:1-3:1'));
|
||||
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.None)).toBeNull();
|
||||
});
|
||||
});
|
||||
|
@ -1920,6 +1920,10 @@ export class BibleReference {
|
||||
let rightStartIndex = rightRef.startIndex();
|
||||
let rightEndIndex = rightRef.endIndex();
|
||||
|
||||
// Both references are equal to each other
|
||||
if (leftStartIndex === rightStartIndex && leftEndIndex === rightEndIndex) {
|
||||
return Overlap.Equal;
|
||||
}
|
||||
if (
|
||||
// left is subset of right
|
||||
(leftStartIndex >= rightStartIndex && leftEndIndex <= rightEndIndex) ||
|
||||
@ -1944,7 +1948,10 @@ export class BibleReference {
|
||||
ref2: BibleReference,
|
||||
strategy: Overlap
|
||||
): BibleReference | null {
|
||||
if (ref1.toString() === ref2.toString()) {
|
||||
if (strategy === Overlap.None) {
|
||||
return null;
|
||||
}
|
||||
if (ref1.toString() === ref2.toString() && strategy === Overlap.Equal) {
|
||||
return ref1;
|
||||
}
|
||||
let overlapType = BibleReference.overlap(ref1, ref2);
|
||||
@ -2199,6 +2206,7 @@ class StringUtils {
|
||||
export enum Overlap {
|
||||
Intersect,
|
||||
Subset,
|
||||
Equal,
|
||||
None,
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user