CFA branches=150

tsz is 1.1x faster 893 lines 27 KB

Timing

tsz
839.01ms
tsgo
897.70ms

Files

// Control flow analysis stress test

type Entity =
  | { kind: "type0"; data0: string; common: number }
  | { kind: "type1"; data1: string; common: number }
  | { kind: "type2"; data2: string; common: number }
  | { kind: "type3"; data3: string; common: number }
  | { kind: "type4"; data4: string; common: number }
  | { kind: "type5"; data5: string; common: number }
  | { kind: "type6"; data6: string; common: number }
  | { kind: "type7"; data7: string; common: number }
  | { kind: "type8"; data8: string; common: number }
  | { kind: "type9"; data9: string; common: number }
  | { kind: "type10"; data10: string; common: number }
  | { kind: "type11"; data11: string; common: number }
  | { kind: "type12"; data12: string; common: number }
  | { kind: "type13"; data13: string; common: number }
  | { kind: "type14"; data14: string; common: number }
  | { kind: "type15"; data15: string; common: number }
  | { kind: "type16"; data16: string; common: number }
  | { kind: "type17"; data17: string; common: number }
  | { kind: "type18"; data18: string; common: number }
  | { kind: "type19"; data19: string; common: number }
  | { kind: "type20"; data20: string; common: number }
  | { kind: "type21"; data21: string; common: number }
  | { kind: "type22"; data22: string; common: number }
  | { kind: "type23"; data23: string; common: number }
  | { kind: "type24"; data24: string; common: number }
  | { kind: "type25"; data25: string; common: number }
  | { kind: "type26"; data26: string; common: number }
  | { kind: "type27"; data27: string; common: number }
  | { kind: "type28"; data28: string; common: number }
  | { kind: "type29"; data29: string; common: number }
  | { kind: "type30"; data30: string; common: number }
  | { kind: "type31"; data31: string; common: number }
  | { kind: "type32"; data32: string; common: number }
  | { kind: "type33"; data33: string; common: number }
  | { kind: "type34"; data34: string; common: number }
  | { kind: "type35"; data35: string; common: number }
  | { kind: "type36"; data36: string; common: number }
  | { kind: "type37"; data37: string; common: number }
  | { kind: "type38"; data38: string; common: number }
  | { kind: "type39"; data39: string; common: number }
  | { kind: "type40"; data40: string; common: number }
  | { kind: "type41"; data41: string; common: number }
  | { kind: "type42"; data42: string; common: number }
  | { kind: "type43"; data43: string; common: number }
  | { kind: "type44"; data44: string; common: number }
  | { kind: "type45"; data45: string; common: number }
  | { kind: "type46"; data46: string; common: number }
  | { kind: "type47"; data47: string; common: number }
  | { kind: "type48"; data48: string; common: number }
  | { kind: "type49"; data49: string; common: number }
  | { kind: "type50"; data50: string; common: number }
  | { kind: "type51"; data51: string; common: number }
  | { kind: "type52"; data52: string; common: number }
  | { kind: "type53"; data53: string; common: number }
  | { kind: "type54"; data54: string; common: number }
  | { kind: "type55"; data55: string; common: number }
  | { kind: "type56"; data56: string; common: number }
  | { kind: "type57"; data57: string; common: number }
  | { kind: "type58"; data58: string; common: number }
  | { kind: "type59"; data59: string; common: number }
  | { kind: "type60"; data60: string; common: number }
  | { kind: "type61"; data61: string; common: number }
  | { kind: "type62"; data62: string; common: number }
  | { kind: "type63"; data63: string; common: number }
  | { kind: "type64"; data64: string; common: number }
  | { kind: "type65"; data65: string; common: number }
  | { kind: "type66"; data66: string; common: number }
  | { kind: "type67"; data67: string; common: number }
  | { kind: "type68"; data68: string; common: number }
  | { kind: "type69"; data69: string; common: number }
  | { kind: "type70"; data70: string; common: number }
  | { kind: "type71"; data71: string; common: number }
  | { kind: "type72"; data72: string; common: number }
  | { kind: "type73"; data73: string; common: number }
  | { kind: "type74"; data74: string; common: number }
  | { kind: "type75"; data75: string; common: number }
  | { kind: "type76"; data76: string; common: number }
  | { kind: "type77"; data77: string; common: number }
  | { kind: "type78"; data78: string; common: number }
  | { kind: "type79"; data79: string; common: number }
  | { kind: "type80"; data80: string; common: number }
  | { kind: "type81"; data81: string; common: number }
  | { kind: "type82"; data82: string; common: number }
  | { kind: "type83"; data83: string; common: number }
  | { kind: "type84"; data84: string; common: number }
  | { kind: "type85"; data85: string; common: number }
  | { kind: "type86"; data86: string; common: number }
  | { kind: "type87"; data87: string; common: number }
  | { kind: "type88"; data88: string; common: number }
  | { kind: "type89"; data89: string; common: number }
  | { kind: "type90"; data90: string; common: number }
  | { kind: "type91"; data91: string; common: number }
  | { kind: "type92"; data92: string; common: number }
  | { kind: "type93"; data93: string; common: number }
  | { kind: "type94"; data94: string; common: number }
  | { kind: "type95"; data95: string; common: number }
  | { kind: "type96"; data96: string; common: number }
  | { kind: "type97"; data97: string; common: number }
  | { kind: "type98"; data98: string; common: number }
  | { kind: "type99"; data99: string; common: number }
  | { kind: "type100"; data100: string; common: number }
  | { kind: "type101"; data101: string; common: number }
  | { kind: "type102"; data102: string; common: number }
  | { kind: "type103"; data103: string; common: number }
  | { kind: "type104"; data104: string; common: number }
  | { kind: "type105"; data105: string; common: number }
  | { kind: "type106"; data106: string; common: number }
  | { kind: "type107"; data107: string; common: number }
  | { kind: "type108"; data108: string; common: number }
  | { kind: "type109"; data109: string; common: number }
  | { kind: "type110"; data110: string; common: number }
  | { kind: "type111"; data111: string; common: number }
  | { kind: "type112"; data112: string; common: number }
  | { kind: "type113"; data113: string; common: number }
  | { kind: "type114"; data114: string; common: number }
  | { kind: "type115"; data115: string; common: number }
  | { kind: "type116"; data116: string; common: number }
  | { kind: "type117"; data117: string; common: number }
  | { kind: "type118"; data118: string; common: number }
  | { kind: "type119"; data119: string; common: number }
  | { kind: "type120"; data120: string; common: number }
  | { kind: "type121"; data121: string; common: number }
  | { kind: "type122"; data122: string; common: number }
  | { kind: "type123"; data123: string; common: number }
  | { kind: "type124"; data124: string; common: number }
  | { kind: "type125"; data125: string; common: number }
  | { kind: "type126"; data126: string; common: number }
  | { kind: "type127"; data127: string; common: number }
  | { kind: "type128"; data128: string; common: number }
  | { kind: "type129"; data129: string; common: number }
  | { kind: "type130"; data130: string; common: number }
  | { kind: "type131"; data131: string; common: number }
  | { kind: "type132"; data132: string; common: number }
  | { kind: "type133"; data133: string; common: number }
  | { kind: "type134"; data134: string; common: number }
  | { kind: "type135"; data135: string; common: number }
  | { kind: "type136"; data136: string; common: number }
  | { kind: "type137"; data137: string; common: number }
  | { kind: "type138"; data138: string; common: number }
  | { kind: "type139"; data139: string; common: number }
  | { kind: "type140"; data140: string; common: number }
  | { kind: "type141"; data141: string; common: number }
  | { kind: "type142"; data142: string; common: number }
  | { kind: "type143"; data143: string; common: number }
  | { kind: "type144"; data144: string; common: number }
  | { kind: "type145"; data145: string; common: number }
  | { kind: "type146"; data146: string; common: number }
  | { kind: "type147"; data147: string; common: number }
  | { kind: "type148"; data148: string; common: number }
  | { kind: "type149"; data149: string; common: number };

