Files
scriptc/tests/corpus/collection-array-sets.ts
Chris Tate 39db8c0a99 feat(compiler): make lowering contexts natively compilable
- Run production scope and closure capture logic with native TypeScript 7 symbols.
- Give lowering caches explicit pass ownership and stable symbol identities.
- Support reference collection arrays and optional Set seeds on both native backends.
2026-09-28 19:48:46 -05:00

56 lines
2.1 KiB
TypeScript

// @transform-types
function item(value: number): Set<number> { return new Set([value, value + 1]); }
function values(sets: Set<number>[]): string {
return sets.map((set) => [...set].join(":")).join(",");
}
const first = item(1);
const second = item(3);
const third = item(5);
const sets: Set<number>[] = [first, second];
sets.push(third);
console.log(values(sets), sets[0] === first, sets.includes(second));
console.log(sets.indexOf(first), sets.includes(item(1)));
first.add(9);
console.log(values(sets));
sets[1] = first;
console.log(values(sets), sets[0] === sets[1], second.size);
console.log(sets.pop() === third, values(sets));
sets.unshift(second, third);
console.log(values(sets), sets.shift() === second);
const removed = sets.splice(1, 1, second);
console.log(values(removed), values(sets));
const copied = sets.slice();
const spread = [...sets];
const combined = sets.concat([first]);
console.log(values(copied), values(spread), values(combined));
copied[0].add(11);
console.log(values(sets));
sets.reverse();
console.log(values(sets));
sets.fill(second, 1);
sets.copyWithin(0, 1);
console.log(values(sets));
const made = [10, 20, 30].map((value) => item(value));
const selected = made.filter((set) => set.has(20));
console.log(values(made), values(selected), selected[0] === made[1]);
console.log(made.find((set) => set.has(30)) === made[2]);
console.log(made.reduce((sum, set) => sum + set.size, 0));
console.log(values([made, [first]].flat()));
const expanded = made.flatMap((set) => [set, set]);
console.log(values(expanded), expanded[0] === expanded[1]);
console.log(values(Array.from(made)));
class Key { constructor(public name: string) {} }
const key = new Key("kept");
const referenceSets: Set<Key>[] = [new Set<Key>()];
referenceSets[0].add(key);
const alias = referenceSets.slice();
referenceSets[0].clear();
console.log(alias[0].has(key));
alias[0].add(key);
console.log(referenceSets[0].has(key));
const optional: (Set<number> | undefined)[] = [first, undefined, second];
for (const set of optional) console.log(set === undefined ? -1 : set.size);
console.log(optional[0] === first, optional[1] === undefined);