PROGRAM SpeedTest(output);
{P.S.Williams}
{Timings of addition, mutiplication & division in integer and floating point}
VAR
       i,n,
       addI,sumI,
       factorI,productI,
       quotientI,divisorI : integer;

       addR,sumR,
       factorR,productR,
       numeratorR,divisorR : real;

       addS,sumS,
       factorS,productS,
       numeratorS,divisorS : shortReal;

      t1,t2,t,loopTime : integer;

FUNCTION time  : integer ;
{Read the monotonic centi-clock}
VAR r0 : integer;
BEGIN  
 *SWI_16_42;
 *STR_0,r0;
 time := r0;
END; 

BEGIN
  
  writeln('Pascal Integer & real arithmetic on the Arc');
  writeln; 

  n := 10000 ; { the number of each operation }


  {empty loop}
  t1 := time;
  FOR i := 1 TO n DO;
  t2 := time;
  t := t2-t1;
  writeln(n,' Empty loops             took ',t,' centi-secs');
  loopTime := t;

  {integer addition }
  addI := 17; sumI := 0;
  t1 :=  time; { the centi-second system clock}
  FOR i:= 1 TO n DO sumI := addI+sumI;
  t2 := time;
  t := (t2-t1);
 writeln(n,' Integer additions       took ',t,' centi-secs');
  writeln('SumI = ',sumI);
                                      
  {integer multiplication}
  factorI :=1; productI := 2;
  t1 := time;
  FOR i := 1 TO n DO  productI := factorI*productI;
  t2 := time;
  t := (t2-t1);
  writeln(n,' Integer multiplications took ',t,' centi-secs');
  writeln('ProductI = ',productI);

 {integer division}
 divisorI := 2; quotientI := 2147483647;
 t1:= time;
 FOR i:= 1 TO n DO quotientI := quotientI DIV divisorI;
 t2 := time;
 t := (t2-t1);
 writeln(n,' Integer divisions       took ',t,' centi-secs');
 writeln('Quotient = ',quotientI);


 {short real addition}

 t1 := time;
 addS := 7.6; sumS := 0;
 FOR i:= 1 TO n DO sumS := addS + sumS;
 t2 := time;
 t := (t2-t1);
 writeln(n,'  short real additions          took ',t,' centi-secs');
 writeln('SumS = ',sumS);

 { real multiplication}
 factorS:=1.001; productS := 0.8;
 t1:= time;
 FOR i:= 1 TO n DO productS := factorS*productS;
 t2 := time;
 t := (t2-t1);
 writeln(n,' short real multiplications    took ',t,' centi-secs');
 writeln('ProductS = ',productS);

 {real division}
 divisorS := 1.01; numeratorS := 0.8;
 t1:= time;
 FOR i:= 1 TO n DO divisorS := numeratorS/divisorS;
 t2 := time;
 t := (t2-t1);
 writeln(n,' short real divisions          took ',t,' centi-secs');
 writeln('DivisorS = ',divisorS);

 {real addition}

 t1 := time;
 addR := 7.6; sumR := 0;
 FOR i:= 1 TO n DO sumR := addR + sumR;
 t2 := time;
 t := (t2-t1);
 writeln(n,' real additions          took ',t,' centi-secs');
 writeln('SumR = ',sumR);

 { real multiplication}
 factorR:=1.001; productR := 0.8;
 t1:= time;
 FOR i:= 1 TO n DO productR := factorR*productR;
 t2 := time;
 t := (t2-t1);
 writeln(n,' real multiplications    took ',t,' centi-secs');
 writeln('ProductR = ',productR);

 {real division}
 divisorR := 1.01; numeratorR := 0.8;
 t1:= time;
 FOR i:= 1 TO n DO divisorR := numeratorR/divisorR;
 t2 := time;
 t := (t2-t1);
 writeln(n,' real divisions          took ',t,' centi-secs');
 writeln('DivisorR = ',divisorR)

END.