Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

simplified set typing #95

Merged
merged 1 commit into from
Jun 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/comparisons/disjoint.function.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ export function disjoint<T>(...sets: ReadonlySet<T>[]): boolean;
*
* @description A disjoint B ⇔ A ∩ B = ∅
*/
export function disjoint<T, S extends ReadonlySet<T>>(...sets: S[]): boolean {
export function disjoint<T>(...sets: ReadonlySet<T>[]): boolean {
if (sets.length < 2) {
return true;
}
Expand Down
2 changes: 1 addition & 1 deletion src/comparisons/equivalence.function.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ export function equivalence<T>(...sets: ReadonlySet<T>[]): boolean;
*
* @description A ∼ B ⇔ (A ⊆ B) ∧ (B ⊆ A)
*/
export function equivalence<T, S extends ReadonlySet<T>>(...sets: S[]): boolean {
export function equivalence<T>(...sets: ReadonlySet<T>[]): boolean {
if (sets.length < 2) {
return true;
}
Expand Down
2 changes: 1 addition & 1 deletion src/comparisons/pairwise-disjoint.function.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ export function pairwiseDisjoint<T>(...sets: ReadonlySet<T>[]): boolean;
*
* @description pairwise disjoint F ⇔ (∀A,B ∈ F) ⇒ (A ∩ B = ∅)
*/
export function pairwiseDisjoint<T, S extends ReadonlySet<T>>(...sets: S[]): boolean {
export function pairwiseDisjoint<T>(...sets: ReadonlySet<T>[]): boolean {
if (sets.length < 2) {
return true;
}
Expand Down
2 changes: 1 addition & 1 deletion src/comparisons/proper-subset.function.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ export function properSubset<T>(...sets: ReadonlySet<T>[]): boolean;
*
* @description A ⊂ B ⇔ (|A| < |B|) ∧ (∀x : (x ∈ A ⇒ x ∈ B))
*/
export function properSubset<T, S extends ReadonlySet<T>>(...sets: S[]): boolean {
export function properSubset<T>(...sets: ReadonlySet<T>[]): boolean {
if (sets.length < 2) {
return true;
}
Expand Down
2 changes: 1 addition & 1 deletion src/comparisons/proper-superset.function.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ export function properSuperset<T>(...sets: ReadonlySet<T>[]): boolean;
*
* @description A ⊃ B ⇔ (|A| > |B|) ∧ (∀x : (x ∈ B ⇒ x ∈ A))
*/
export function properSuperset<T, S extends ReadonlySet<T>>(...sets: S[]): boolean {
export function properSuperset<T>(...sets: ReadonlySet<T>[]): boolean {
if (sets.length < 2) {
return true;
}
Expand Down
2 changes: 1 addition & 1 deletion src/comparisons/subset.function.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ export function subset<T>(...sets: ReadonlySet<T>[]): boolean;
*
* @description A ⊆ B ⇔ ∀x : (x ∈ A ⇒ x ∈ B)
*/
export function subset<T, S extends ReadonlySet<T>>(...sets: S[]): boolean {
export function subset<T>(...sets: ReadonlySet<T>[]): boolean {
if (sets.length < 2) {
return true;
}
Expand Down
2 changes: 1 addition & 1 deletion src/comparisons/superset.function.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ export function superset<T>(...sets: ReadonlySet<T>[]): boolean;
*
* @description A ⊇ B ⇔ ∀x : (x ∈ B ⇒ x ∈ A)
*/
export function superset<T, S extends ReadonlySet<T>>(...sets: S[]): boolean {
export function superset<T>(...sets: ReadonlySet<T>[]): boolean {
if (sets.length < 2) {
return true;
}
Expand Down
6 changes: 3 additions & 3 deletions src/operations/difference.function.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@ export function difference<T>(...sets: ReadonlySet<T>[]): ReadonlySet<T>;
*
* @description A ∖ B ≔ { x : (x ∈ A) ∧ (x ∉ B) }
*/
export function difference<T, S extends ReadonlySet<T>>(...sets: S[]): S {
export function difference<T>(...sets: ReadonlySet<T>[]): ReadonlySet<T> {
if (sets.length < 2) {
return new Set<T>(sets.shift()) as ReadonlySet<T> as S;
return new Set<T>(sets.shift());
}

const resultSet = new Set<T>();
Expand All @@ -31,5 +31,5 @@ export function difference<T, S extends ReadonlySet<T>>(...sets: S[]): S {
}
}

return resultSet as ReadonlySet<T> as S;
return resultSet;
}
6 changes: 3 additions & 3 deletions src/operations/intersection.function.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ export function intersection<T>(...sets: ReadonlySet<T>[]): ReadonlySet<T>;
*
* @description A ∩ B ≔ { x : (x ∈ A) ∧ (x ∈ B) }
*/
export function intersection<T, S extends ReadonlySet<T>>(...sets: S[]): S {
export function intersection<T>(...sets: ReadonlySet<T>[]): ReadonlySet<T> {
if (sets.length < 2) {
return new Set<T>(sets.shift()) as ReadonlySet<T> as S;
return new Set<T>(sets.shift());
}

const resultSet = new Set<T>();
Expand All @@ -32,5 +32,5 @@ export function intersection<T, S extends ReadonlySet<T>>(...sets: S[]): S {
}
}

return resultSet as ReadonlySet<T> as S;
return resultSet;
}
4 changes: 2 additions & 2 deletions src/operations/union.function.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ export function union<T>(...sets: ReadonlySet<T>[]): ReadonlySet<T>;
*
* @description A ∪ B ≔ { x : (x ∈ A) ∨ (x ∈ B) }
*/
export function union<T, S extends ReadonlySet<T>>(...sets: S[]): S {
export function union<T>(...sets: ReadonlySet<T>[]): ReadonlySet<T> {
const resultSet = new Set<T>(sets.shift());

for (const set of sets) {
Expand All @@ -18,5 +18,5 @@ export function union<T, S extends ReadonlySet<T>>(...sets: S[]): S {
}
}

return resultSet as ReadonlySet<T> as S;
return resultSet;
}
10 changes: 5 additions & 5 deletions src/operations/xor.function.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ export function xor<T>(...sets: ReadonlySet<T>[]): ReadonlySet<T>;
*
* @description A ∆ B ≔ { x : (x ∈ A) ⊕ (x ∈ B) }
*/
export function xor<T, S extends ReadonlySet<T>>(...sets: S[]): S {
export function xor<T>(...sets: ReadonlySet<T>[]): ReadonlySet<T> {
if (sets.length < 2) {
return new Set<T>(sets.shift()) as ReadonlySet<T> as S;
return new Set<T>(sets.shift());
}

const resultSet = new Set<T>();
Expand All @@ -24,7 +24,7 @@ export function xor<T, S extends ReadonlySet<T>>(...sets: S[]): S {

primaryLoop(primarySet, secondarySet);
primaryLoop(secondarySet, primarySet);
function primaryLoop(primary: S, secondary: S): void {
function primaryLoop(primary: ReadonlySet<T>, secondary: ReadonlySet<T>): void {
if (sets.length !== 0) {
for (const element of primary) {
if (!secondary.has(element)) {
Expand All @@ -43,7 +43,7 @@ export function xor<T, S extends ReadonlySet<T>>(...sets: S[]): S {
}

sets.forEach(tertiaryLoop);
function tertiaryLoop(set: S, index: number): void {
function tertiaryLoop(set: ReadonlySet<T>, index: number): void {
if (index < sets.length - 1) {
for (const element of set) {
if (resultSet.has(element)) {
Expand All @@ -64,5 +64,5 @@ export function xor<T, S extends ReadonlySet<T>>(...sets: S[]): S {
}
}

return resultSet as ReadonlySet<T> as S;
return resultSet;
}
4 changes: 2 additions & 2 deletions src/ordering/sort.function.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,6 @@ export function sort<T>(set: ReadonlySet<T>, compareFunction?: (a: T, b: T) => n
* or specifically as A ↑ or A ↓ depending on whether
* the sort order is ascending or descending respectively.
*/
export function sort<T, S extends ReadonlySet<T>>(set: S, compareFunction?: (a: T, b: T) => number): S {
return new Set<T>(Array.from(set).sort(compareFunction)) as ReadonlySet<T> as S;
export function sort<T>(set: ReadonlySet<T>, compareFunction?: (a: T, b: T) => number): ReadonlySet<T> {
return new Set<T>(Array.from(set).sort(compareFunction));
}
Loading