Remapped accessor hotspot N=25
Mapped-type key remapping with accessor-like property surfaces.
tsz is 6.4x faster 88 lines 4 KB
Timing
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' };
}
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' });