آمیرزا با ۸۰ سال سن به برنامهنویسی علاقهمند شده است. او شنیده است که یکی از زبانهای موردعلاقهی جوانان جاوااسکریپت است، اما او از عالم کامپیوتر یک کامپیوتری دارد که با زغال کار میکند! این کامپیوتر حتی عملیاتهای سادهی ریاضی همچون $2+2$ را به کندی انجام میدهد. وی که از این امر عاصی شده است، از شما میخواهد برای او کاری کنید که بتواند ببیند هر تابع چه زمانی برحسب میلیثانیه طول می کشد تا اجرا شود.
## جزئیات پروژه
در این سؤال باید تابعی با نام `timeit` طراحی شود که بهصورت زیر عمل کند:
```js
const fn = (a, b) => a + b;
timeit(fn)(5, 10).then(ans => {
ans === {value: 15, time: 500} // true
})
```
در مثال بالا، میزان زمان ذکرشده براساس پرفورمنس سیستم آمیرزا است و روی کامپیوتر شما بسیار سریعتر خواهد بود (زمان تقریباً برابر با ۰٫۱ میلیثانیه خواهد بود).
جالب است بدانید آمیرزا علاوه بر توابع معمولی از توابعی با رفتار `async` نیز استفاده میکند؛ پس انتظار میرود تابع شما برای این دسته از توابع نیز به خوبی کار کند. مثال:
```js
function fn(t) {
return new Promise((res, rej) => {
setTimeout(() => res(`done after ${t}ms`), t);
});
}
timeit(fn)(25).then(ans => {
ans === {value: "done after 25ms", time: 25}
})
```
**نکته:** از آنجایی که زمان اجرایی توابع وابستگی به کلاک کاری پردازنده دارند، ممکن است میزان زمان محاسبهشده دارای مقداری خطا باشد. این میزان خطا در روند داوری لحاظ شده است.
## آنچه باید آپلود کنید
فایل `main.js` که تابع `timeit` در آن پیادهسازی شده است را به صورت *ZIP* شده ارسال نمایید.