100 union members
tsz is 2.7x faster 251 lines 12 KB
Timing
Files
// Union type stress test - discriminated unions with many members
type StressEvent =
| { type: "event0"; payload0: string; timestamp: number }
| { type: "event1"; payload1: string; timestamp: number }
| { type: "event2"; payload2: string; timestamp: number }
| { type: "event3"; payload3: string; timestamp: number }
| { type: "event4"; payload4: string; timestamp: number }
| { type: "event5"; payload5: string; timestamp: number }
| { type: "event6"; payload6: string; timestamp: number }
| { type: "event7"; payload7: string; timestamp: number }
| { type: "event8"; payload8: string; timestamp: number }
| { type: "event9"; payload9: string; timestamp: number }
| { type: "event10"; payload10: string; timestamp: number }
| { type: "event11"; payload11: string; timestamp: number }
| { type: "event12"; payload12: string; timestamp: number }
| { type: "event13"; payload13: string; timestamp: number }
| { type: "event14"; payload14: string; timestamp: number }
| { type: "event15"; payload15: string; timestamp: number }
| { type: "event16"; payload16: string; timestamp: number }
| { type: "event17"; payload17: string; timestamp: number }
| { type: "event18"; payload18: string; timestamp: number }
| { type: "event19"; payload19: string; timestamp: number }
| { type: "event20"; payload20: string; timestamp: number }
| { type: "event21"; payload21: string; timestamp: number }
| { type: "event22"; payload22: string; timestamp: number }
| { type: "event23"; payload23: string; timestamp: number }
| { type: "event24"; payload24: string; timestamp: number }
| { type: "event25"; payload25: string; timestamp: number }
| { type: "event26"; payload26: string; timestamp: number }
| { type: "event27"; payload27: string; timestamp: number }
| { type: "event28"; payload28: string; timestamp: number }
| { type: "event29"; payload29: string; timestamp: number }
| { type: "event30"; payload30: string; timestamp: number }
| { type: "event31"; payload31: string; timestamp: number }
| { type: "event32"; payload32: string; timestamp: number }
| { type: "event33"; payload33: string; timestamp: number }
| { type: "event34"; payload34: string; timestamp: number }
| { type: "event35"; payload35: string; timestamp: number }
| { type: "event36"; payload36: string; timestamp: number }
| { type: "event37"; payload37: string; timestamp: number }
| { type: "event38"; payload38: string; timestamp: number }
| { type: "event39"; payload39: string; timestamp: number }
| { type: "event40"; payload40: string; timestamp: number }
| { type: "event41"; payload41: string; timestamp: number }
| { type: "event42"; payload42: string; timestamp: number }
| { type: "event43"; payload43: string; timestamp: number }
| { type: "event44"; payload44: string; timestamp: number }
| { type: "event45"; payload45: string; timestamp: number }
| { type: "event46"; payload46: string; timestamp: number }
| { type: "event47"; payload47: string; timestamp: number }
| { type: "event48"; payload48: string; timestamp: number }
| { type: "event49"; payload49: string; timestamp: number }
| { type: "event50"; payload50: string; timestamp: number }
| { type: "event51"; payload51: string; timestamp: number }
| { type: "event52"; payload52: string; timestamp: number }
| { type: "event53"; payload53: string; timestamp: number }
| { type: "event54"; payload54: string; timestamp: number }
| { type: "event55"; payload55: string; timestamp: number }
| { type: "event56"; payload56: string; timestamp: number }
| { type: "event57"; payload57: string; timestamp: number }
| { type: "event58"; payload58: string; timestamp: number }
| { type: "event59"; payload59: string; timestamp: number }
| { type: "event60"; payload60: string; timestamp: number }
| { type: "event61"; payload61: string; timestamp: number }
| { type: "event62"; payload62: string; timestamp: number }
| { type: "event63"; payload63: string; timestamp: number }
| { type: "event64"; payload64: string; timestamp: number }
| { type: "event65"; payload65: string; timestamp: number }
| { type: "event66"; payload66: string; timestamp: number }
| { type: "event67"; payload67: string; timestamp: number }
| { type: "event68"; payload68: string; timestamp: number }
| { type: "event69"; payload69: string; timestamp: number }
| { type: "event70"; payload70: string; timestamp: number }
| { type: "event71"; payload71: string; timestamp: number }
| { type: "event72"; payload72: string; timestamp: number }
| { type: "event73"; payload73: string; timestamp: number }
| { type: "event74"; payload74: string; timestamp: number }
| { type: "event75"; payload75: string; timestamp: number }
| { type: "event76"; payload76: string; timestamp: number }
| { type: "event77"; payload77: string; timestamp: number }
| { type: "event78"; payload78: string; timestamp: number }
| { type: "event79"; payload79: string; timestamp: number }
| { type: "event80"; payload80: string; timestamp: number }
| { type: "event81"; payload81: string; timestamp: number }
| { type: "event82"; payload82: string; timestamp: number }
| { type: "event83"; payload83: string; timestamp: number }
| { type: "event84"; payload84: string; timestamp: number }
| { type: "event85"; payload85: string; timestamp: number }
| { type: "event86"; payload86: string; timestamp: number }
| { type: "event87"; payload87: string; timestamp: number }
| { type: "event88"; payload88: string; timestamp: number }
| { type: "event89"; payload89: string; timestamp: number }
| { type: "event90"; payload90: string; timestamp: number }
| { type: "event91"; payload91: string; timestamp: number }
| { type: "event92"; payload92: string; timestamp: number }
| { type: "event93"; payload93: string; timestamp: number }
| { type: "event94"; payload94: string; timestamp: number }
| { type: "event95"; payload95: string; timestamp: number }
| { type: "event96"; payload96: string; timestamp: number }
| { type: "event97"; payload97: string; timestamp: number }
| { type: "event98"; payload98: string; timestamp: number }
| { type: "event99"; payload99: string; timestamp: number };
function handleEvent(event: StressEvent): string {
switch (event.type) {
case "event0": return event.payload0;
case "event1": return event.payload1;
case "event2": return event.payload2;
case "event3": return event.payload3;
case "event4": return event.payload4;
case "event5": return event.payload5;
case "event6": return event.payload6;
case "event7": return event.payload7;
case "event8": return event.payload8;
case "event9": return event.payload9;
case "event10": return event.payload10;
case "event11": return event.payload11;
case "event12": return event.payload12;
case "event13": return event.payload13;
case "event14": return event.payload14;
case "event15": return event.payload15;
case "event16": return event.payload16;
case "event17": return event.payload17;
case "event18": return event.payload18;
case "event19": return event.payload19;
case "event20": return event.payload20;
case "event21": return event.payload21;
case "event22": return event.payload22;
case "event23": return event.payload23;
case "event24": return event.payload24;
case "event25": return event.payload25;
case "event26": return event.payload26;
case "event27": return event.payload27;
case "event28": return event.payload28;
case "event29": return event.payload29;
case "event30": return event.payload30;
case "event31": return event.payload31;
case "event32": return event.payload32;
case "event33": return event.payload33;
case "event34": return event.payload34;
case "event35": return event.payload35;
case "event36": return event.payload36;
case "event37": return event.payload37;
case "event38": return event.payload38;
case "event39": return event.payload39;
case "event40": return event.payload40;
case "event41": return event.payload41;
case "event42": return event.payload42;
case "event43": return event.payload43;
case "event44": return event.payload44;
case "event45": return event.payload45;
case "event46": return event.payload46;
case "event47": return event.payload47;
case "event48": return event.payload48;
case "event49": return event.payload49;
case "event50": return event.payload50;
case "event51": return event.payload51;
case "event52": return event.payload52;
case "event53": return event.payload53;
case "event54": return event.payload54;
case "event55": return event.payload55;
case "event56": return event.payload56;
case "event57": return event.payload57;
case "event58": return event.payload58;
case "event59": return event.payload59;
case "event60": return event.payload60;
case "event61": return event.payload61;
case "event62": return event.payload62;
case "event63": return event.payload63;
case "event64": return event.payload64;
case "event65": return event.payload65;
case "event66": return event.payload66;
case "event67": return event.payload67;
case "event68": return event.payload68;
case "event69": return event.payload69;
case "event70": return event.payload70;
case "event71": return event.payload71;
case "event72": return event.payload72;
case "event73": return event.payload73;
case "event74": return event.payload74;
case "event75": return event.payload75;
case "event76": return event.payload76;
case "event77": return event.payload77;
case "event78": return event.payload78;
case "event79": return event.payload79;
case "event80": return event.payload80;
case "event81": return event.payload81;
case "event82": return event.payload82;
case "event83": return event.payload83;
case "event84": return event.payload84;
case "event85": return event.payload85;
case "event86": return event.payload86;
case "event87": return event.payload87;
case "event88": return event.payload88;
case "event89": return event.payload89;
case "event90": return event.payload90;
case "event91": return event.payload91;
case "event92": return event.payload92;
case "event93": return event.payload93;
case "event94": return event.payload94;
case "event95": return event.payload95;
case "event96": return event.payload96;
case "event97": return event.payload97;
case "event98": return event.payload98;
case "event99": return event.payload99;
default: throw new Error("unreachable");
}
}
function isEvent0(e: StressEvent): e is Extract<StressEvent, { type: "event0" }> {
return e.type === "event0";
}
function isEvent10(e: StressEvent): e is Extract<StressEvent, { type: "event10" }> {
return e.type === "event10";
}
function isEvent20(e: StressEvent): e is Extract<StressEvent, { type: "event20" }> {
return e.type === "event20";
}
function isEvent30(e: StressEvent): e is Extract<StressEvent, { type: "event30" }> {
return e.type === "event30";
}
function isEvent40(e: StressEvent): e is Extract<StressEvent, { type: "event40" }> {
return e.type === "event40";
}
function isEvent50(e: StressEvent): e is Extract<StressEvent, { type: "event50" }> {
return e.type === "event50";
}
function isEvent60(e: StressEvent): e is Extract<StressEvent, { type: "event60" }> {
return e.type === "event60";
}
function isEvent70(e: StressEvent): e is Extract<StressEvent, { type: "event70" }> {
return e.type === "event70";
}
function isEvent80(e: StressEvent): e is Extract<StressEvent, { type: "event80" }> {
return e.type === "event80";
}
function isEvent90(e: StressEvent): e is Extract<StressEvent, { type: "event90" }> {
return e.type === "event90";
}