function processEntity(e: Entity): string {
  switch (e.kind) {
    case "type0": return e.data0;
    case "type1": return e.data1;
    case "type2": return e.data2;
    case "type3": return e.data3;
    case "type4": return e.data4;
    case "type5": return e.data5;
    case "type6": return e.data6;
    case "type7": return e.data7;
    case "type8": return e.data8;
    case "type9": return e.data9;
    case "type10": return e.data10;
    case "type11": return e.data11;
    case "type12": return e.data12;
    case "type13": return e.data13;
    case "type14": return e.data14;
    case "type15": return e.data15;
    case "type16": return e.data16;
    case "type17": return e.data17;
    case "type18": return e.data18;
    case "type19": return e.data19;
    case "type20": return e.data20;
    case "type21": return e.data21;
    case "type22": return e.data22;
    case "type23": return e.data23;
    case "type24": return e.data24;
    case "type25": return e.data25;
    case "type26": return e.data26;
    case "type27": return e.data27;
    case "type28": return e.data28;
    case "type29": return e.data29;
    case "type30": return e.data30;
    case "type31": return e.data31;
    case "type32": return e.data32;
    case "type33": return e.data33;
    case "type34": return e.data34;
    case "type35": return e.data35;
    case "type36": return e.data36;
    case "type37": return e.data37;
    case "type38": return e.data38;
    case "type39": return e.data39;
    case "type40": return e.data40;
    case "type41": return e.data41;
    case "type42": return e.data42;
    case "type43": return e.data43;
    case "type44": return e.data44;
    case "type45": return e.data45;
    case "type46": return e.data46;
    case "type47": return e.data47;
    case "type48": return e.data48;
    case "type49": return e.data49;
    case "type50": return e.data50;
    case "type51": return e.data51;
    case "type52": return e.data52;
    case "type53": return e.data53;
    case "type54": return e.data54;
    case "type55": return e.data55;
    case "type56": return e.data56;
    case "type57": return e.data57;
    case "type58": return e.data58;
    case "type59": return e.data59;
    case "type60": return e.data60;
    case "type61": return e.data61;
    case "type62": return e.data62;
    case "type63": return e.data63;
    case "type64": return e.data64;
    case "type65": return e.data65;
    case "type66": return e.data66;
    case "type67": return e.data67;
    case "type68": return e.data68;
    case "type69": return e.data69;
    case "type70": return e.data70;
    case "type71": return e.data71;
    case "type72": return e.data72;
    case "type73": return e.data73;
    case "type74": return e.data74;
    case "type75": return e.data75;
    case "type76": return e.data76;
    case "type77": return e.data77;
    case "type78": return e.data78;
    case "type79": return e.data79;
    case "type80": return e.data80;
    case "type81": return e.data81;
    case "type82": return e.data82;
    case "type83": return e.data83;
    case "type84": return e.data84;
    case "type85": return e.data85;
    case "type86": return e.data86;
    case "type87": return e.data87;
    case "type88": return e.data88;
    case "type89": return e.data89;
    case "type90": return e.data90;
    case "type91": return e.data91;
    case "type92": return e.data92;
    case "type93": return e.data93;
    case "type94": return e.data94;
    case "type95": return e.data95;
    case "type96": return e.data96;
    case "type97": return e.data97;
    case "type98": return e.data98;
    case "type99": return e.data99;
    case "type100": return e.data100;
    case "type101": return e.data101;
    case "type102": return e.data102;
    case "type103": return e.data103;
    case "type104": return e.data104;
    case "type105": return e.data105;
    case "type106": return e.data106;
    case "type107": return e.data107;
    case "type108": return e.data108;
    case "type109": return e.data109;
    case "type110": return e.data110;
    case "type111": return e.data111;
    case "type112": return e.data112;
    case "type113": return e.data113;
    case "type114": return e.data114;
    case "type115": return e.data115;
    case "type116": return e.data116;
    case "type117": return e.data117;
    case "type118": return e.data118;
    case "type119": return e.data119;
    case "type120": return e.data120;
    case "type121": return e.data121;
    case "type122": return e.data122;
    case "type123": return e.data123;
    case "type124": return e.data124;
    case "type125": return e.data125;
    case "type126": return e.data126;
    case "type127": return e.data127;
    case "type128": return e.data128;
    case "type129": return e.data129;
    case "type130": return e.data130;
    case "type131": return e.data131;
    case "type132": return e.data132;
    case "type133": return e.data133;
    case "type134": return e.data134;
    case "type135": return e.data135;
    case "type136": return e.data136;
    case "type137": return e.data137;
    case "type138": return e.data138;
    case "type139": return e.data139;
    case "type140": return e.data140;
    case "type141": return e.data141;
    case "type142": return e.data142;
    case "type143": return e.data143;
    case "type144": return e.data144;
    case "type145": return e.data145;
    case "type146": return e.data146;
    case "type147": return e.data147;
    case "type148": return e.data148;
    case "type149": return e.data149;
    default: throw new Error("unreachable");
  }
}

