BCT candidates=100

tsz is 3.2x faster 228 lines 17 KB

Timing

tsz
265.44ms
tsgo
840.72ms

Files

// Best Common Type O(N^2) stress test

class Base { base: string = ""; }
class Derived0 extends Base { prop0: number = 0; }
class Derived1 extends Base { prop1: number = 1; }
class Derived2 extends Base { prop2: number = 2; }
class Derived3 extends Base { prop3: number = 3; }
class Derived4 extends Base { prop4: number = 4; }
class Derived5 extends Base { prop5: number = 5; }
class Derived6 extends Base { prop6: number = 6; }
class Derived7 extends Base { prop7: number = 7; }
class Derived8 extends Base { prop8: number = 8; }
class Derived9 extends Base { prop9: number = 9; }
class Derived10 extends Base { prop10: number = 10; }
class Derived11 extends Base { prop11: number = 11; }
class Derived12 extends Base { prop12: number = 12; }
class Derived13 extends Base { prop13: number = 13; }
class Derived14 extends Base { prop14: number = 14; }
class Derived15 extends Base { prop15: number = 15; }
class Derived16 extends Base { prop16: number = 16; }
class Derived17 extends Base { prop17: number = 17; }
class Derived18 extends Base { prop18: number = 18; }
class Derived19 extends Base { prop19: number = 19; }
class Derived20 extends Base { prop20: number = 20; }
class Derived21 extends Base { prop21: number = 21; }
class Derived22 extends Base { prop22: number = 22; }
class Derived23 extends Base { prop23: number = 23; }
class Derived24 extends Base { prop24: number = 24; }
class Derived25 extends Base { prop25: number = 25; }
class Derived26 extends Base { prop26: number = 26; }
class Derived27 extends Base { prop27: number = 27; }
class Derived28 extends Base { prop28: number = 28; }
class Derived29 extends Base { prop29: number = 29; }
class Derived30 extends Base { prop30: number = 30; }
class Derived31 extends Base { prop31: number = 31; }
class Derived32 extends Base { prop32: number = 32; }
class Derived33 extends Base { prop33: number = 33; }
class Derived34 extends Base { prop34: number = 34; }
class Derived35 extends Base { prop35: number = 35; }
class Derived36 extends Base { prop36: number = 36; }
class Derived37 extends Base { prop37: number = 37; }
class Derived38 extends Base { prop38: number = 38; }
class Derived39 extends Base { prop39: number = 39; }
class Derived40 extends Base { prop40: number = 40; }
class Derived41 extends Base { prop41: number = 41; }
class Derived42 extends Base { prop42: number = 42; }
class Derived43 extends Base { prop43: number = 43; }
class Derived44 extends Base { prop44: number = 44; }
class Derived45 extends Base { prop45: number = 45; }
class Derived46 extends Base { prop46: number = 46; }
class Derived47 extends Base { prop47: number = 47; }
class Derived48 extends Base { prop48: number = 48; }
class Derived49 extends Base { prop49: number = 49; }
class Derived50 extends Base { prop50: number = 50; }
class Derived51 extends Base { prop51: number = 51; }
class Derived52 extends Base { prop52: number = 52; }
class Derived53 extends Base { prop53: number = 53; }
class Derived54 extends Base { prop54: number = 54; }
class Derived55 extends Base { prop55: number = 55; }
class Derived56 extends Base { prop56: number = 56; }
class Derived57 extends Base { prop57: number = 57; }
class Derived58 extends Base { prop58: number = 58; }
class Derived59 extends Base { prop59: number = 59; }
class Derived60 extends Base { prop60: number = 60; }
class Derived61 extends Base { prop61: number = 61; }
class Derived62 extends Base { prop62: number = 62; }
class Derived63 extends Base { prop63: number = 63; }
class Derived64 extends Base { prop64: number = 64; }
class Derived65 extends Base { prop65: number = 65; }
class Derived66 extends Base { prop66: number = 66; }
class Derived67 extends Base { prop67: number = 67; }
class Derived68 extends Base { prop68: number = 68; }
class Derived69 extends Base { prop69: number = 69; }
class Derived70 extends Base { prop70: number = 70; }
class Derived71 extends Base { prop71: number = 71; }
class Derived72 extends Base { prop72: number = 72; }
class Derived73 extends Base { prop73: number = 73; }
class Derived74 extends Base { prop74: number = 74; }
class Derived75 extends Base { prop75: number = 75; }
class Derived76 extends Base { prop76: number = 76; }
class Derived77 extends Base { prop77: number = 77; }
class Derived78 extends Base { prop78: number = 78; }
class Derived79 extends Base { prop79: number = 79; }
class Derived80 extends Base { prop80: number = 80; }
class Derived81 extends Base { prop81: number = 81; }
class Derived82 extends Base { prop82: number = 82; }
class Derived83 extends Base { prop83: number = 83; }
class Derived84 extends Base { prop84: number = 84; }
class Derived85 extends Base { prop85: number = 85; }
class Derived86 extends Base { prop86: number = 86; }
class Derived87 extends Base { prop87: number = 87; }
class Derived88 extends Base { prop88: number = 88; }
class Derived89 extends Base { prop89: number = 89; }
class Derived90 extends Base { prop90: number = 90; }
class Derived91 extends Base { prop91: number = 91; }
class Derived92 extends Base { prop92: number = 92; }
class Derived93 extends Base { prop93: number = 93; }
class Derived94 extends Base { prop94: number = 94; }
class Derived95 extends Base { prop95: number = 95; }
class Derived96 extends Base { prop96: number = 96; }
class Derived97 extends Base { prop97: number = 97; }
class Derived98 extends Base { prop98: number = 98; }
class Derived99 extends Base { prop99: number = 99; }

