Skip to content

Commit de94d21

Browse files
committed
add Union superset and subset methods
1 parent 9c868d7 commit de94d21

File tree

2 files changed

+43
-0
lines changed

2 files changed

+43
-0
lines changed

src/union.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,18 @@ export class Union {
3030
return this.intervals.some((i) => i.contains(value));
3131
}
3232

33+
public subset(other: Union): boolean {
34+
return this.intervals.every((thisInterval) =>
35+
other.intervals.some((otherInterval) => thisInterval.subset(otherInterval))
36+
);
37+
}
38+
39+
public superset(other: Union): boolean {
40+
return other.intervals.every((otherInterval) =>
41+
this.intervals.some((thisInterval) => thisInterval.superset(otherInterval))
42+
);
43+
}
44+
3345
public hull(): Union {
3446
if (this.isEmpty()) return EMPTY;
3547
return single(this.lower(), this.upper());

tests/union.test.ts

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,35 @@ describe("union", () => {
2323
assert.ok(ordered(nsf.union([nsf.interval(1, 2), nsf.interval(-10, -5)])));
2424
assert.ok(ordered(nsf.union([nsf.interval(1, 2), nsf.interval(-5, 5)])));
2525
});
26+
27+
it("union contains", () => {
28+
const a = nsf.union([nsf.interval(0, 10), nsf.interval(50, 60)]);
29+
assert.ok(!nsf.EMPTY.contains(0));
30+
assert.ok(a.contains(0));
31+
assert.ok(a.contains(1));
32+
assert.ok(a.contains(50));
33+
assert.ok(a.contains(55));
34+
assert.ok(a.contains(60));
35+
assert.ok(!a.contains(61));
36+
assert.ok(!a.contains(49));
37+
assert.ok(!a.contains(-1));
38+
assert.ok(!a.contains(15));
39+
});
40+
41+
it("union subset", () => {
42+
const a = nsf.union([nsf.interval(0, 10), nsf.interval(50, 60)]);
43+
assert.ok(a.subset(nsf.single(0, 100)));
44+
assert.ok(a.subset(nsf.FULL));
45+
assert.ok(a.subset(nsf.union([nsf.interval(-1, 11), nsf.interval(45, 65)])));
46+
47+
assert.ok(nsf.EMPTY.subset(nsf.FULL));
48+
});
49+
50+
it("union superset", () => {
51+
const a = nsf.union([nsf.interval(0, 10), nsf.interval(50, 60)]);
52+
assert.ok(a.superset(nsf.single(0, 1)));
53+
assert.ok(a.superset(nsf.EMPTY));
54+
assert.ok(a.superset(nsf.union([nsf.interval(2, 3), nsf.interval(5, 6)])));
55+
assert.ok(nsf.FULL.superset(nsf.EMPTY));
56+
});
2657
});

0 commit comments

Comments
 (0)