function processWithIf(e: Entity): string {
  if (e.kind === "type0") return e.data0;
  if (e.kind === "type1") return e.data1;
  if (e.kind === "type2") return e.data2;
  if (e.kind === "type3") return e.data3;
  if (e.kind === "type4") return e.data4;
  if (e.kind === "type5") return e.data5;
  if (e.kind === "type6") return e.data6;
  if (e.kind === "type7") return e.data7;
  if (e.kind === "type8") return e.data8;
  if (e.kind === "type9") return e.data9;
  if (e.kind === "type10") return e.data10;
  if (e.kind === "type11") return e.data11;
  if (e.kind === "type12") return e.data12;
  if (e.kind === "type13") return e.data13;
  if (e.kind === "type14") return e.data14;
  if (e.kind === "type15") return e.data15;
  if (e.kind === "type16") return e.data16;
  if (e.kind === "type17") return e.data17;
  if (e.kind === "type18") return e.data18;
  if (e.kind === "type19") return e.data19;
  if (e.kind === "type20") return e.data20;
  if (e.kind === "type21") return e.data21;
  if (e.kind === "type22") return e.data22;
  if (e.kind === "type23") return e.data23;
  if (e.kind === "type24") return e.data24;
  if (e.kind === "type25") return e.data25;
  if (e.kind === "type26") return e.data26;
  if (e.kind === "type27") return e.data27;
  if (e.kind === "type28") return e.data28;
  if (e.kind === "type29") return e.data29;
  if (e.kind === "type30") return e.data30;
  if (e.kind === "type31") return e.data31;
  if (e.kind === "type32") return e.data32;
  if (e.kind === "type33") return e.data33;
  if (e.kind === "type34") return e.data34;
  if (e.kind === "type35") return e.data35;
  if (e.kind === "type36") return e.data36;
  if (e.kind === "type37") return e.data37;
  if (e.kind === "type38") return e.data38;
  if (e.kind === "type39") return e.data39;
  if (e.kind === "type40") return e.data40;
  if (e.kind === "type41") return e.data41;
  if (e.kind === "type42") return e.data42;
  if (e.kind === "type43") return e.data43;
  if (e.kind === "type44") return e.data44;
  if (e.kind === "type45") return e.data45;
  if (e.kind === "type46") return e.data46;
  if (e.kind === "type47") return e.data47;
  if (e.kind === "type48") return e.data48;
  if (e.kind === "type49") return e.data49;
  if (e.kind === "type50") return e.data50;
  if (e.kind === "type51") return e.data51;
  if (e.kind === "type52") return e.data52;
  if (e.kind === "type53") return e.data53;
  if (e.kind === "type54") return e.data54;
  if (e.kind === "type55") return e.data55;
  if (e.kind === "type56") return e.data56;
  if (e.kind === "type57") return e.data57;
  if (e.kind === "type58") return e.data58;
  if (e.kind === "type59") return e.data59;
  if (e.kind === "type60") return e.data60;
  if (e.kind === "type61") return e.data61;
  if (e.kind === "type62") return e.data62;
  if (e.kind === "type63") return e.data63;
  if (e.kind === "type64") return e.data64;
  if (e.kind === "type65") return e.data65;
  if (e.kind === "type66") return e.data66;
  if (e.kind === "type67") return e.data67;
  if (e.kind === "type68") return e.data68;
  if (e.kind === "type69") return e.data69;
  if (e.kind === "type70") return e.data70;
  if (e.kind === "type71") return e.data71;
  if (e.kind === "type72") return e.data72;
  if (e.kind === "type73") return e.data73;
  if (e.kind === "type74") return e.data74;
  if (e.kind === "type75") return e.data75;
  if (e.kind === "type76") return e.data76;
  if (e.kind === "type77") return e.data77;
  if (e.kind === "type78") return e.data78;
  if (e.kind === "type79") return e.data79;
  if (e.kind === "type80") return e.data80;
  if (e.kind === "type81") return e.data81;
  if (e.kind === "type82") return e.data82;
  if (e.kind === "type83") return e.data83;
  if (e.kind === "type84") return e.data84;
  if (e.kind === "type85") return e.data85;
  if (e.kind === "type86") return e.data86;
  if (e.kind === "type87") return e.data87;
  if (e.kind === "type88") return e.data88;
  if (e.kind === "type89") return e.data89;
  if (e.kind === "type90") return e.data90;
  if (e.kind === "type91") return e.data91;
  if (e.kind === "type92") return e.data92;
  if (e.kind === "type93") return e.data93;
  if (e.kind === "type94") return e.data94;
  if (e.kind === "type95") return e.data95;
  if (e.kind === "type96") return e.data96;
  if (e.kind === "type97") return e.data97;
  if (e.kind === "type98") return e.data98;
  if (e.kind === "type99") return e.data99;
  if (e.kind === "type100") return e.data100;
  if (e.kind === "type101") return e.data101;
  if (e.kind === "type102") return e.data102;
  if (e.kind === "type103") return e.data103;
  if (e.kind === "type104") return e.data104;
  if (e.kind === "type105") return e.data105;
  if (e.kind === "type106") return e.data106;
  if (e.kind === "type107") return e.data107;
  if (e.kind === "type108") return e.data108;
  if (e.kind === "type109") return e.data109;
  if (e.kind === "type110") return e.data110;
  if (e.kind === "type111") return e.data111;
  if (e.kind === "type112") return e.data112;
  if (e.kind === "type113") return e.data113;
  if (e.kind === "type114") return e.data114;
  if (e.kind === "type115") return e.data115;
  if (e.kind === "type116") return e.data116;
  if (e.kind === "type117") return e.data117;
  if (e.kind === "type118") return e.data118;
  if (e.kind === "type119") return e.data119;
  if (e.kind === "type120") return e.data120;
  if (e.kind === "type121") return e.data121;
  if (e.kind === "type122") return e.data122;
  if (e.kind === "type123") return e.data123;
  if (e.kind === "type124") return e.data124;
  if (e.kind === "type125") return e.data125;
  if (e.kind === "type126") return e.data126;
  if (e.kind === "type127") return e.data127;
  if (e.kind === "type128") return e.data128;
  if (e.kind === "type129") return e.data129;
  if (e.kind === "type130") return e.data130;
  if (e.kind === "type131") return e.data131;
  if (e.kind === "type132") return e.data132;
  if (e.kind === "type133") return e.data133;
  if (e.kind === "type134") return e.data134;
  if (e.kind === "type135") return e.data135;
  if (e.kind === "type136") return e.data136;
  if (e.kind === "type137") return e.data137;
  if (e.kind === "type138") return e.data138;
  if (e.kind === "type139") return e.data139;
  if (e.kind === "type140") return e.data140;
  if (e.kind === "type141") return e.data141;
  if (e.kind === "type142") return e.data142;
  if (e.kind === "type143") return e.data143;
  if (e.kind === "type144") return e.data144;
  if (e.kind === "type145") return e.data145;
  if (e.kind === "type146") return e.data146;
  if (e.kind === "type147") return e.data147;
  if (e.kind === "type148") return e.data148;
  if (e.kind === "type149") return e.data149;
  return processEntity(e);
}