200 union members
tsz is 1.4x faster 491 lines 24 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 }
| { type: "event100"; payload100: string; timestamp: number }
| { type: "event101"; payload101: string; timestamp: number }
| { type: "event102"; payload102: string; timestamp: number }
| { type: "event103"; payload103: string; timestamp: number }
| { type: "event104"; payload104: string; timestamp: number }
| { type: "event105"; payload105: string; timestamp: number }
| { type: "event106"; payload106: string; timestamp: number }
| { type: "event107"; payload107: string; timestamp: number }
| { type: "event108"; payload108: string; timestamp: number }
| { type: "event109"; payload109: string; timestamp: number }
| { type: "event110"; payload110: string; timestamp: number }
| { type: "event111"; payload111: string; timestamp: number }
| { type: "event112"; payload112: string; timestamp: number }
| { type: "event113"; payload113: string; timestamp: number }
| { type: "event114"; payload114: string; timestamp: number }
| { type: "event115"; payload115: string; timestamp: number }
| { type: "event116"; payload116: string; timestamp: number }
| { type: "event117"; payload117: string; timestamp: number }
| { type: "event118"; payload118: string; timestamp: number }
| { type: "event119"; payload119: string; timestamp: number }
| { type: "event120"; payload120: string; timestamp: number }
| { type: "event121"; payload121: string; timestamp: number }
| { type: "event122"; payload122: string; timestamp: number }
| { type: "event123"; payload123: string; timestamp: number }
| { type: "event124"; payload124: string; timestamp: number }
| { type: "event125"; payload125: string; timestamp: number }
| { type: "event126"; payload126: string; timestamp: number }
| { type: "event127"; payload127: string; timestamp: number }
| { type: "event128"; payload128: string; timestamp: number }
| { type: "event129"; payload129: string; timestamp: number }
| { type: "event130"; payload130: string; timestamp: number }
| { type: "event131"; payload131: string; timestamp: number }
| { type: "event132"; payload132: string; timestamp: number }
| { type: "event133"; payload133: string; timestamp: number }
| { type: "event134"; payload134: string; timestamp: number }
| { type: "event135"; payload135: string; timestamp: number }
| { type: "event136"; payload136: string; timestamp: number }
| { type: "event137"; payload137: string; timestamp: number }
| { type: "event138"; payload138: string; timestamp: number }
| { type: "event139"; payload139: string; timestamp: number }
| { type: "event140"; payload140: string; timestamp: number }
| { type: "event141"; payload141: string; timestamp: number }
| { type: "event142"; payload142: string; timestamp: number }
| { type: "event143"; payload143: string; timestamp: number }
| { type: "event144"; payload144: string; timestamp: number }
| { type: "event145"; payload145: string; timestamp: number }
| { type: "event146"; payload146: string; timestamp: number }
| { type: "event147"; payload147: string; timestamp: number }
| { type: "event148"; payload148: string; timestamp: number }
| { type: "event149"; payload149: string; timestamp: number }
| { type: "event150"; payload150: string; timestamp: number }
| { type: "event151"; payload151: string; timestamp: number }
| { type: "event152"; payload152: string; timestamp: number }
| { type: "event153"; payload153: string; timestamp: number }
| { type: "event154"; payload154: string; timestamp: number }
| { type: "event155"; payload155: string; timestamp: number }
| { type: "event156"; payload156: string; timestamp: number }
| { type: "event157"; payload157: string; timestamp: number }
| { type: "event158"; payload158: string; timestamp: number }
| { type: "event159"; payload159: string; timestamp: number }
| { type: "event160"; payload160: string; timestamp: number }
| { type: "event161"; payload161: string; timestamp: number }
| { type: "event162"; payload162: string; timestamp: number }
| { type: "event163"; payload163: string; timestamp: number }
| { type: "event164"; payload164: string; timestamp: number }
| { type: "event165"; payload165: string; timestamp: number }
| { type: "event166"; payload166: string; timestamp: number }
| { type: "event167"; payload167: string; timestamp: number }
| { type: "event168"; payload168: string; timestamp: number }
| { type: "event169"; payload169: string; timestamp: number }
| { type: "event170"; payload170: string; timestamp: number }
| { type: "event171"; payload171: string; timestamp: number }
| { type: "event172"; payload172: string; timestamp: number }
| { type: "event173"; payload173: string; timestamp: number }
| { type: "event174"; payload174: string; timestamp: number }
| { type: "event175"; payload175: string; timestamp: number }
| { type: "event176"; payload176: string; timestamp: number }
| { type: "event177"; payload177: string; timestamp: number }
| { type: "event178"; payload178: string; timestamp: number }
| { type: "event179"; payload179: string; timestamp: number }
| { type: "event180"; payload180: string; timestamp: number }
| { type: "event181"; payload181: string; timestamp: number }
| { type: "event182"; payload182: string; timestamp: number }
| { type: "event183"; payload183: string; timestamp: number }
| { type: "event184"; payload184: string; timestamp: number }
| { type: "event185"; payload185: string; timestamp: number }
| { type: "event186"; payload186: string; timestamp: number }
| { type: "event187"; payload187: string; timestamp: number }
| { type: "event188"; payload188: string; timestamp: number }
| { type: "event189"; payload189: string; timestamp: number }
| { type: "event190"; payload190: string; timestamp: number }
| { type: "event191"; payload191: string; timestamp: number }
| { type: "event192"; payload192: string; timestamp: number }
| { type: "event193"; payload193: string; timestamp: number }
| { type: "event194"; payload194: string; timestamp: number }
| { type: "event195"; payload195: string; timestamp: number }
| { type: "event196"; payload196: string; timestamp: number }
| { type: "event197"; payload197: string; timestamp: number }
| { type: "event198"; payload198: string; timestamp: number }
| { type: "event199"; payload199: 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;
case "event100": return event.payload100;
case "event101": return event.payload101;
case "event102": return event.payload102;
case "event103": return event.payload103;
case "event104": return event.payload104;
case "event105": return event.payload105;
case "event106": return event.payload106;
case "event107": return event.payload107;
case "event108": return event.payload108;
case "event109": return event.payload109;
case "event110": return event.payload110;
case "event111": return event.payload111;
case "event112": return event.payload112;
case "event113": return event.payload113;
case "event114": return event.payload114;
case "event115": return event.payload115;
case "event116": return event.payload116;
case "event117": return event.payload117;
case "event118": return event.payload118;
case "event119": return event.payload119;
case "event120": return event.payload120;
case "event121": return event.payload121;
case "event122": return event.payload122;
case "event123": return event.payload123;
case "event124": return event.payload124;
case "event125": return event.payload125;
case "event126": return event.payload126;
case "event127": return event.payload127;
case "event128": return event.payload128;
case "event129": return event.payload129;
case "event130": return event.payload130;
case "event131": return event.payload131;
case "event132": return event.payload132;
case "event133": return event.payload133;
case "event134": return event.payload134;
case "event135": return event.payload135;
case "event136": return event.payload136;
case "event137": return event.payload137;
case "event138": return event.payload138;
case "event139": return event.payload139;
case "event140": return event.payload140;
case "event141": return event.payload141;
case "event142": return event.payload142;
case "event143": return event.payload143;
case "event144": return event.payload144;
case "event145": return event.payload145;
case "event146": return event.payload146;
case "event147": return event.payload147;
case "event148": return event.payload148;
case "event149": return event.payload149;
case "event150": return event.payload150;
case "event151": return event.payload151;
case "event152": return event.payload152;
case "event153": return event.payload153;
case "event154": return event.payload154;
case "event155": return event.payload155;
case "event156": return event.payload156;
case "event157": return event.payload157;
case "event158": return event.payload158;
case "event159": return event.payload159;
case "event160": return event.payload160;
case "event161": return event.payload161;
case "event162": return event.payload162;
case "event163": return event.payload163;
case "event164": return event.payload164;
case "event165": return event.payload165;
case "event166": return event.payload166;
case "event167": return event.payload167;
case "event168": return event.payload168;
case "event169": return event.payload169;
case "event170": return event.payload170;
case "event171": return event.payload171;
case "event172": return event.payload172;
case "event173": return event.payload173;
case "event174": return event.payload174;
case "event175": return event.payload175;
case "event176": return event.payload176;
case "event177": return event.payload177;
case "event178": return event.payload178;
case "event179": return event.payload179;
case "event180": return event.payload180;
case "event181": return event.payload181;
case "event182": return event.payload182;
case "event183": return event.payload183;
case "event184": return event.payload184;
case "event185": return event.payload185;
case "event186": return event.payload186;
case "event187": return event.payload187;
case "event188": return event.payload188;
case "event189": return event.payload189;
case "event190": return event.payload190;
case "event191": return event.payload191;
case "event192": return event.payload192;
case "event193": return event.payload193;
case "event194": return event.payload194;
case "event195": return event.payload195;
case "event196": return event.payload196;
case "event197": return event.payload197;
case "event198": return event.payload198;
case "event199": return event.payload199;
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";
}
function isEvent100(e: StressEvent): e is Extract<StressEvent, { type: "event100" }> {
return e.type === "event100";
}
function isEvent110(e: StressEvent): e is Extract<StressEvent, { type: "event110" }> {
return e.type === "event110";
}
function isEvent120(e: StressEvent): e is Extract<StressEvent, { type: "event120" }> {
return e.type === "event120";
}
function isEvent130(e: StressEvent): e is Extract<StressEvent, { type: "event130" }> {
return e.type === "event130";
}
function isEvent140(e: StressEvent): e is Extract<StressEvent, { type: "event140" }> {
return e.type === "event140";
}
function isEvent150(e: StressEvent): e is Extract<StressEvent, { type: "event150" }> {
return e.type === "event150";
}
function isEvent160(e: StressEvent): e is Extract<StressEvent, { type: "event160" }> {
return e.type === "event160";
}
function isEvent170(e: StressEvent): e is Extract<StressEvent, { type: "event170" }> {
return e.type === "event170";
}
function isEvent180(e: StressEvent): e is Extract<StressEvent, { type: "event180" }> {
return e.type === "event180";
}
function isEvent190(e: StressEvent): e is Extract<StressEvent, { type: "event190" }> {
return e.type === "event190";
}