Remapped accessor hotspot N=100

Mapped-type key remapping with accessor-like property surfaces.

tsz is 4.6x faster 313 lines 15 KB

Timing

tsz
82.37ms
tsgo
380.60ms

Files

// Remapped mapped-type accessor hotspot benchmark.
// Exercises template-literal key remapping plus indexed access values.

interface AccessorModel {
    prop0: { id: number; label: 'prop0' };
    prop1: { id: number; label: 'prop1' };
    prop2: { id: number; label: 'prop2' };
    prop3: { id: number; label: 'prop3' };
    prop4: { id: number; label: 'prop4' };
    prop5: { id: number; label: 'prop5' };
    prop6: { id: number; label: 'prop6' };
    prop7: { id: number; label: 'prop7' };
    prop8: { id: number; label: 'prop8' };
    prop9: { id: number; label: 'prop9' };
    prop10: { id: number; label: 'prop10' };
    prop11: { id: number; label: 'prop11' };
    prop12: { id: number; label: 'prop12' };
    prop13: { id: number; label: 'prop13' };
    prop14: { id: number; label: 'prop14' };
    prop15: { id: number; label: 'prop15' };
    prop16: { id: number; label: 'prop16' };
    prop17: { id: number; label: 'prop17' };
    prop18: { id: number; label: 'prop18' };
    prop19: { id: number; label: 'prop19' };
    prop20: { id: number; label: 'prop20' };
    prop21: { id: number; label: 'prop21' };
    prop22: { id: number; label: 'prop22' };
    prop23: { id: number; label: 'prop23' };
    prop24: { id: number; label: 'prop24' };
    prop25: { id: number; label: 'prop25' };
    prop26: { id: number; label: 'prop26' };
    prop27: { id: number; label: 'prop27' };
    prop28: { id: number; label: 'prop28' };
    prop29: { id: number; label: 'prop29' };
    prop30: { id: number; label: 'prop30' };
    prop31: { id: number; label: 'prop31' };
    prop32: { id: number; label: 'prop32' };
    prop33: { id: number; label: 'prop33' };
    prop34: { id: number; label: 'prop34' };
    prop35: { id: number; label: 'prop35' };
    prop36: { id: number; label: 'prop36' };
    prop37: { id: number; label: 'prop37' };
    prop38: { id: number; label: 'prop38' };
    prop39: { id: number; label: 'prop39' };
    prop40: { id: number; label: 'prop40' };
    prop41: { id: number; label: 'prop41' };
    prop42: { id: number; label: 'prop42' };
    prop43: { id: number; label: 'prop43' };
    prop44: { id: number; label: 'prop44' };
    prop45: { id: number; label: 'prop45' };
    prop46: { id: number; label: 'prop46' };
    prop47: { id: number; label: 'prop47' };
    prop48: { id: number; label: 'prop48' };
    prop49: { id: number; label: 'prop49' };
    prop50: { id: number; label: 'prop50' };
    prop51: { id: number; label: 'prop51' };
    prop52: { id: number; label: 'prop52' };
    prop53: { id: number; label: 'prop53' };
    prop54: { id: number; label: 'prop54' };
    prop55: { id: number; label: 'prop55' };
    prop56: { id: number; label: 'prop56' };
    prop57: { id: number; label: 'prop57' };
    prop58: { id: number; label: 'prop58' };
    prop59: { id: number; label: 'prop59' };
    prop60: { id: number; label: 'prop60' };
    prop61: { id: number; label: 'prop61' };
    prop62: { id: number; label: 'prop62' };
    prop63: { id: number; label: 'prop63' };
    prop64: { id: number; label: 'prop64' };
    prop65: { id: number; label: 'prop65' };
    prop66: { id: number; label: 'prop66' };
    prop67: { id: number; label: 'prop67' };
    prop68: { id: number; label: 'prop68' };
    prop69: { id: number; label: 'prop69' };
    prop70: { id: number; label: 'prop70' };
    prop71: { id: number; label: 'prop71' };
    prop72: { id: number; label: 'prop72' };
    prop73: { id: number; label: 'prop73' };
    prop74: { id: number; label: 'prop74' };
    prop75: { id: number; label: 'prop75' };
    prop76: { id: number; label: 'prop76' };
    prop77: { id: number; label: 'prop77' };
    prop78: { id: number; label: 'prop78' };
    prop79: { id: number; label: 'prop79' };
    prop80: { id: number; label: 'prop80' };
    prop81: { id: number; label: 'prop81' };
    prop82: { id: number; label: 'prop82' };
    prop83: { id: number; label: 'prop83' };
    prop84: { id: number; label: 'prop84' };
    prop85: { id: number; label: 'prop85' };
    prop86: { id: number; label: 'prop86' };
    prop87: { id: number; label: 'prop87' };
    prop88: { id: number; label: 'prop88' };
    prop89: { id: number; label: 'prop89' };
    prop90: { id: number; label: 'prop90' };
    prop91: { id: number; label: 'prop91' };
    prop92: { id: number; label: 'prop92' };
    prop93: { id: number; label: 'prop93' };
    prop94: { id: number; label: 'prop94' };
    prop95: { id: number; label: 'prop95' };
    prop96: { id: number; label: 'prop96' };
    prop97: { id: number; label: 'prop97' };
    prop98: { id: number; label: 'prop98' };
    prop99: { id: number; label: 'prop99' };
}

