Task

Write a program which uses a timer (with the least granularity available
on your system) to time how long a function takes to execute.

Whenever possible, use methods which measure only the processing time used
by the current process; instead of the difference in system time
between start and finish, which could include time used by
other processes on the computer.

This task is intended as a subtask for Measure relative performance of sorting algorithms implementations.




integer
identity(integer x)
{
    x;
}
 
 
integer
sum(integer c)
{
    integer s;
 
    s = 0;
    while (c) {
	s += c;
	c -= 1;
    }
 
    s;
}
 
 
real
time_f(integer (*fp)(integer), integer fa)
{
    date f, s;
    time t;
 
    s.now;
 
    fp(fa);
 
    f.now;
 
    t.ddiff(f, s);
 
    t.microsecond / 1000000r;
}
 
 
integer
main(void)
{
    o_real(6, time_f(identity, 1));
    o_text(" seconds\n");
    o_real(6, time_f(sum, 1000000));
    o_text(" seconds\n");
 
    0;
}