const items = [new Derived0(), new Derived1(), new Derived2(), new Derived3(), new Derived4(), new Derived5(), new Derived6(), new Derived7(), new Derived8(), new Derived9(), new Derived10(), new Derived11(), new Derived12(), new Derived13(), new Derived14(), new Derived15(), new Derived16(), new Derived17(), new Derived18(), new Derived19(), new Derived20(), new Derived21(), new Derived22(), new Derived23(), new Derived24(), new Derived25(), new Derived26(), new Derived27(), new Derived28(), new Derived29(), new Derived30(), new Derived31(), new Derived32(), new Derived33(), new Derived34(), new Derived35(), new Derived36(), new Derived37(), new Derived38(), new Derived39(), new Derived40(), new Derived41(), new Derived42(), new Derived43(), new Derived44(), new Derived45(), new Derived46(), new Derived47(), new Derived48(), new Derived49(), new Derived50(), new Derived51(), new Derived52(), new Derived53(), new Derived54(), new Derived55(), new Derived56(), new Derived57(), new Derived58(), new Derived59(), new Derived60(), new Derived61(), new Derived62(), new Derived63(), new Derived64(), new Derived65(), new Derived66(), new Derived67(), new Derived68(), new Derived69(), new Derived70(), new Derived71(), new Derived72(), new Derived73(), new Derived74(), new Derived75(), new Derived76(), new Derived77(), new Derived78(), new Derived79(), new Derived80(), new Derived81(), new Derived82(), new Derived83(), new Derived84(), new Derived85(), new Derived86(), new Derived87(), new Derived88(), new Derived89(), new Derived90(), new Derived91(), new Derived92(), new Derived93(), new Derived94(), new Derived95(), new Derived96(), new Derived97(), new Derived98(), new Derived99()];
function pickOne(index: number) {
  if (index === 0) return new Derived0();
  if (index === 1) return new Derived1();
  if (index === 2) return new Derived2();
  if (index === 3) return new Derived3();
  if (index === 4) return new Derived4();
  if (index === 5) return new Derived5();
  if (index === 6) return new Derived6();
  if (index === 7) return new Derived7();
  if (index === 8) return new Derived8();
  if (index === 9) return new Derived9();
  if (index === 10) return new Derived10();
  if (index === 11) return new Derived11();
  if (index === 12) return new Derived12();
  if (index === 13) return new Derived13();
  if (index === 14) return new Derived14();
  if (index === 15) return new Derived15();
  if (index === 16) return new Derived16();
  if (index === 17) return new Derived17();
  if (index === 18) return new Derived18();
  if (index === 19) return new Derived19();
  if (index === 20) return new Derived20();
  if (index === 21) return new Derived21();
  if (index === 22) return new Derived22();
  if (index === 23) return new Derived23();
  if (index === 24) return new Derived24();
  if (index === 25) return new Derived25();
  if (index === 26) return new Derived26();
  if (index === 27) return new Derived27();
  if (index === 28) return new Derived28();
  if (index === 29) return new Derived29();
  if (index === 30) return new Derived30();
  if (index === 31) return new Derived31();
  if (index === 32) return new Derived32();
  if (index === 33) return new Derived33();
  if (index === 34) return new Derived34();
  if (index === 35) return new Derived35();
  if (index === 36) return new Derived36();
  if (index === 37) return new Derived37();
  if (index === 38) return new Derived38();
  if (index === 39) return new Derived39();
  if (index === 40) return new Derived40();
  if (index === 41) return new Derived41();
  if (index === 42) return new Derived42();
  if (index === 43) return new Derived43();
  if (index === 44) return new Derived44();
  if (index === 45) return new Derived45();
  if (index === 46) return new Derived46();
  if (index === 47) return new Derived47();
  if (index === 48) return new Derived48();
  if (index === 49) return new Derived49();
  if (index === 50) return new Derived50();
  if (index === 51) return new Derived51();
  if (index === 52) return new Derived52();
  if (index === 53) return new Derived53();
  if (index === 54) return new Derived54();
  if (index === 55) return new Derived55();
  if (index === 56) return new Derived56();
  if (index === 57) return new Derived57();
  if (index === 58) return new Derived58();
  if (index === 59) return new Derived59();
  if (index === 60) return new Derived60();
  if (index === 61) return new Derived61();
  if (index === 62) return new Derived62();
  if (index === 63) return new Derived63();
  if (index === 64) return new Derived64();
  if (index === 65) return new Derived65();
  if (index === 66) return new Derived66();
  if (index === 67) return new Derived67();
  if (index === 68) return new Derived68();
  if (index === 69) return new Derived69();
  if (index === 70) return new Derived70();
  if (index === 71) return new Derived71();
  if (index === 72) return new Derived72();
  if (index === 73) return new Derived73();
  if (index === 74) return new Derived74();
  if (index === 75) return new Derived75();
  if (index === 76) return new Derived76();
  if (index === 77) return new Derived77();
  if (index === 78) return new Derived78();
  if (index === 79) return new Derived79();
  if (index === 80) return new Derived80();
  if (index === 81) return new Derived81();
  if (index === 82) return new Derived82();
  if (index === 83) return new Derived83();
  if (index === 84) return new Derived84();
  if (index === 85) return new Derived85();
  if (index === 86) return new Derived86();
  if (index === 87) return new Derived87();
  if (index === 88) return new Derived88();
  if (index === 89) return new Derived89();
  if (index === 90) return new Derived90();
  if (index === 91) return new Derived91();
  if (index === 92) return new Derived92();
  if (index === 93) return new Derived93();
  if (index === 94) return new Derived94();
  if (index === 95) return new Derived95();
  if (index === 96) return new Derived96();
  if (index === 97) return new Derived97();
  if (index === 98) return new Derived98();
  if (index === 99) return new Derived99();
  return new Base();
}
function identity<T>(x: T): T { return x; }
const mixed = [identity(new Derived0()), identity(new Derived1()), identity(new Derived2()), identity(new Derived3()), identity(new Derived4()), identity(new Derived5()), identity(new Derived6()), identity(new Derived7()), identity(new Derived8()), identity(new Derived9()), identity(new Derived10()), identity(new Derived11()), identity(new Derived12()), identity(new Derived13()), identity(new Derived14()), identity(new Derived15()), identity(new Derived16()), identity(new Derived17()), identity(new Derived18()), identity(new Derived19()), identity(new Derived20()), identity(new Derived21()), identity(new Derived22()), identity(new Derived23()), identity(new Derived24()), identity(new Derived25()), identity(new Derived26()), identity(new Derived27()), identity(new Derived28()), identity(new Derived29()), identity(new Derived30()), identity(new Derived31()), identity(new Derived32()), identity(new Derived33()), identity(new Derived34()), identity(new Derived35()), identity(new Derived36()), identity(new Derived37()), identity(new Derived38()), identity(new Derived39()), identity(new Derived40()), identity(new Derived41()), identity(new Derived42()), identity(new Derived43()), identity(new Derived44()), identity(new Derived45()), identity(new Derived46()), identity(new Derived47()), identity(new Derived48()), identity(new Derived49()), identity(new Derived50()), identity(new Derived51()), identity(new Derived52()), identity(new Derived53()), identity(new Derived54()), identity(new Derived55()), identity(new Derived56()), identity(new Derived57()), identity(new Derived58()), identity(new Derived59()), identity(new Derived60()), identity(new Derived61()), identity(new Derived62()), identity(new Derived63()), identity(new Derived64()), identity(new Derived65()), identity(new Derived66()), identity(new Derived67()), identity(new Derived68()), identity(new Derived69()), identity(new Derived70()), identity(new Derived71()), identity(new Derived72()), identity(new Derived73()), identity(new Derived74()), identity(new Derived75()), identity(new Derived76()), identity(new Derived77()), identity(new Derived78()), identity(new Derived79()), identity(new Derived80()), identity(new Derived81()), identity(new Derived82()), identity(new Derived83()), identity(new Derived84()), identity(new Derived85()), identity(new Derived86()), identity(new Derived87()), identity(new Derived88()), identity(new Derived89()), identity(new Derived90()), identity(new Derived91()), identity(new Derived92()), identity(new Derived93()), identity(new Derived94()), identity(new Derived95()), identity(new Derived96()), identity(new Derived97()), identity(new Derived98()), identity(new Derived99())];
declare const flag: number;
const chosen = flag === 0 ? new Derived0() : flag === 1 ? new Derived1() : flag === 2 ? new Derived2() : flag === 3 ? new Derived3() : flag === 4 ? new Derived4() : flag === 5 ? new Derived5() : flag === 6 ? new Derived6() : flag === 7 ? new Derived7() : flag === 8 ? new Derived8() : flag === 9 ? new Derived9() : flag === 10 ? new Derived10() : flag === 11 ? new Derived11() : flag === 12 ? new Derived12() : flag === 13 ? new Derived13() : flag === 14 ? new Derived14() : flag === 15 ? new Derived15() : flag === 16 ? new Derived16() : flag === 17 ? new Derived17() : flag === 18 ? new Derived18() : flag === 19 ? new Derived19() : flag === 20 ? new Derived20() : flag === 21 ? new Derived21() : flag === 22 ? new Derived22() : flag === 23 ? new Derived23() : flag === 24 ? new Derived24() : flag === 25 ? new Derived25() : flag === 26 ? new Derived26() : flag === 27 ? new Derived27() : flag === 28 ? new Derived28() : flag === 29 ? new Derived29() : flag === 30 ? new Derived30() : flag === 31 ? new Derived31() : flag === 32 ? new Derived32() : flag === 33 ? new Derived33() : flag === 34 ? new Derived34() : flag === 35 ? new Derived35() : flag === 36 ? new Derived36() : flag === 37 ? new Derived37() : flag === 38 ? new Derived38() : flag === 39 ? new Derived39() : flag === 40 ? new Derived40() : flag === 41 ? new Derived41() : flag === 42 ? new Derived42() : flag === 43 ? new Derived43() : flag === 44 ? new Derived44() : flag === 45 ? new Derived45() : flag === 46 ? new Derived46() : flag === 47 ? new Derived47() : flag === 48 ? new Derived48() : flag === 49 ? new Derived49() : flag === 50 ? new Derived50() : flag === 51 ? new Derived51() : flag === 52 ? new Derived52() : flag === 53 ? new Derived53() : flag === 54 ? new Derived54() : flag === 55 ? new Derived55() : flag === 56 ? new Derived56() : flag === 57 ? new Derived57() : flag === 58 ? new Derived58() : flag === 59 ? new Derived59() : flag === 60 ? new Derived60() : flag === 61 ? new Derived61() : flag === 62 ? new Derived62() : flag === 63 ? new Derived63() : flag === 64 ? new Derived64() : flag === 65 ? new Derived65() : flag === 66 ? new Derived66() : flag === 67 ? new Derived67() : flag === 68 ? new Derived68() : flag === 69 ? new Derived69() : flag === 70 ? new Derived70() : flag === 71 ? new Derived71() : flag === 72 ? new Derived72() : flag === 73 ? new Derived73() : flag === 74 ? new Derived74() : flag === 75 ? new Derived75() : flag === 76 ? new Derived76() : flag === 77 ? new Derived77() : flag === 78 ? new Derived78() : flag === 79 ? new Derived79() : flag === 80 ? new Derived80() : flag === 81 ? new Derived81() : flag === 82 ? new Derived82() : flag === 83 ? new Derived83() : flag === 84 ? new Derived84() : flag === 85 ? new Derived85() : flag === 86 ? new Derived86() : flag === 87 ? new Derived87() : flag === 88 ? new Derived88() : flag === 89 ? new Derived89() : flag === 90 ? new Derived90() : flag === 91 ? new Derived91() : flag === 92 ? new Derived92() : flag === 93 ? new Derived93() : flag === 94 ? new Derived94() : flag === 95 ? new Derived95() : flag === 96 ? new Derived96() : flag === 97 ? new Derived97() : flag === 98 ? new Derived98() : flag === 99 ? new Derived99() : new Base();