type AccessorPair<T> = {
    [K in keyof T as `get${Capitalize<string & K>}`]: () => T[K]
} & {
    [K in keyof T as `set${Capitalize<string & K>}`]: (value: T[K]) => void
};

declare const accessors: AccessorPair<AccessorModel>;
const accessorValue0 = accessors.getProp0().id;
accessors.setProp0({ id: accessorValue0, label: 'prop0' });
const accessorValue1 = accessors.getProp1().id;
accessors.setProp1({ id: accessorValue1, label: 'prop1' });
const accessorValue2 = accessors.getProp2().id;
accessors.setProp2({ id: accessorValue2, label: 'prop2' });
const accessorValue3 = accessors.getProp3().id;
accessors.setProp3({ id: accessorValue3, label: 'prop3' });
const accessorValue4 = accessors.getProp4().id;
accessors.setProp4({ id: accessorValue4, label: 'prop4' });
const accessorValue5 = accessors.getProp5().id;
accessors.setProp5({ id: accessorValue5, label: 'prop5' });
const accessorValue6 = accessors.getProp6().id;
accessors.setProp6({ id: accessorValue6, label: 'prop6' });
const accessorValue7 = accessors.getProp7().id;
accessors.setProp7({ id: accessorValue7, label: 'prop7' });
const accessorValue8 = accessors.getProp8().id;
accessors.setProp8({ id: accessorValue8, label: 'prop8' });
const accessorValue9 = accessors.getProp9().id;
accessors.setProp9({ id: accessorValue9, label: 'prop9' });
const accessorValue10 = accessors.getProp10().id;
accessors.setProp10({ id: accessorValue10, label: 'prop10' });
const accessorValue11 = accessors.getProp11().id;
accessors.setProp11({ id: accessorValue11, label: 'prop11' });
const accessorValue12 = accessors.getProp12().id;
accessors.setProp12({ id: accessorValue12, label: 'prop12' });
const accessorValue13 = accessors.getProp13().id;
accessors.setProp13({ id: accessorValue13, label: 'prop13' });
const accessorValue14 = accessors.getProp14().id;
accessors.setProp14({ id: accessorValue14, label: 'prop14' });
const accessorValue15 = accessors.getProp15().id;
accessors.setProp15({ id: accessorValue15, label: 'prop15' });
const accessorValue16 = accessors.getProp16().id;
accessors.setProp16({ id: accessorValue16, label: 'prop16' });
const accessorValue17 = accessors.getProp17().id;
accessors.setProp17({ id: accessorValue17, label: 'prop17' });
const accessorValue18 = accessors.getProp18().id;
accessors.setProp18({ id: accessorValue18, label: 'prop18' });
const accessorValue19 = accessors.getProp19().id;
accessors.setProp19({ id: accessorValue19, label: 'prop19' });
const accessorValue20 = accessors.getProp20().id;
accessors.setProp20({ id: accessorValue20, label: 'prop20' });
const accessorValue21 = accessors.getProp21().id;
accessors.setProp21({ id: accessorValue21, label: 'prop21' });
const accessorValue22 = accessors.getProp22().id;
accessors.setProp22({ id: accessorValue22, label: 'prop22' });
const accessorValue23 = accessors.getProp23().id;
accessors.setProp23({ id: accessorValue23, label: 'prop23' });
const accessorValue24 = accessors.getProp24().id;
accessors.setProp24({ id: accessorValue24, label: 'prop24' });
const accessorValue25 = accessors.getProp25().id;
accessors.setProp25({ id: accessorValue25, label: 'prop25' });
const accessorValue26 = accessors.getProp26().id;
accessors.setProp26({ id: accessorValue26, label: 'prop26' });
const accessorValue27 = accessors.getProp27().id;
accessors.setProp27({ id: accessorValue27, label: 'prop27' });
const accessorValue28 = accessors.getProp28().id;
accessors.setProp28({ id: accessorValue28, label: 'prop28' });
const accessorValue29 = accessors.getProp29().id;
accessors.setProp29({ id: accessorValue29, label: 'prop29' });
const accessorValue30 = accessors.getProp30().id;
accessors.setProp30({ id: accessorValue30, label: 'prop30' });
const accessorValue31 = accessors.getProp31().id;
accessors.setProp31({ id: accessorValue31, label: 'prop31' });
const accessorValue32 = accessors.getProp32().id;
accessors.setProp32({ id: accessorValue32, label: 'prop32' });
const accessorValue33 = accessors.getProp33().id;
accessors.setProp33({ id: accessorValue33, label: 'prop33' });
const accessorValue34 = accessors.getProp34().id;
accessors.setProp34({ id: accessorValue34, label: 'prop34' });
const accessorValue35 = accessors.getProp35().id;
accessors.setProp35({ id: accessorValue35, label: 'prop35' });
const accessorValue36 = accessors.getProp36().id;
accessors.setProp36({ id: accessorValue36, label: 'prop36' });
const accessorValue37 = accessors.getProp37().id;
accessors.setProp37({ id: accessorValue37, label: 'prop37' });
const accessorValue38 = accessors.getProp38().id;
accessors.setProp38({ id: accessorValue38, label: 'prop38' });
const accessorValue39 = accessors.getProp39().id;
accessors.setProp39({ id: accessorValue39, label: 'prop39' });
const accessorValue40 = accessors.getProp40().id;
accessors.setProp40({ id: accessorValue40, label: 'prop40' });
const accessorValue41 = accessors.getProp41().id;
accessors.setProp41({ id: accessorValue41, label: 'prop41' });
const accessorValue42 = accessors.getProp42().id;
accessors.setProp42({ id: accessorValue42, label: 'prop42' });
const accessorValue43 = accessors.getProp43().id;
accessors.setProp43({ id: accessorValue43, label: 'prop43' });
const accessorValue44 = accessors.getProp44().id;
accessors.setProp44({ id: accessorValue44, label: 'prop44' });
const accessorValue45 = accessors.getProp45().id;
accessors.setProp45({ id: accessorValue45, label: 'prop45' });
const accessorValue46 = accessors.getProp46().id;
accessors.setProp46({ id: accessorValue46, label: 'prop46' });
const accessorValue47 = accessors.getProp47().id;
accessors.setProp47({ id: accessorValue47, label: 'prop47' });
const accessorValue48 = accessors.getProp48().id;
accessors.setProp48({ id: accessorValue48, label: 'prop48' });
const accessorValue49 = accessors.getProp49().id;
accessors.setProp49({ id: accessorValue49, label: 'prop49' });
const accessorValue50 = accessors.getProp50().id;
accessors.setProp50({ id: accessorValue50, label: 'prop50' });
const accessorValue51 = accessors.getProp51().id;
accessors.setProp51({ id: accessorValue51, label: 'prop51' });
const accessorValue52 = accessors.getProp52().id;
accessors.setProp52({ id: accessorValue52, label: 'prop52' });
const accessorValue53 = accessors.getProp53().id;
accessors.setProp53({ id: accessorValue53, label: 'prop53' });
const accessorValue54 = accessors.getProp54().id;
accessors.setProp54({ id: accessorValue54, label: 'prop54' });
const accessorValue55 = accessors.getProp55().id;
accessors.setProp55({ id: accessorValue55, label: 'prop55' });
const accessorValue56 = accessors.getProp56().id;
accessors.setProp56({ id: accessorValue56, label: 'prop56' });
const accessorValue57 = accessors.getProp57().id;
accessors.setProp57({ id: accessorValue57, label: 'prop57' });
const accessorValue58 = accessors.getProp58().id;
accessors.setProp58({ id: accessorValue58, label: 'prop58' });
const accessorValue59 = accessors.getProp59().id;
accessors.setProp59({ id: accessorValue59, label: 'prop59' });
const accessorValue60 = accessors.getProp60().id;
accessors.setProp60({ id: accessorValue60, label: 'prop60' });
const accessorValue61 = accessors.getProp61().id;
accessors.setProp61({ id: accessorValue61, label: 'prop61' });
const accessorValue62 = accessors.getProp62().id;
accessors.setProp62({ id: accessorValue62, label: 'prop62' });
const accessorValue63 = accessors.getProp63().id;
accessors.setProp63({ id: accessorValue63, label: 'prop63' });
const accessorValue64 = accessors.getProp64().id;
accessors.setProp64({ id: accessorValue64, label: 'prop64' });
const accessorValue65 = accessors.getProp65().id;
accessors.setProp65({ id: accessorValue65, label: 'prop65' });
const accessorValue66 = accessors.getProp66().id;
accessors.setProp66({ id: accessorValue66, label: 'prop66' });
const accessorValue67 = accessors.getProp67().id;
accessors.setProp67({ id: accessorValue67, label: 'prop67' });
const accessorValue68 = accessors.getProp68().id;
accessors.setProp68({ id: accessorValue68, label: 'prop68' });
const accessorValue69 = accessors.getProp69().id;
accessors.setProp69({ id: accessorValue69, label: 'prop69' });
const accessorValue70 = accessors.getProp70().id;
accessors.setProp70({ id: accessorValue70, label: 'prop70' });
const accessorValue71 = accessors.getProp71().id;
accessors.setProp71({ id: accessorValue71, label: 'prop71' });
const accessorValue72 = accessors.getProp72().id;
accessors.setProp72({ id: accessorValue72, label: 'prop72' });
const accessorValue73 = accessors.getProp73().id;
accessors.setProp73({ id: accessorValue73, label: 'prop73' });
const accessorValue74 = accessors.getProp74().id;
accessors.setProp74({ id: accessorValue74, label: 'prop74' });
const accessorValue75 = accessors.getProp75().id;
accessors.setProp75({ id: accessorValue75, label: 'prop75' });
const accessorValue76 = accessors.getProp76().id;
accessors.setProp76({ id: accessorValue76, label: 'prop76' });
const accessorValue77 = accessors.getProp77().id;
accessors.setProp77({ id: accessorValue77, label: 'prop77' });
const accessorValue78 = accessors.getProp78().id;
accessors.setProp78({ id: accessorValue78, label: 'prop78' });
const accessorValue79 = accessors.getProp79().id;
accessors.setProp79({ id: accessorValue79, label: 'prop79' });
const accessorValue80 = accessors.getProp80().id;
accessors.setProp80({ id: accessorValue80, label: 'prop80' });
const accessorValue81 = accessors.getProp81().id;
accessors.setProp81({ id: accessorValue81, label: 'prop81' });
const accessorValue82 = accessors.getProp82().id;
accessors.setProp82({ id: accessorValue82, label: 'prop82' });
const accessorValue83 = accessors.getProp83().id;
accessors.setProp83({ id: accessorValue83, label: 'prop83' });
const accessorValue84 = accessors.getProp84().id;
accessors.setProp84({ id: accessorValue84, label: 'prop84' });
const accessorValue85 = accessors.getProp85().id;
accessors.setProp85({ id: accessorValue85, label: 'prop85' });
const accessorValue86 = accessors.getProp86().id;
accessors.setProp86({ id: accessorValue86, label: 'prop86' });
const accessorValue87 = accessors.getProp87().id;
accessors.setProp87({ id: accessorValue87, label: 'prop87' });
const accessorValue88 = accessors.getProp88().id;
accessors.setProp88({ id: accessorValue88, label: 'prop88' });
const accessorValue89 = accessors.getProp89().id;
accessors.setProp89({ id: accessorValue89, label: 'prop89' });
const accessorValue90 = accessors.getProp90().id;
accessors.setProp90({ id: accessorValue90, label: 'prop90' });
const accessorValue91 = accessors.getProp91().id;
accessors.setProp91({ id: accessorValue91, label: 'prop91' });
const accessorValue92 = accessors.getProp92().id;
accessors.setProp92({ id: accessorValue92, label: 'prop92' });
const accessorValue93 = accessors.getProp93().id;
accessors.setProp93({ id: accessorValue93, label: 'prop93' });
const accessorValue94 = accessors.getProp94().id;
accessors.setProp94({ id: accessorValue94, label: 'prop94' });
const accessorValue95 = accessors.getProp95().id;
accessors.setProp95({ id: accessorValue95, label: 'prop95' });
const accessorValue96 = accessors.getProp96().id;
accessors.setProp96({ id: accessorValue96, label: 'prop96' });
const accessorValue97 = accessors.getProp97().id;
accessors.setProp97({ id: accessorValue97, label: 'prop97' });
const accessorValue98 = accessors.getProp98().id;
accessors.setProp98({ id: accessorValue98, label: 'prop98' });
const accessorValue99 = accessors.getProp99().id;
accessors.setProp99({ id: accessorValue99, label: 'prop99' });