mirror of
https://gitlab.com/walljm/dynamicbible.git
synced 2025-07-25 08:19:50 -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 leftRef = new BibleReference('Gen 1:1-10');
|
||||||
const rightRef = new BibleReference('Gen 1:1-10');
|
const rightRef = new BibleReference('Gen 1:1-10');
|
||||||
|
|
||||||
expect(BibleReference.overlap(leftRef, rightRef)).toBe(Overlap.Subset);
|
expect(BibleReference.overlap(leftRef, rightRef)).toBe(Overlap.Equal);
|
||||||
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Intersect)).toEqual(new BibleReference('Gen 1:1-10'));
|
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.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', () => {
|
it('Detects Right embedded in Left', () => {
|
||||||
@ -349,8 +350,9 @@ describe('Reference Overlap Detection', () => {
|
|||||||
const rightRef = new BibleReference('Gen 1:2-8');
|
const rightRef = new BibleReference('Gen 1:2-8');
|
||||||
|
|
||||||
expect(BibleReference.overlap(leftRef, rightRef)).toBe(Overlap.Subset);
|
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.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();
|
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.None)).toBeNull();
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -359,8 +361,9 @@ describe('Reference Overlap Detection', () => {
|
|||||||
const rightRef = new BibleReference('Gen 2:1-10');
|
const rightRef = new BibleReference('Gen 2:1-10');
|
||||||
|
|
||||||
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-2:10'));
|
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Equal)).toBeNull();
|
||||||
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Subset)).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();
|
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');
|
const rightRef = new BibleReference('Gen 1:1-2:5');
|
||||||
|
|
||||||
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-2:10'));
|
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Equal)).toBeNull();
|
||||||
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Subset)).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();
|
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');
|
const rightRef = new BibleReference('Gen 1:1-2: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();
|
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Equal)).toBeNull();
|
||||||
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Subset)).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();
|
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');
|
const rightRef = new BibleReference('Gen 1:1-3:1');
|
||||||
|
|
||||||
expect(BibleReference.overlap(leftRef, rightRef)).toBe(Overlap.Subset);
|
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(
|
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Intersect).toString()).toEqual(
|
||||||
new BibleReference('Gen 1:1-3:1').toString()
|
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();
|
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');
|
const rightRef = new BibleReference('Gen 1:1-2:5');
|
||||||
|
|
||||||
expect(BibleReference.overlap(leftRef, rightRef)).toBe(Overlap.Subset);
|
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(
|
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.Intersect).toString()).toEqual(
|
||||||
new BibleReference('Gen 1:1-3:1').toString()
|
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();
|
expect(BibleReference.mergeReference(leftRef, rightRef, Overlap.None)).toBeNull();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -1920,6 +1920,10 @@ export class BibleReference {
|
|||||||
let rightStartIndex = rightRef.startIndex();
|
let rightStartIndex = rightRef.startIndex();
|
||||||
let rightEndIndex = rightRef.endIndex();
|
let rightEndIndex = rightRef.endIndex();
|
||||||
|
|
||||||
|
// Both references are equal to each other
|
||||||
|
if (leftStartIndex === rightStartIndex && leftEndIndex === rightEndIndex) {
|
||||||
|
return Overlap.Equal;
|
||||||
|
}
|
||||||
if (
|
if (
|
||||||
// left is subset of right
|
// left is subset of right
|
||||||
(leftStartIndex >= rightStartIndex && leftEndIndex <= rightEndIndex) ||
|
(leftStartIndex >= rightStartIndex && leftEndIndex <= rightEndIndex) ||
|
||||||
@ -1944,7 +1948,10 @@ export class BibleReference {
|
|||||||
ref2: BibleReference,
|
ref2: BibleReference,
|
||||||
strategy: Overlap
|
strategy: Overlap
|
||||||
): BibleReference | null {
|
): BibleReference | null {
|
||||||
if (ref1.toString() === ref2.toString()) {
|
if (strategy === Overlap.None) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (ref1.toString() === ref2.toString() && strategy === Overlap.Equal) {
|
||||||
return ref1;
|
return ref1;
|
||||||
}
|
}
|
||||||
let overlapType = BibleReference.overlap(ref1, ref2);
|
let overlapType = BibleReference.overlap(ref1, ref2);
|
||||||
@ -2199,6 +2206,7 @@ class StringUtils {
|
|||||||
export enum Overlap {
|
export enum Overlap {
|
||||||
Intersect,
|
Intersect,
|
||||||
Subset,
|
Subset,
|
||||||
|
Equal,
|
||||||
None,
|
None,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user