*سلیب* که در خلوت خود در حال تفکری عمیق درباره اردرهای مختلف بود، به این فکر فرو رفت که متدهایی که پیادهسازی کرده چقدر طول میکشند و چقدر بهینه کد میزند. برای همین سراغ پیادهسازی متدی برای سنجش زمان موردنیاز برای اجرای هر متد خود رفت. در ادامه به توضیح این متد میپردازیم.
# جزئیات پروژه
پروژهی اولیه را از [این لینک](/problemset/assignments/4367/download_problem_initial_project/169494/) دانلود کنید.
ساختار فایلهای پروژه بهصورت زیر است:
```
execution-time
└── ExecutionTimeCalculator.java
```
شما باید متد `measureExecutionTime` موجود در کلاس `ExecutionTime` را مطابق با خواست سؤال پیادهسازی کنید. امضای این متد بهصورت زیر است:
```java ExecutionTimeCalculator.java java
import java.math.BigDecimal;
public class ExecutionTimeCalculator {
public static long functionToCall() {
long returnValue = 0;
for (long i = 1; i < 1000L * 1000 * 1000 * 10; i++) {
returnValue += i;
}
return returnValue;
}
public static BigDecimal measureExecutionTime(Runnable function) {
// TODO: Implement
return null;
}
public static void main(String[] args) {
System.out.println(measureExecutionTime(ExecutionTimeCalculator::functionToCall));
}
}
```
این متد باید `Runnable`ای که به آن ورودی داده میشود را اجرا کند و زمان مورد نیاز برای اجرای آن را **با واحد ثانیه** در متغیری از جنس `BigDecimal` **دقیقاً با ۵ رقم پس از اعشار** برگرداند. برای کاهش ارقام اعشار باید عدد را از پنجمین رقم در ممیز گرد کنید (برای این کار، میتوانید از `RoundingMode.HALF_UP` استفاده کنید).
# نکات
+ توجه داشته باشید که خروجی شما **باید دقیقاً شامل ۵ رقم پس از اعشار باشد**.
+ عدد محاسبهشده را باید گرد کنید.
+ زمان محاسبهشده باید **با واحد ثانیه باشد**.
+ متد `run` در شیء `Runnable` متد را اجرا میکند.
# آنچه باید آپلود کنید
پس از پیادهسازی موارد خواستهشده، فایل `ExecutionTimeCalculator.java` را آپلود کنید.