home *** CD-ROM | disk | FTP | other *** search
/ Programmer's ROM - The Computer Language Library / programmersrom.iso / ada / test / piwga.src < prev    next >
Encoding:
Text File  |  1988-05-03  |  235.6 KB  |  7,425 lines

  1. ::::::::::
  2. piwga831.inc
  3. ::::::::::
  4. --
  5. -- PIWG TAPE_8_31_86, Part A
  6. --
  7. A000001.ADA
  8. A000002.ADA
  9. A000011.ADA
  10. A000012.ADA
  11. A000013.ADA
  12. A000014.ADA
  13. A000015.ADA
  14. A000016.ADA
  15. A000021.ADA
  16. A000022.ADA
  17. A000031.ADA
  18. A000032.ADA
  19. A000033.ADA
  20. A000041.ADA
  21. A000042.ADA
  22. A000043.ADA
  23. A000044.ADA
  24. A000049.ADA
  25. A000051.ADA
  26. A000052.ADA
  27. A000053.ADA
  28. A000054.ADA
  29. A000055.ADA
  30. A000091.ADA
  31. A000092.ADA
  32. A000093.ADA
  33. A000094.ADA
  34. A000098.ADA
  35. A000099.ADA
  36. A000100.ADA
  37. A000101.ADA
  38. A000102.ADA
  39. A000103.ADA
  40. A000104.ADA
  41. A000105.ADA
  42. A000106.ADA
  43. A000107.ADA
  44. ACOMPILE.CLI
  45. ACOMPILE.COM
  46. ACOMPILE.LR1
  47. C000001.ADA
  48. C000002.ADA
  49. C000003.ADA
  50. COMPILE.CLI
  51. COMPILE.COM
  52. COMPILE.L78
  53. COMPILE.L86
  54. COPY.COM
  55. COPY.R10
  56. ::::::::::
  57. A000001.ADA
  58. ::::::::::
  59. with TEXT_IO ; use TEXT_IO ;
  60.  
  61. package DURATION_IO is new FIXED_IO ( DURATION ) ;
  62. ::::::::::
  63. A000002.ADA
  64. ::::::::::
  65. ::::::::::
  66. A000011.ADA
  67. ::::::::::
  68.  
  69. -- This is a universal Ada function to get CPU time in seconds
  70. -- of type DURATION on non time_sharring systems where a
  71. -- tailored CPU_TIME_CLOCK is not reasonable
  72. -- Do not cross a midnight boundry
  73.  
  74. with CALENDAR ; use CALENDAR ;
  75.  
  76. function CPU_TIME_CLOCK return DURATION is
  77.  
  78.       NOW : TIME := CLOCK ;
  79. begin
  80.  
  81.   return SECONDS ( NOW ) ;
  82.  
  83. end CPU_TIME_CLOCK ;
  84. ::::::::::
  85. A000012.ADA
  86. ::::::::::
  87.  
  88. -- This is a VAX Ada function to get CPU time in seconds of type DURATION
  89.  
  90. with SYSTEM ; use SYSTEM ;
  91. with CONDITION_HANDLING ; use CONDITION_HANDLING ;
  92. with STARLET ; use STARLET ;
  93.  
  94. function CPU_TIME_CLOCK return DURATION is
  95.  
  96.   CPUTIM : INTEGER ;
  97.   pragma VOLATILE ( CPUTIM ) ;
  98.   JPI_STATUS : COND_VALUE_TYPE ;
  99.   JPI_ITEM_LIST : constant ITEM_LIST_TYPE :=
  100.                   ( ( 4 , JPI_CPUTIM , CPUTIM'ADDRESS , ADDRESS_ZERO ) ,
  101.                     ( 0 , 0 , ADDRESS_ZERO , ADDRESS_ZERO ) ) ;
  102.  
  103.   CPU_TIME_AS_DURATION : DURATION ;
  104. begin
  105.  
  106. -- Call GETJPI to set CPUTIM to total accumulated CPU time 
  107. -- (in 10-millisecond tics)
  108.  
  109.   GETJPI ( STATUS => JPI_STATUS , ITMLST => JPI_ITEM_LIST ) ;
  110.   CPU_TIME_AS_DURATION := DURATION ( LONG_FLOAT ( CPUTIM ) / 100.0 ) ;
  111.   return CPU_TIME_AS_DURATION ;
  112.  
  113. end CPU_TIME_CLOCK ;
  114. ::::::::::
  115. A000013.ADA
  116. ::::::::::
  117. -- This is the Data General MV series computers function
  118. -- to get CPU time in seconds of type DURATION .
  119.  
  120. with SYS_CALLS ; use SYS_CALLS ;
  121. function CPU_TIME_CLOCK return DURATION is
  122.   type MEMORY_DESCRIPTOR is
  123.     record
  124.       UNSHARED_PAGES_IN_PROGRAM_FILE : INTEGER ;
  125.       UNSHARED_PAGES_BEING_USED : INTEGER ;
  126.       SHARED_PAGES_IN_PROGRAM_FILE : INTEGER ;
  127.       FIRST_SHARED_MEMORY_PAGE : INTEGER ;
  128.       STARTING_PAGE : INTEGER ;
  129.       PROGRAMS_FIRST_SHARED_MEMORY_PAGE : INTEGER ;
  130.     end record ;
  131.   type MEMORY_DESCRIPTORS is array ( 1 .. 7 ) of MEMORY_DESCRIPTOR ;
  132.   type PROCESS_STATISTICS is
  133.     record
  134.       FATHER_PID : SHORT_INTEGER ;
  135.       SONS1 : SHORT_INTEGER ;
  136.       SONS2 : SHORT_INTEGER ;
  137.       SONS3 : SHORT_INTEGER ;
  138.       SONS4 : SHORT_INTEGER ;
  139.       SONS5 : SHORT_INTEGER ;
  140.       SONS6 : SHORT_INTEGER ;
  141.       SONS7 : SHORT_INTEGER ;
  142.       SONS8 : SHORT_INTEGER ;
  143.       SONS9 : SHORT_INTEGER ;
  144.       SONS10 : SHORT_INTEGER ;
  145.       SONS11 : SHORT_INTEGER ;
  146.       SONS12 : SHORT_INTEGER ;
  147.       SONS13 : SHORT_INTEGER ;
  148.       SONS14 : SHORT_INTEGER ;
  149.       SONS15 : SHORT_INTEGER ;
  150.       SONS16 : SHORT_INTEGER ;
  151.       TASKS_BLOCKED_ON_IREC : SHORT_INTEGER ;
  152.       TASKS_BLOCKED_AWAITING_STACKS : SHORT_INTEGER ;
  153.       PROCESS_STATUS_WORD : SHORT_INTEGER ;
  154.       PRIORITY_QUEUE_FACTOR : SHORT_INTEGER ;
  155.       FLAG_WORD1 : SHORT_INTEGER ;
  156.       FLAG_WORD2 : SHORT_INTEGER ;
  157.       FLAG_WORD3 : SHORT_INTEGER ;
  158.       FLAG_WORD4 : SHORT_INTEGER ;
  159.       RESERVED : SHORT_INTEGER ;
  160.       PRIORITY : SHORT_INTEGER ;
  161.       WORKING_SET_SIZE : SHORT_INTEGER ;
  162.       PRIVILEGE_BITS : SHORT_INTEGER ;
  163.       TIME_SLICE_EXPONENT : SHORT_INTEGER ;
  164.       PROCESS_ID : SHORT_INTEGER ;
  165.       ELAPSED_TIME : INTEGER ;
  166.       CPU_TIME : INTEGER ;
  167.       IO_USAGE : INTEGER ;
  168.       PAGE_SECONDS : INTEGER ;
  169.       REMAINING_SUBSLICES : SHORT_INTEGER ;
  170.       MAX_LOGICAL_PAGES : SHORT_INTEGER ;
  171.       MAX_WORKING_SET_SIZE : SHORT_INTEGER ;
  172.       MIN_WORKING_SET_SIZE : SHORT_INTEGER ;
  173.       PAGE_FAULT_COUNT : SHORT_INTEGER ;
  174.       MEMORY : MEMORY_DESCRIPTORS ;
  175.       BLOCKS_READ_OR_WRITTEN : INTEGER ;
  176.       FAULTS_NOT_REQUIRING_DISK : INTEGER ;
  177.     end record ;
  178.   PROCESS_INFO : PROCESS_STATISTICS ;
  179.   ACC0 : INTEGER := - 1 ;
  180.   ACCUM1 : INTEGER := 0 ;
  181.   ERROR_INFO : ERROR_CODE ;
  182.   PT_PSTAT : INTEGER ;
  183. begin
  184.   PT_PSTAT := INTEGER ( PROCESS_INFO'ADDRESS ) ;
  185.  
  186. -- This is the call to obtain process statistics
  187.  
  188.   SYS ( PSTAT , ACC0 , ACCUM1 , PT_PSTAT , ERROR_INFO ) ;
  189.   return DURATION ( FLOAT( PROCESS_INFO.CPU_TIME ) / 1000.0) ;
  190. end CPU_TIME_CLOCK ;
  191. ::::::::::
  192. A000014.ADA
  193. ::::::::::
  194. --
  195. --  this function returns the user time on a Unix system
  196. --  by interfacing to the c library to access the times
  197. --  routine
  198. --  (This version tested on Gould 9780)
  199. --
  200.   function CPU_TIME_CLOCK return DURATION is
  201.     type BUF is array(1..4) of INTEGER;
  202.     CPU_TIME_AS_DURATION : DURATION;
  203.     TIME_BUF : BUF;
  204.     procedure TIMES (TIME_BUF: out BUF);
  205.     pragma INTERFACE (C,TIMES);
  206.   begin
  207. --
  208. --  times returns the user time and system time in units of
  209. --  1/60 seconds
  210. --
  211.     TIMES(TIME_BUF);
  212.       CPU_TIME_AS_DURATION := DURATION(DURATION(TIME_BUF(1))/60.0);
  213. --    CPU_TIME_AS_DURATION := DURATION(DURATION(TIME_BUF(1) + TIME_BUF(2))/60.0);
  214.     return CPU_TIME_AS_DURATION;
  215.   end CPU_TIME_CLOCK;
  216. ::::::::::
  217. A000015.ADA
  218. ::::::::::
  219.  
  220. -- This is a R1000 function to get CPU time in seconds of type DURATION
  221.  
  222. with SYSTEM_UTILITIES ;
  223. function CPU_TIME_CLOCK return DURATION is
  224. begin
  225.   return SYSTEM_UTILITIES.CPU ;
  226. end CPU_TIME_CLOCK ;
  227. ::::::::::
  228. A000016.ADA
  229. ::::::::::
  230. -- This is a UNIX VAX Ada function to get CPU time in seconds of type DURATION
  231. --  ( it uses  pragma INTERFACE  to the C language )
  232.  
  233. with SYSTEM ; use SYSTEM ;
  234.  
  235. function CPU_Time_Clock return duration is
  236.  
  237.   type Break_Time_Record is record
  238.      Seconds      : integer ;
  239.      Min          : integer ;
  240.      Hour         : integer ;
  241.      Day          : integer ;
  242.      Mon          : integer ;
  243.      Year         : integer ;
  244.      wday         : integer ;
  245.      yday         : integer ;
  246.      idst         : integer ;
  247.   end record ;
  248.  
  249.   type Time_Record is record
  250.      Seconds      : integer ;
  251.      Microseconds : integer ;
  252.   end record;
  253.  
  254.   type Zone_Record is record
  255.     Seconds      : integer ;
  256.     Microseconds : integer ;
  257.   end record ;
  258.  
  259.   type Time_Pointer_Type is access Time_Record ;
  260.   type Zone_Pointer_Type is access Zone_Record ;
  261.   type Break_Time_Record_Pointer is access Break_Time_Record ;
  262.  
  263.   Break_Time_Pointer : Break_Time_Record_Pointer := new Break_Time_Record ;
  264.   Time_Pointer       : Time_Pointer_Type := new Time_Record ;
  265.   Zone_Pointer       : Zone_Pointer_Type := new Zone_Record ;
  266.   Return_Time        : integer ;
  267.   Time_As_Duration   : duration ;     
  268.  
  269.   -- This procedure gets the time and zone of day from the ULTRIX operating
  270.   -- system.  The time is returned in seconds and microseconds.
  271.  
  272.   procedure gettimeofday ( Time_Pointer : Time_Pointer_Type ;
  273.                            Zone_Pointer : Zone_Pointer_Type ) ;
  274.  
  275.   pragma interface(c,gettimeofday) ;
  276.  
  277.   -- This procedure takes as input the time returned by gettimeofday and
  278.   -- breaks up the time into a structure as described in Break_Time_Record. 
  279.  
  280.   function localtime (Time : Time_Pointer_Type )
  281.                         return Break_Time_Record_Pointer ;
  282.  
  283.   pragma interface (c, localtime) ;
  284.  
  285. begin
  286.  
  287.   gettimeofday (Time_Pointer, Zone_Pointer ) ;
  288.   Break_Time_Pointer := localtime ( Time_Pointer ) ;
  289.   Return_Time := Break_Time_Pointer.Hour * 3600 +
  290.                  Break_Time_Pointer.Min * 60 +
  291.                  Break_Time_Pointer.Seconds ;
  292.   Time_As_Duration := duration ( float(Return_Time) +
  293.                                  ( float(Time_Pointer.Seconds) / 1000000.0 ) ) ;
  294.  
  295.   return Time_As_Duration ;
  296.  
  297. end CPU_Time_Clock ;
  298. ::::::::::
  299. A000021.ADA
  300. ::::::::::
  301. package REMOTE_GLOBAL is  -- for explicit control of optimization
  302.  
  303.   A_ONE : INTEGER; --        a constant 1 that can not be optimized away
  304. --                           A_ONE is intentionally visible. DO NOT CHANGE IT
  305. --
  306.   GLOBAL : INTEGER := 1 ; -- global object can not be optimized away
  307. --                           GLOBAL is changed by measurement programs
  308. --                           the initialization to 1 is used in the body
  309. --                           but could be changed by elaboration order
  310. --
  311.   procedure REMOTE; --       do to calls to this procedure, no compiler
  312. --                           can optimize away the computation an GLOBAL
  313. --
  314.   procedure CHECK_TIME ( TEST_DURATION : in DURATION ) ;
  315. --  Just print message if TEST_DURATION less then
  316. --                           100 * SYSTEM.TICK  or DURATION'SMALL
  317. --
  318. end REMOTE_GLOBAL;
  319. ::::::::::
  320. A000022.ADA
  321. ::::::::::
  322. with SYSTEM, TEXT_IO ;
  323.  
  324. package body REMOTE_GLOBAL is  -- must be compiled last
  325. --                               for explicit control of optimization
  326.   LOCAL : INTEGER;
  327.  
  328.   procedure REMOTE is -- this is an optimization control procedure
  329.   begin 
  330.     GLOBAL := GLOBAL + LOCAL; -- be sure procedure is not optimized away
  331.   exception
  332.     when NUMERIC_ERROR =>
  333.       REMOTE ; -- can not happen if test is working ( prevents inlining )
  334.   end REMOTE;
  335.  
  336.   procedure CHECK_TIME ( TEST_DURATION : in DURATION ) is
  337.   begin
  338.     if TEST_DURATION < 100 * DURATION'SMALL or
  339.        TEST_DURATION < 100 * SYSTEM.TICK then
  340.       TEXT_IO.PUT_LINE ( " ***** TEST_DURATION not large compared to "
  341.                          & "DURATION'SMALL or SYSTEM.TICK " ) ;
  342.     end if ;
  343.   end CHECK_TIME ;
  344.  
  345. begin
  346.  
  347.   A_ONE := 1 ; -- must not be changed by measurement programs
  348.   LOCAL := GLOBAL - A_ONE; -- really a zero but compiler doesn't know
  349.  
  350. end REMOTE_GLOBAL;
  351. ::::::::::
  352. A000031.ADA
  353. ::::::::::
  354. -- This is the ITERATION_COUNT control package for feature measurements
  355. -- The set of procedures provide the automatic stabilizing of the
  356. -- timing measurement. The measurement CPU time must be greater than:
  357. --  1.0 second,  DURATION'SMALL * 100 ,  SYSTEM.TICK * 100
  358. --
  359. -- Note: If there is no control loop, the START_CONTROL and STOP_CONTROL
  360. --       do not need to be called.
  361.  
  362. package ITERATION is -- A000031.ADA
  363.  
  364.   procedure START_CONTROL ;
  365.  
  366.   procedure STOP_CONTROL ( GLOBAL : INTEGER ;
  367.                            CHECK : INTEGER ) ;
  368.  
  369.   procedure START_TEST ;
  370.  
  371.   procedure STOP_TEST ( GLOBAL : INTEGER ;
  372.                         CHECK : INTEGER ) ;
  373.  
  374.   procedure FEATURE_TIMES ( CPU_TIME : out DURATION ;
  375.                             WALL_TIME : out DURATION ) ;
  376.  
  377.   procedure INITIALIZE ( ITERATION_COUNT : out INTEGER ) ;
  378.  
  379.   procedure TEST_STABLE ( ITERATION_COUNT : in out INTEGER ;
  380.                           STABLE : out BOOLEAN ) ;
  381. end ITERATION ;
  382. ::::::::::
  383. A000032.ADA
  384. ::::::::::
  385. -- Iteration control package body
  386.  
  387. with CPU_TIME_CLOCK ;  -- various choices on tape
  388. with CALENDAR ; -- used for WALL clock times
  389. with SYSTEM ; -- used to get value of TICK
  390. with TEXT_IO ;  -- only for diagnostics
  391.  
  392. package body ITERATION is -- A000032.ADA
  393.  
  394. --
  395. -- CPU time variables
  396. --
  397.   CONTROL_TIME_INITIAL : DURATION ; -- sampled from CPU_TIME_CLOCK at beginning
  398.   CONTROL_TIME_FINAL : DURATION ;  -- sampled from CPU_TIME_CLOCK at end
  399.   CONTROL_DURATION : DURATION ; -- (FINAL-INITIAL) the measured time in seconds
  400.   TEST_TIME_INITIAL : DURATION ; -- ditto for TEST
  401.   TEST_TIME_FINAL : DURATION ;
  402.   TEST_DURATION : DURATION ;
  403. --
  404. -- WALL time variables
  405. --
  406.   WALL_CONTROL_TIME_INITIAL : DURATION ; -- sampled from CLOCK at beginning
  407.   WALL_CONTROL_TIME_FINAL : DURATION ;  -- sampled from CLOCK at end
  408.   WALL_CONTROL_DURATION : DURATION ; -- (FINAL-INITIAL) measured time in seconds
  409.   WALL_TEST_TIME_INITIAL : DURATION ; -- ditto for TEST
  410.   WALL_TEST_TIME_FINAL : DURATION ;
  411.   WALL_TEST_DURATION : DURATION ;
  412. --
  413.   MINIMUM_TIME : DURATION := 1.0 ; -- required minimum value of test time
  414. --  MINIMUM_TIME : DURATION := 10.0 ; -- suggested minimum value for fast machines
  415.   TEMP_TIME : FLOAT ; -- for scaling to microseconds
  416.   ITERATION_COUNT : INTEGER ;  -- change to make timing stable
  417.   CHECK : INTEGER ; -- saved from STOP_TEST call for scaling
  418.  
  419.   procedure START_CONTROL is
  420.   begin
  421.     CONTROL_TIME_INITIAL := CPU_TIME_CLOCK ;
  422.     WALL_CONTROL_TIME_INITIAL := CALENDAR.SECONDS(CALENDAR.CLOCK) ;
  423.   end START_CONTROL ;
  424.  
  425.   procedure STOP_CONTROL ( GLOBAL : INTEGER ;
  426.                            CHECK : INTEGER ) is
  427.   begin
  428.     CONTROL_TIME_FINAL := CPU_TIME_CLOCK ;
  429.     CONTROL_DURATION := CONTROL_TIME_FINAL - CONTROL_TIME_INITIAL ;
  430.     WALL_CONTROL_TIME_FINAL := CALENDAR.SECONDS(CALENDAR.CLOCK) ;
  431.     WALL_CONTROL_DURATION := WALL_CONTROL_TIME_FINAL -
  432.                              WALL_CONTROL_TIME_INITIAL ;
  433. --
  434.     if CHECK /= GLOBAL then
  435.       TEXT_IO.PUT_LINE ( " Fix control loop before making measurements." ) ;
  436.       TEXT_IO.PUT_LINE ( INTEGER'IMAGE ( GLOBAL ) & " = GLOBAL " ) ;
  437.       raise PROGRAM_ERROR ;
  438.     end if ;
  439.   end STOP_CONTROL ;
  440.  
  441.   procedure START_TEST is
  442.   begin
  443.     TEST_TIME_INITIAL := CPU_TIME_CLOCK ;
  444.     WALL_TEST_TIME_INITIAL := CALENDAR.SECONDS(CALENDAR.CLOCK) ;
  445.   end START_TEST ;
  446.  
  447.   procedure STOP_TEST ( GLOBAL : INTEGER ;
  448.                         CHECK : INTEGER ) is
  449.   begin
  450.     TEST_TIME_FINAL := CPU_TIME_CLOCK ;
  451.     TEST_DURATION := TEST_TIME_FINAL - TEST_TIME_INITIAL ;
  452.     WALL_TEST_TIME_FINAL := CALENDAR.SECONDS(CALENDAR.CLOCK) ;
  453.     WALL_TEST_DURATION := WALL_TEST_TIME_FINAL - WALL_TEST_TIME_INITIAL ;
  454. --
  455.     ITERATION.CHECK := CHECK ;
  456.     if CHECK /= GLOBAL then
  457.       TEXT_IO.PUT_LINE ( " Fix test loop before making measurements." ) ;
  458.       TEXT_IO.PUT_LINE ( INTEGER'IMAGE ( GLOBAL ) & " = GLOBAL " ) ;
  459.       raise PROGRAM_ERROR ;
  460.     end if ;
  461.   end STOP_TEST ;
  462.  
  463.   procedure FEATURE_TIMES ( CPU_TIME : out DURATION ;
  464.                             WALL_TIME : out DURATION ) is
  465.   begin
  466. --
  467. --  compute scaled results
  468. --
  469.     begin
  470. --      choose 1st and 3rd to uncomment, 2nd and 4th to comment if overflow
  471. --      TEMP_TIME := FLOAT ( TEST_DURATION - CONTROL_DURATION ) ;
  472.       TEMP_TIME := FLOAT ( (TEST_DURATION-CONTROL_DURATION)*1000 ) ;
  473. --      TEMP_TIME := (1_000_000.0 * TEMP_TIME) / 
  474.       TEMP_TIME := (1_000.0 * TEMP_TIME) / 
  475.                    ( FLOAT ( ITERATION_COUNT ) * FLOAT (CHECK) );
  476.       if TEMP_TIME < 0.0 then
  477.         CPU_TIME := 0.0 ;
  478.       else
  479.         CPU_TIME := DURATION ( TEMP_TIME ) ;
  480.       end if ;
  481.     exception
  482.       when others =>  -- bail out if trouble in conversion
  483.         CPU_TIME := 0.0 ;
  484.     end ;
  485. --
  486.     begin
  487. --      choose 1st and 3rd to uncomment, 2nd and 4th to comment if overflow
  488. --      TEMP_TIME := FLOAT ( WALL_TEST_DURATION - WALL_CONTROL_DURATION ) ;
  489.       TEMP_TIME := FLOAT ( (WALL_TEST_DURATION-WALL_CONTROL_DURATION)*1000 ) ;
  490. --      TEMP_TIME := (1_000_000.0 * TEMP_TIME) / 
  491.       TEMP_TIME := (1_000.0 * TEMP_TIME) / 
  492.                    ( FLOAT ( ITERATION_COUNT ) * FLOAT (CHECK) );
  493.       if TEMP_TIME < 0.0 then
  494.         WALL_TIME := 0.0 ;
  495.       else
  496.         WALL_TIME := DURATION ( TEMP_TIME ) ;
  497.       end if ;
  498.     exception
  499.       when others =>
  500.         WALL_TIME := 0.0 ;
  501.     end ;
  502.  
  503.   end FEATURE_TIMES ;
  504.  
  505.  
  506.   procedure INITIALIZE ( ITERATION_COUNT : out INTEGER ) is
  507.   begin
  508.     ITERATION_COUNT := 1 ;
  509.     ITERATION.ITERATION_COUNT := 1 ;
  510.   end INITIALIZE ;
  511.  
  512.   procedure TEST_STABLE ( ITERATION_COUNT : in out INTEGER ;
  513.                           STABLE : out BOOLEAN ) is
  514.   begin
  515.     if TEST_DURATION > MINIMUM_TIME then
  516.       if TEST_DURATION < CONTROL_DURATION and ITERATION_COUNT < 1024 then
  517.         STABLE := FALSE ;
  518.       else
  519.         STABLE := TRUE ;
  520.       end if ;
  521.     elsif ITERATION_COUNT >= 16384 then
  522.       TEXT_IO.PUT_LINE ( "***** INCOMPLETE MEASUREMENT *****" ) ;
  523.       STABLE := TRUE ;
  524.     else
  525.       ITERATION_COUNT := ITERATION_COUNT + ITERATION_COUNT ;
  526.       ITERATION.ITERATION_COUNT := ITERATION_COUNT ;
  527.       STABLE := FALSE ;
  528.     end if;  
  529.   end TEST_STABLE ;
  530.  
  531.  
  532. --
  533. begin
  534.  
  535.   if SYSTEM.TICK * 100 > MINIMUM_TIME then
  536.     MINIMUM_TIME := SYSTEM.TICK * 100 ;
  537.   end if;
  538.  
  539.   if DURATION'SMALL * 100 > MINIMUM_TIME then
  540.     MINIMUM_TIME := DURATION'SMALL * 100 ;
  541.   end if;
  542.  
  543. -- MINIMUM_TIME is now the larger of 1.0 second,     (10.0 fast machines)
  544. --                                   100*SYSTEM.TICK,
  545. --                                   100*DURATION'SMALL
  546.  
  547.   CONTROL_DURATION := 0.0 ;
  548.   WALL_CONTROL_DURATION := 0.0 ;
  549.  
  550. end ITERATION ;
  551. ::::::::::
  552. A000033.ADA
  553. ::::::::::
  554. -- Iteration control package body ( for test development )
  555. --   This version is instrumented and may interefere with some
  556. --   types of tests 
  557.  
  558. with CPU_TIME_CLOCK ;  -- various choices on tape
  559. with CALENDAR ; -- used for WALL clock times
  560. with SYSTEM ; -- used to get value of TICK
  561. with TEXT_IO ;  -- only for diagnostics
  562. with DURATION_IO ;
  563.  
  564. package body ITERATION is -- A000032.ADA
  565.  
  566. --
  567. -- CPU time variables
  568. --
  569.   CONTROL_TIME_INITIAL : DURATION ; -- sampled from CPU_TIME_CLOCK at beginning
  570.   CONTROL_TIME_FINAL : DURATION ;  -- sampled from CPU_TIME_CLOCK at end
  571.   CONTROL_DURATION : DURATION ; -- (FINAL-INITIAL) the measured time in seconds
  572.   TEST_TIME_INITIAL : DURATION ; -- ditto for TEST
  573.   TEST_TIME_FINAL : DURATION ;
  574.   TEST_DURATION : DURATION ;
  575. --
  576. -- WALL time variables
  577. --
  578.   WALL_CONTROL_TIME_INITIAL : DURATION ; -- sampled from CLOCK at beginning
  579.   WALL_CONTROL_TIME_FINAL : DURATION ;  -- sampled from CLOCK at end
  580.   WALL_CONTROL_DURATION : DURATION ; -- (FINAL-INITIAL) measured time in seconds
  581.   WALL_TEST_TIME_INITIAL : DURATION ; -- ditto for TEST
  582.   WALL_TEST_TIME_FINAL : DURATION ;
  583.   WALL_TEST_DURATION : DURATION ;
  584. --
  585.   MINIMUM_TIME : DURATION := 1.0 ; -- required minimum value of test time
  586.   TEMP_TIME : FLOAT ; -- for scaling to microseconds
  587.   ITERATION_COUNT : INTEGER ;  -- change to make timing stable
  588.   CHECK : INTEGER ; -- saved from STOP_TEST call for scaling
  589.  
  590.   procedure START_CONTROL is
  591.   begin
  592.     CONTROL_TIME_INITIAL := CPU_TIME_CLOCK ;
  593.     WALL_CONTROL_TIME_INITIAL := CALENDAR.SECONDS(CALENDAR.CLOCK) ;
  594.   end START_CONTROL ;
  595.  
  596.   procedure STOP_CONTROL ( GLOBAL : INTEGER ;
  597.                            CHECK : INTEGER ) is
  598.   begin
  599.     CONTROL_TIME_FINAL := CPU_TIME_CLOCK ;
  600.     CONTROL_DURATION := CONTROL_TIME_FINAL - CONTROL_TIME_INITIAL ;
  601.     WALL_CONTROL_TIME_FINAL := CALENDAR.SECONDS(CALENDAR.CLOCK) ;
  602.     WALL_CONTROL_DURATION := WALL_CONTROL_TIME_FINAL -
  603.                              WALL_CONTROL_TIME_INITIAL ;
  604. --
  605.     if CHECK /= GLOBAL then
  606.       TEXT_IO.PUT_LINE ( " Fix control loop before making measurements." ) ;
  607.       TEXT_IO.PUT_LINE ( INTEGER'IMAGE ( GLOBAL ) & " = GLOBAL " ) ;
  608.       raise PROGRAM_ERROR ;
  609.     end if ;
  610.     TEXT_IO.PUT_LINE ( "Iteration " & INTEGER'IMAGE ( ITERATION_COUNT ) ) ;
  611.     DURATION_IO.PUT ( CONTROL_TIME_INITIAL );
  612.     DURATION_IO.PUT ( CONTROL_TIME_FINAL );
  613.     DURATION_IO.PUT ( CONTROL_TIME_DURATION );
  614.     TEXT_IO.NEW_LINE ;
  615.   end STOP_CONTROL ;
  616.  
  617.   procedure START_TEST is
  618.   begin
  619.     TEST_TIME_INITIAL := CPU_TIME_CLOCK ;
  620.     WALL_TEST_TIME_INITIAL := CALENDAR.SECONDS(CALENDAR.CLOCK) ;
  621.   end START_TEST ;
  622.  
  623.   procedure STOP_TEST ( GLOBAL : INTEGER ;
  624.                         CHECK : INTEGER ) is
  625.   begin
  626.     TEST_TIME_FINAL := CPU_TIME_CLOCK ;
  627.     TEST_DURATION := TEST_TIME_FINAL - TEST_TIME_INITIAL ;
  628.     WALL_TEST_TIME_FINAL := CALENDAR.SECONDS(CALENDAR.CLOCK) ;
  629.     WALL_TEST_DURATION := WALL_TEST_TIME_FINAL - WALL_TEST_TIME_INITIAL ;
  630. --
  631.     ITERATION.CHECK := CHECK ;
  632.     if CHECK /= GLOBAL then
  633.       TEXT_IO.PUT_LINE ( " Fix test loop before making measurements." ) ;
  634.       TEXT_IO.PUT_LINE ( INTEGER'IMAGE ( GLOBAL ) & " = GLOBAL " ) ;
  635.       raise PROGRAM_ERROR ;
  636.     end if ;
  637.   end STOP_TEST ;
  638.  
  639.   procedure FEATURE_TIMES ( CPU_TIME : out DURATION ;
  640.                             WALL_TIME : out DURATION ) is
  641.   begin
  642. --
  643. --  compute scaled results
  644. --
  645.     begin
  646.       TEMP_TIME := FLOAT ( TEST_DURATION - CONTROL_DURATION ) ;
  647.       TEMP_TIME := (1_000_000.0 * TEMP_TIME) / 
  648.                    ( FLOAT ( ITERATION_COUNT ) * FLOAT (CHECK) );
  649.       CPU_TIME := DURATION ( TEMP_TIME ) ;
  650.     exception
  651.       when others =>  -- bail out if trouble in conversion
  652.         CPU_TIME := 0.0 ;
  653.     end ;
  654. --
  655.     begin
  656.       TEMP_TIME := FLOAT ( WALL_TEST_DURATION - WALL_CONTROL_DURATION ) ;
  657.       TEMP_TIME := (1_000_000.0 * TEMP_TIME) / 
  658.                    ( FLOAT ( ITERATION_COUNT ) * FLOAT (CHECK) );
  659.       WALL_TIME := DURATION ( TEMP_TIME ) ;
  660.     exception
  661.       when others =>
  662.         WALL_TIME := 0.0 ;
  663.     end ;
  664.  
  665.   end FEATURE_TIMES ;
  666.  
  667.  
  668.   procedure INITIALIZE ( ITERATION_COUNT : out INTEGER ) is
  669.   begin
  670.     ITERATION_COUNT := 1 ;
  671.     ITERATION.ITERATION_COUNT := 1 ;
  672.   end INITIALIZE ;
  673.  
  674.   procedure TEST_STABLE ( ITERATION_COUNT : in out INTEGER ;
  675.                           STABLE : out BOOLEAN ) is
  676.   begin
  677.     if TEST_DURATION > MINIMUM_TIME then
  678.       STABLE := TRUE ;
  679.     elsif ITERATION_COUNT >= 16384 then
  680.       TEXT_IO.PUT_LINE ( "***** INCOMPLETE MEASUREMENT *****" ) ;
  681.       STABLE := TRUE ;
  682.     else
  683.       ITERATION_COUNT := ITERATION_COUNT + ITERATION_COUNT ;
  684.       ITERATION.ITERATION_COUNT := ITERATION_COUNT ;
  685.       STABLE := FALSE ;
  686.     END IF;  
  687.   end TEST_STABLE ;
  688.  
  689.  
  690. --
  691. begin
  692.  
  693.   if SYSTEM.TICK * 100 > MINIMUM_TIME then
  694.     MINIMUM_TIME := SYSTEM.TICK * 100 ;
  695.   end if;
  696.  
  697.   if DURATION'SMALL * 100 > MINIMUM_TIME then
  698.     MINIMUM_TIME := DURATION'SMALL * 100 ;
  699.   end if;
  700.  
  701. -- MINIMUM_TIME is now the larger of 1.0 second,
  702. --                                   100*SYSTEM.TICK,
  703. --                                   100*DURATION'SMALL
  704.  
  705.   CONTROL_DURATION := 0.0 ;
  706.   WALL_CONTROL_DURATION := 0.0 ;
  707.  
  708. end ITERATION ;
  709. ::::::::::
  710. A000041.ADA
  711. ::::::::::
  712. -- This is the universal specification for collecting output
  713. -- Various bodies supplied on the distribution tape include :
  714. --  A000042.ADA for screen or printed output
  715. --  A000043.ADA for saving results on disk
  716. --  A000044.ADA for saving result in memory ( No TEXT_IO )
  717. --
  718. --  CPU_DELTA and WALL_DELTA come from the package ITERATION.
  719. --  These values are the time for one feature, in microseconds, of type
  720. --  duration. Thus the limit is 86,400 microseconds.
  721.  
  722. package PIWG_IO is -- A000041.ADA
  723.  
  724.   SAVE_CPU_TIME : DURATION := 0.0 ; -- find this location in memory if using
  725.   SAVE_WALL_TIME : DURATION := 0.0 ; -- A000044.ADA as body.
  726.  
  727.   procedure PIWG_OUTPUT ( TESTNAME : in STRING ; -- only 12 characters saved
  728.                           CLASSNAME : in STRING ; -- only 12 characters saved
  729.                           CPU_DELTA : in DURATION ; -- scaled microseconds
  730.                           WALL_DELTA : in DURATION ; -- scaled microseconds
  731.                           NUM_OF_ITERATIONS : in INTEGER ;
  732.                           TEST_DESC_1 : in STRING ; -- only 80 characters saved
  733.                           TEST_DESC_2 : in STRING ; -- only 80 characters saved
  734.                           TEST_DESC_3 : in STRING ) ; -- ditto
  735.  
  736. -- Note that subtypes are not used because the calling programs would all
  737. -- have to supply exactly the correct length strings for all parameters.
  738.  
  739. end PIWG_IO ;
  740. ::::::::::
  741. A000042.ADA
  742. ::::::::::
  743. -- This is one of a number of optional PIWG_IO bodies.
  744. -- This body is for systems that have TEXT_IO and want either
  745. -- screen or printed output.
  746.  
  747. with TEXT_IO ; use TEXT_IO ;
  748. with DURATION_IO ;  --  A000001.ADA or A000002.ADA
  749.  
  750. package body PIWG_IO is -- A000042.ADA
  751.  
  752.   procedure PIWG_OUTPUT ( TESTNAME : in STRING ;
  753.                           CLASSNAME : in STRING ;
  754.                           CPU_DELTA : in DURATION ;
  755.                           WALL_DELTA : in DURATION ;
  756.                           NUM_OF_ITERATIONS : in INTEGER ;
  757.                           TEST_DESC_1 : in STRING ;
  758.                           TEST_DESC_2 : in STRING ;
  759.                           TEST_DESC_3 : in STRING ) is
  760.   begin
  761.     NEW_LINE ;
  762.     PUT ( "Test Name:   " ) ;
  763.     PUT ( TESTNAME ) ;
  764.     PUT ( "                        Class Name:  " ) ;
  765.     PUT_LINE ( CLASSNAME ) ;
  766.  
  767.     PUT ( "CPU Time:   " ) ;
  768.     DURATION_IO.PUT ( CPU_DELTA , 6 , 1 ) ;
  769.     PUT_LINE ( "  microseconds " ) ;
  770.  
  771.     PUT ( "Wall Time:  " ) ;
  772.     DURATION_IO.PUT ( WALL_DELTA , 6 , 1 ) ;
  773.     PUT ( "  microseconds.         Iteration Count:  " ) ;
  774.     PUT_LINE ( INTEGER'IMAGE( NUM_OF_ITERATIONS )) ;
  775.  
  776.     PUT_LINE ( "Test Description:" ) ;
  777.     PUT_LINE ( TEST_DESC_1 ) ;
  778.     PUT_LINE ( TEST_DESC_2 ) ;
  779.     PUT_LINE ( TEST_DESC_3 ) ;
  780.     NEW_LINE ( 2 ) ;
  781.  
  782.   end PIWG_OUTPUT ;
  783.  
  784. end PIWG_IO ;
  785. ::::::::::
  786. A000043.ADA
  787. ::::::::::
  788. with TEXT_IO;  use TEXT_IO;
  789. with DIRECT_IO;
  790. with DURATION_IO ; use DURATION_IO ;
  791.  
  792. package body PIWG_IO is
  793.  
  794.   subtype name_string is STRING(1..12);
  795.   subtype line_string is STRING(1..80);
  796.  
  797.   type io_record is
  798.     record
  799.       testname          : name_string;
  800.       classname         : name_string;
  801.       cpu_delta         : DURATION;
  802.       wall_delta        : DURATION;
  803.       num_of_iterations : INTEGER;
  804.       test_desc_1       : line_string;
  805.       test_desc_2       : line_string;
  806.       test_desc_3       : line_string;
  807.     end record;
  808.  
  809.   package PIWG_DIRECT_IO is new DIRECT_IO( IO_RECORD );
  810.   use PIWG_DIRECT_IO;
  811.  
  812.   disk_file : PIWG_DIRECT_IO.file_type;
  813.   record_index : PIWG_DIRECT_IO.count;
  814.  
  815. ------------------------------------
  816.   procedure OPEN_OUTPUT is
  817.   begin
  818.     begin
  819.       OPEN(disk_file, INOUT_FILE, "PIWGRES" );
  820.     exception
  821.       when PIWG_DIRECT_IO.NAME_ERROR =>
  822.         CREATE( disk_file, INOUT_FILE, "PIWGRES" );
  823.       when others =>
  824.         TEXT_IO.put ( "Error in opening disk file - PIWGRES ");
  825.         TEXT_IO.new_line;
  826.         TEXT_IO.put ( "Please check file namings for your particular host" );
  827.         TEXT_IO.new_line;
  828.     end;
  829.   end OPEN_OUTPUT;
  830.  
  831. ------------------------------------
  832.   procedure CLOSE_OUTPUT is
  833.   begin
  834.     CLOSE( disk_file );
  835.   end CLOSE_OUTPUT;
  836.  
  837. -----------------------------------
  838.   procedure PIWG_OUTPUT ( testname          : in string;
  839.                           classname         : in string;
  840.                           cpu_delta         : in DURATION;
  841.                           wall_delta        : in DURATION;
  842.                           num_of_iterations : in INTEGER;
  843.                           test_desc_1       : in string;
  844.                           test_desc_2       : in string;
  845.                           test_desc_3       : in string) is
  846.  
  847.     data_rec : io_record;
  848.  
  849.     function make_12( name : string ) return name_string is
  850.     begin
  851.      if name'length < 12 then
  852.        return name & ( name'length+1 .. 12 => ' ' ) ;
  853.      else
  854.        return name(1..12);
  855.      end if ;
  856.     end make_12;
  857.  
  858.     function make_80( name : string ) return line_string is
  859.     begin
  860.      if name'length < 80 then
  861.        return name & ( name'length+1 .. 80 => ' ' ) ;
  862.      else
  863.        return name(1..80);
  864.      end if ;
  865.     end make_80;
  866.  
  867.   begin
  868.  
  869.     if not IS_OPEN( disk_file )
  870.     then
  871.       OPEN_OUTPUT;
  872.     end if;
  873.  
  874.     record_index := SIZE( disk_file ) + PIWG_DIRECT_IO.COUNT(1);
  875.  
  876.     DATA_REC.testname := make_12 ( testname ) ;
  877.     DATA_REC.classname := make_12 ( classname ) ;
  878.     DATA_REC.cpu_delta := cpu_delta;
  879.     DATA_REC.wall_delta := wall_delta;
  880.     DATA_REC.num_of_iterations := num_of_iterations;
  881.     DATA_REC.test_desc_1 := make_80 ( test_desc_1 ) ;
  882.     DATA_REC.test_desc_2 := make_80 ( test_desc_2 ) ;
  883.     DATA_REC.test_desc_3 := make_80 ( test_desc_3 ) ;
  884.  
  885.     WRITE( disk_file, DATA_REC, record_index );
  886.  
  887.     CLOSE_OUTPUT;
  888.  
  889.   end PIWG_OUTPUT;
  890.  
  891. end PIWG_IO;
  892. ::::::::::
  893. A000044.ADA
  894. ::::::::::
  895. -- This is one of a number of optional PIWG_IO bodies.
  896. -- This body is for systems that DO NOT have TEXT_IO 
  897. --   the results are saved in memory, use debugger or other
  898. --   method to read out.
  899. --
  900. --   Note : some other references to TEXT_IO may have to be removed.
  901. --
  902.  
  903. package body PIWG_IO is -- A000044.ADA
  904.  
  905.   procedure PIWG_OUTPUT ( TESTNAME : in STRING ;
  906.                           CLASSNAME : in STRING ;
  907.                           CPU_DELTA : in DURATION ;
  908.                           WALL_DELTA : in DURATION ;
  909.                           NUM_OF_ITERATIONS : in INTEGER ;
  910.                           TEST_DESC_1 : in STRING ;
  911.                           TEST_DESC_2 : in STRING ;
  912.                           TEST_DESC_3 : in STRING ) is
  913.   begin
  914.     SAVE_CPU_TIME := CPU_DELTA ;
  915.     SAVE_WALL_TIME := WALL_DELTA ;
  916.   end PIWG_OUTPUT ;
  917.  
  918. end PIWG_IO ;
  919. ::::::::::
  920. A000049.ADA
  921. ::::::::::
  922. -- This is the report generator to execute if A000043.ADA was
  923. -- used for PIWG_IO
  924.  
  925. with TEXT_IO ; use TEXT_IO ;
  926. with DIRECT_IO ;
  927. with DURATION_IO ; use DURATION_IO ;
  928.  
  929. procedure A000049 is
  930.   subtype NAME_STRING is STRING ( 1 .. 12 ) ;
  931.   subtype LINE_STRING is STRING ( 1 .. 80 ) ;
  932.   USED_NAME : NAME_STRING := "************" ;
  933.  
  934. --
  935.   type IO_RECORD is
  936.     record
  937.       TESTNAME : NAME_STRING ;
  938.       CLASSNAME : NAME_STRING ;
  939.       CPU_DELTA : DURATION ;
  940.       WALL_DELTA : DURATION ;
  941.       NUM_OF_ITERATIONS : INTEGER ;
  942.       TEST_DESC_1 : LINE_STRING ;
  943.       TEST_DESC_2 : LINE_STRING ;
  944.       TEST_DESC_3 : LINE_STRING ;
  945.     end record ;
  946.  
  947. --
  948.   DATA_REC : IO_RECORD ;
  949.  
  950.  
  951.   package PIWG_DIRECT_IO is new DIRECT_IO ( IO_RECORD ) ;
  952.   use PIWG_DIRECT_IO ;
  953.  
  954. --
  955.   type DATA_ARRAY is array ( PIWG_DIRECT_IO.COUNT range <> ) of IO_RECORD ;
  956.  
  957. --
  958.   DISK_DATA : DATA_ARRAY ( 1 .. 2000 ) ;
  959.   CPU_TIMES : array ( 1 .. 20 ) of DURATION ;
  960.   WALL_TIMES : array ( 1 .. 20 ) of DURATION ;
  961.   COUNT_TIMES : POSITIVE ;
  962.  
  963. --
  964.   DISK_FILE : PIWG_DIRECT_IO.FILE_TYPE ;
  965.   RECORD_INDEX : PIWG_DIRECT_IO.COUNT ;
  966.   RECORD_INDEX_FIRST : PIWG_DIRECT_IO.COUNT ;
  967.   RECORD_INDEX_LAST : PIWG_DIRECT_IO.COUNT ;
  968.   RECORD_SEARCH : PIWG_DIRECT_IO.COUNT ;
  969.  
  970. --
  971.   TESTNAME : NAME_STRING ;
  972.   CLASSNAME : NAME_STRING ;
  973.   CPU_DELTA : DURATION ;
  974.   WALL_DELTA : DURATION ;
  975.   NUM_OF_ITERATIONS : INTEGER ;
  976.   TEST_DESC_1 : LINE_STRING ;
  977.   TEST_DESC_2 : LINE_STRING ;
  978.   TEST_DESC_3 : LINE_STRING ;
  979.  
  980. --
  981.  
  982.   procedure OPEN_INPUT is
  983.   begin
  984.     begin
  985.       OPEN ( DISK_FILE , IN_FILE , "PIWGRES" ) ;
  986.     exception
  987.       when others =>
  988.         PUT ( "Error in opening disk file - PIWGRES " ) ;
  989.         NEW_LINE ;
  990.         PUT ( "Please check file namings for your particular host" ) ;
  991.         NEW_LINE ;
  992.     end ;
  993.   end OPEN_INPUT ;
  994.  
  995. --
  996.  
  997.   procedure CLOSE_INPUT is
  998.   begin
  999.     CLOSE ( DISK_FILE ) ;
  1000.   end CLOSE_INPUT ;
  1001.  
  1002. --
  1003.  
  1004.   procedure PIWG_OUTPUT ( TESTNAME : in STRING ;
  1005.                           CLASSNAME : in STRING ;
  1006.                           CPU_DELTA : in DURATION ;
  1007.                           WALL_DELTA : in DURATION ;
  1008.                           NUM_OF_ITERATIONS : in INTEGER ;
  1009.                           SAMPLE_COUNT : POSITIVE ;
  1010.                           TEST_DESC_1 : in STRING ;
  1011.                           TEST_DESC_2 : in STRING ;
  1012.                           TEST_DESC_3 : in STRING ) is
  1013.   begin
  1014.     NEW_LINE ;
  1015.     PUT ( "Test Name:   " ) ;
  1016.     PUT ( TESTNAME ) ;
  1017.     PUT ( "                        Class Name:  " ) ;
  1018.     PUT_LINE ( CLASSNAME ) ;
  1019.     PUT ( "CPU Time:   " ) ;
  1020.     DURATION_IO.PUT ( CPU_DELTA , 6 , 1 ) ;
  1021.     PUT_LINE ( "  microseconds " ) ;
  1022.     PUT ( "Wall Time:  " ) ;
  1023.     DURATION_IO.PUT ( WALL_DELTA , 6 , 1 ) ;
  1024.     PUT ( "  microseconds.         Iteration Count:  " ) ;
  1025.     PUT_LINE ( INTEGER'IMAGE( NUM_OF_ITERATIONS )) ;
  1026.     PUT ( "                                            number of samples:" ) ;
  1027.     PUT_LINE ( POSITIVE'IMAGE( SAMPLE_COUNT )) ;
  1028.     PUT_LINE ( "Test Description:" ) ;
  1029.     PUT_LINE ( TEST_DESC_1 ) ;
  1030.     PUT_LINE ( TEST_DESC_2 ) ;
  1031.     PUT_LINE ( TEST_DESC_3 ) ;
  1032.     NEW_LINE ( 2 ) ;
  1033.   end PIWG_OUTPUT ;
  1034.  
  1035. --
  1036. begin
  1037.   PUT_LINE ( "A000049 report beginning" ) ;
  1038.   if not IS_OPEN ( DISK_FILE ) then
  1039.     OPEN_INPUT ;
  1040.   end if ;
  1041.  
  1042. --
  1043.   RECORD_INDEX_LAST := SIZE ( DISK_FILE ) ;
  1044.   RECORD_INDEX_FIRST := PIWG_DIRECT_IO.COUNT ( 1 ) ;
  1045.   RECORD_INDEX := RECORD_INDEX_FIRST ;
  1046.  
  1047. --
  1048.   while RECORD_INDEX <= RECORD_INDEX_LAST loop
  1049.     READ ( DISK_FILE , DATA_REC , RECORD_INDEX ) ;
  1050.     DISK_DATA ( RECORD_INDEX ) := DATA_REC ;
  1051.     RECORD_INDEX := RECORD_INDEX + PIWG_DIRECT_IO.COUNT ( 1 ) ;
  1052.   end loop ;
  1053.   CLOSE_INPUT ;
  1054.   RECORD_INDEX := RECORD_INDEX_FIRST ;
  1055. --
  1056.   while RECORD_INDEX <= RECORD_INDEX_LAST loop
  1057.     TESTNAME := DISK_DATA ( RECORD_INDEX ).TESTNAME ;
  1058.     if TESTNAME /= USED_NAME then
  1059.       CLASSNAME := DISK_DATA ( RECORD_INDEX ).CLASSNAME ;
  1060.       NUM_OF_ITERATIONS := DISK_DATA ( RECORD_INDEX ).NUM_OF_ITERATIONS ;
  1061.       TEST_DESC_1 := DISK_DATA ( RECORD_INDEX ).TEST_DESC_1 ;
  1062.       TEST_DESC_2 := DISK_DATA ( RECORD_INDEX ).TEST_DESC_2 ;
  1063.       TEST_DESC_3 := DISK_DATA ( RECORD_INDEX ).TEST_DESC_3 ;
  1064.       COUNT_TIMES := 1 ;
  1065.       CPU_TIMES ( COUNT_TIMES ) := DISK_DATA ( RECORD_INDEX ).CPU_DELTA ;
  1066.       WALL_TIMES ( COUNT_TIMES ) := DISK_DATA ( RECORD_INDEX ).WALL_DELTA ;
  1067.  
  1068. --
  1069.       RECORD_SEARCH := RECORD_INDEX + 1 ;
  1070.       while RECORD_SEARCH <= RECORD_INDEX_LAST loop
  1071.         if TESTNAME = DISK_DATA ( RECORD_SEARCH ).TESTNAME then
  1072.           DISK_DATA ( RECORD_SEARCH ).TESTNAME := USED_NAME ;
  1073.           COUNT_TIMES := COUNT_TIMES + 1 ;
  1074.           CPU_TIMES ( COUNT_TIMES ) := DISK_DATA ( RECORD_SEARCH ).CPU_DELTA ;
  1075.           WALL_TIMES ( COUNT_TIMES ) := DISK_DATA ( RECORD_SEARCH ).WALL_DELTA ;
  1076.         end if ;
  1077.         RECORD_SEARCH := RECORD_SEARCH + 1 ;
  1078.       end loop ;
  1079.       CPU_DELTA := 0.0 ;
  1080.       WALL_DELTA := 0.0 ;
  1081.       for I in 1 .. COUNT_TIMES loop
  1082.         CPU_DELTA := CPU_DELTA + CPU_TIMES ( I ) ;
  1083.         WALL_DELTA := WALL_DELTA + WALL_TIMES ( I ) ;
  1084.       end loop ;
  1085.       CPU_DELTA := DURATION ( CPU_DELTA / DURATION ( COUNT_TIMES ) ) ;
  1086.       WALL_DELTA := DURATION ( WALL_DELTA / DURATION ( COUNT_TIMES ) ) ;
  1087.       PIWG_OUTPUT ( TESTNAME , CLASSNAME , CPU_DELTA , WALL_DELTA ,
  1088.          NUM_OF_ITERATIONS , COUNT_TIMES , TEST_DESC_1 , TEST_DESC_2 ,
  1089.          TEST_DESC_3 ) ;
  1090.  
  1091. --
  1092.     end if ;
  1093.     RECORD_INDEX := RECORD_INDEX + PIWG_DIRECT_IO.COUNT ( 1 ) ;
  1094.   end loop ;
  1095.   PUT_LINE ( "A000049 report complete" ) ;
  1096. end A000049 ;
  1097. ::::::::::
  1098. A000051.ADA
  1099. ::::::::::
  1100. -- A000051
  1101. --
  1102. -- This is an executable procedure that can be called outside
  1103. -- whatever is being measured.
  1104. -- This version just prints present WALL time and CPU time.
  1105. -- Other versions are avaliable that compute differences and save
  1106. -- results on disk.
  1107. --
  1108. -- USAGE :
  1109. --             A000051          (1)
  1110. --             A000051          (2)
  1111. --             A000051          (3)
  1112. --             run being measured
  1113. --             A000051          (4)
  1114. --
  1115. -- RESULT :
  1116. --             ( (4) - (3) ) - ( (2) - (1) ) is the measurement
  1117. --
  1118. --             The second expression takes out the time to make the
  1119. --             measurement. As a check, (3) - (2) should be close to (2) - (1)
  1120. --
  1121.  
  1122. with CPU_TIME_CLOCK ;  -- various choices on tape
  1123. with CALENDAR ; -- used for WALL clock times
  1124. with TEXT_IO ;  -- for printing times
  1125. with DURATION_IO ; -- for printing times
  1126.  
  1127. procedure A000051 is
  1128. begin
  1129.   TEXT_IO.PUT ( " CPU time now=" ) ;
  1130.   DURATION_IO.PUT ( CPU_TIME_CLOCK ) ;
  1131.   TEXT_IO.PUT ( "        WALL time now=" ) ;
  1132.   DURATION_IO.PUT ( CALENDAR.SECONDS(CALENDAR.CLOCK) ) ;
  1133.   TEXT_IO.PUT_LINE ( " seconds." ) ;
  1134. end A000051 ;
  1135. ::::::::::
  1136. A000052.ADA
  1137. ::::::::::
  1138. -- A000052
  1139. --
  1140. -- This is an executable procedure that can be called outside
  1141. -- whatever is being measured.
  1142. -- This version works in conjunction with A000053,A000054,A000055
  1143. -- to measure CPU time and WALL time without modifying the tests
  1144. -- There will be a file named A000052D created and used by these
  1145. -- procedures.
  1146. --
  1147. -- USAGE :
  1148. --             A000052
  1149. --               optional control
  1150. --             A000053
  1151. --             A000054
  1152. --               test being measured
  1153. --             A000055
  1154. --
  1155. -- RESULT :
  1156. --             ( (55) - (54) ) - ( (53) - (52) ) is the measurement
  1157. --
  1158. --             The second expression takes out the time to make the
  1159. --             measurement. As a check, (3) - (2) should be close to (2) - (1)
  1160. --
  1161. --             The printout gives the CPU and WALL time in seconds for
  1162. --             the run being measured.
  1163. --
  1164.  
  1165. with CPU_TIME_CLOCK ;  -- various choices on tape
  1166. with CALENDAR ; -- used for WALL clock times
  1167. with TEXT_IO ;  -- for printing times
  1168. with DURATION_IO ; -- for printing times
  1169.  
  1170. procedure A000052 is
  1171.   MY_FILE : TEXT_IO.FILE_TYPE ;
  1172. begin
  1173.   TEXT_IO.CREATE ( MY_FILE , TEXT_IO.OUT_FILE , "A000052D" ) ;
  1174.   TEXT_IO.PUT ( MY_FILE , " '52 CPU time =" ) ;
  1175.   DURATION_IO.PUT ( MY_FILE , CPU_TIME_CLOCK ) ;
  1176.   TEXT_IO.PUT ( MY_FILE , "        WALL time =" ) ;
  1177.   DURATION_IO.PUT ( MY_FILE , CALENDAR.SECONDS(CALENDAR.CLOCK) ) ;
  1178.   TEXT_IO.PUT_LINE ( MY_FILE , " seconds." ) ;
  1179. end A000052 ;
  1180. ::::::::::
  1181. A000053.ADA
  1182. ::::::::::
  1183. -- A000053
  1184. --
  1185. -- This is an executable procedure that can be called outside
  1186. -- whatever is being measured.
  1187. -- This version works in conjunction with A000052,A000054,A000055
  1188. -- to measure CPU time and WALL time without modifying the tests
  1189. -- There will be a file named A000052D created and used by these
  1190. -- procedures.
  1191. --
  1192. -- USAGE :
  1193. --             A000052
  1194. --               optional control
  1195. --             A000053
  1196. --             A000054
  1197. --               test being measured
  1198. --             A000055
  1199. --
  1200. -- RESULT :
  1201. --             ( (55) - (54) ) - ( (53) - (52) ) is the measurement
  1202. --
  1203. --             The second expression takes out the time to make the
  1204. --             measurement. As a check, (3) - (2) should be close to (2) - (1)
  1205. --
  1206. --             The printout gives the CPU and WALL time in seconds for
  1207. --             the run being measured.
  1208. --
  1209.  
  1210. with CPU_TIME_CLOCK ;  -- various choices on tape
  1211. with CALENDAR ; -- used for WALL clock times
  1212. with TEXT_IO ;  -- for printing times
  1213. with DURATION_IO ; -- for printing times
  1214.  
  1215. procedure A000053 is
  1216.   MY_FILE : TEXT_IO.FILE_TYPE ;
  1217.   HOLD : STRING ( 1 .. 80 ) ;
  1218.   LENGTH : NATURAL ;
  1219.   CPU_SECONDS_NOW : DURATION := CPU_TIME_CLOCK ;
  1220.   WALL_SECONDS_NOW : DURATION := CALENDAR.SECONDS(CALENDAR.CLOCK) ;
  1221.  
  1222. begin
  1223.   TEXT_IO.OPEN ( MY_FILE , TEXT_IO.IN_FILE , "A000052D" ) ;
  1224.   TEXT_IO.GET_LINE ( MY_FILE , HOLD , LENGTH ) ;
  1225.   TEXT_IO.CLOSE ( MY_FILE ) ;
  1226.   TEXT_IO.OPEN ( MY_FILE , TEXT_IO.OUT_FILE , "A000052D" ) ;
  1227.   TEXT_IO.PUT_LINE ( MY_FILE , HOLD ( 1 .. LENGTH ) ) ;
  1228.   TEXT_IO.PUT ( MY_FILE , " '53 CPU time =" ) ;
  1229.   DURATION_IO.PUT ( MY_FILE , CPU_SECONDS_NOW) ;
  1230.   TEXT_IO.PUT ( MY_FILE , "        WALL time =" ) ;
  1231.   DURATION_IO.PUT ( MY_FILE , WALL_SECONDS_NOW ) ;
  1232.   TEXT_IO.PUT_LINE ( MY_FILE , " seconds." ) ;
  1233.   TEXT_IO.CLOSE ( MY_FILE ) ;
  1234. end A000053 ;
  1235. ::::::::::
  1236. A000054.ADA
  1237. ::::::::::
  1238. -- A000054
  1239. --
  1240. -- This is an executable procedure that can be called outside
  1241. -- whatever is being measured.
  1242. -- This version works in conjunction with A000052,A000054,A000055
  1243. -- to measure CPU time and WALL time without modifying the tests
  1244. -- There will be a file named A000052D created and used by these
  1245. -- procedures.
  1246. --
  1247. -- USAGE :
  1248. --             A000052
  1249. --               optional control
  1250. --             A000053
  1251. --             A000054
  1252. --               test being measured
  1253. --             A000055
  1254. --
  1255. -- RESULT :
  1256. --             ( (55) - (54) ) - ( (53) - (52) ) is the measurement
  1257. --
  1258. --             The second expression takes out the time to make the
  1259. --             measurement. As a check, (3) - (2) should be close to (2) - (1)
  1260. --
  1261. --             The printout gives the CPU and WALL time in seconds for
  1262. --             the run being measured.
  1263. --
  1264.  
  1265. with CPU_TIME_CLOCK ;  -- various choices on tape
  1266. with CALENDAR ; -- used for WALL clock times
  1267. with TEXT_IO ;  -- for printing times
  1268. with DURATION_IO ; -- for printing times
  1269.  
  1270. procedure A000054 is
  1271.   MY_FILE : TEXT_IO.FILE_TYPE ;
  1272.   HOLD_1 : STRING ( 1 .. 80 ) ;
  1273.   HOLD_2 : STRING ( 1 .. 80 ) ;
  1274.   LENGTH : NATURAL ;
  1275. begin
  1276.   TEXT_IO.OPEN ( MY_FILE , TEXT_IO.IN_FILE , "A000052D" ) ;
  1277.   TEXT_IO.GET_LINE ( MY_FILE , HOLD_1 , LENGTH ) ;
  1278.   TEXT_IO.GET_LINE ( MY_FILE , HOLD_2 , LENGTH ) ;
  1279.   TEXT_IO.CLOSE ( MY_FILE ) ;
  1280.   TEXT_IO.OPEN ( MY_FILE , TEXT_IO.OUT_FILE , "A000052D" ) ;
  1281.   TEXT_IO.PUT_LINE ( MY_FILE , HOLD_1 ( 1 .. LENGTH ) ) ;
  1282.   TEXT_IO.PUT_LINE ( MY_FILE , HOLD_2 ( 1 .. LENGTH ) ) ;
  1283.   TEXT_IO.PUT ( MY_FILE , " '54 CPU time =" ) ;
  1284.   DURATION_IO.PUT ( MY_FILE , CPU_TIME_CLOCK ) ;
  1285.   TEXT_IO.PUT ( MY_FILE , "        WALL time =" ) ;
  1286.   DURATION_IO.PUT ( MY_FILE , CALENDAR.SECONDS(CALENDAR.CLOCK) ) ;
  1287.   TEXT_IO.PUT_LINE ( MY_FILE , " seconds." ) ;
  1288.   TEXT_IO.CLOSE ( MY_FILE ) ;
  1289. end A000054 ;
  1290. ::::::::::
  1291. A000055.ADA
  1292. ::::::::::
  1293. -- A000055
  1294. --
  1295. -- This is an executable procedure that can be called outside
  1296. -- whatever is being measured.
  1297. -- This version works in conjunction with A000052,A000054,A000055
  1298. -- to measure CPU time and WALL time without modifying the tests
  1299. -- There will be a file named A000052D created and used by these
  1300. -- procedures.
  1301. --
  1302. -- USAGE :
  1303. --             A000052
  1304. --               optional control
  1305. --             A000053
  1306. --             A000054
  1307. --               test being measured
  1308. --             A000055
  1309. --
  1310. -- RESULT :
  1311. --             ( (55) - (54) ) - ( (53) - (52) ) is the measurement
  1312. --
  1313. --             The second expression takes out the time to make the
  1314. --             measurement. As a check, (3) - (2) should be close to (2) - (1)
  1315. --
  1316. --             The printout gives the CPU and WALL time in seconds for
  1317. --             the run being measured.
  1318. --
  1319.  
  1320. with CPU_TIME_CLOCK ;  -- various choices on tape
  1321. with CALENDAR ; -- used for WALL clock times
  1322. with TEXT_IO ;  -- for printing times
  1323. with DURATION_IO ; -- for printing times
  1324.  
  1325. procedure A000055 is
  1326.   MY_FILE : TEXT_IO.FILE_TYPE ;
  1327.   HOLD_1 : STRING ( 1 .. 80 ) ;
  1328.   HOLD_2 : STRING ( 1 .. 80 ) ;
  1329.   HOLD_3 : STRING ( 1 .. 80 ) ;
  1330.   LENGTH : NATURAL ;
  1331.   START : POSITIVE ;
  1332.   END_POS : POSITIVE ;
  1333.   CPU_SECONDS_NOW : DURATION := CPU_TIME_CLOCK ;
  1334.   WALL_SECONDS_NOW : DURATION := CALENDAR.SECONDS(CALENDAR.CLOCK) ;
  1335.   CPU_SECONDS_OVERHEAD : DURATION ;
  1336.   WALL_SECONDS_OVERHEAD : DURATION ;
  1337.   CPU_SECONDS_OVERHEAD_2 : DURATION ;
  1338.   WALL_SECONDS_OVERHEAD_2 : DURATION ;
  1339.   CPU_SECONDS_OF_TEST : DURATION ;
  1340.   WALL_SECONDS_OF_TEST : DURATION ;
  1341. --
  1342. --  Function to find the mark "=" in the record befor the value
  1343. --
  1344.   function MARK ( ITEM : STRING ) return positive is
  1345.   begin
  1346.     for I in ITEM'RANGE loop
  1347.       if ITEM ( I ) = '=' then
  1348.         return I + 1 ;
  1349.       end if ;
  1350.     end loop ; -- error if loop terminates
  1351.     raise PROGRAM_ERROR ;
  1352.   end MARK ;
  1353.  
  1354. begin
  1355.  
  1356. --
  1357. --   Write out full results for possible future analysis
  1358. --
  1359.   TEXT_IO.OPEN ( MY_FILE , TEXT_IO.IN_FILE , "A000052D" ) ;
  1360.   TEXT_IO.GET_LINE ( MY_FILE , HOLD_1 , LENGTH ) ;
  1361.   TEXT_IO.GET_LINE ( MY_FILE , HOLD_2 , LENGTH ) ;
  1362.   TEXT_IO.GET_LINE ( MY_FILE , HOLD_3 , LENGTH ) ;
  1363.   TEXT_IO.CLOSE ( MY_FILE ) ;
  1364.   TEXT_IO.OPEN ( MY_FILE , TEXT_IO.OUT_FILE , "A000052D" ) ;
  1365.   TEXT_IO.PUT_LINE ( MY_FILE , HOLD_1 ( 1 .. LENGTH ) ) ;
  1366.   TEXT_IO.PUT_LINE ( MY_FILE , HOLD_2 ( 1 .. LENGTH ) ) ;
  1367.   TEXT_IO.PUT_LINE ( MY_FILE , HOLD_3 ( 1 .. LENGTH ) ) ;
  1368.   TEXT_IO.PUT ( MY_FILE , " '55 CPU time =" ) ;
  1369.   DURATION_IO.PUT ( MY_FILE , CPU_SECONDS_NOW ) ;
  1370.   TEXT_IO.PUT ( MY_FILE , "        WALL time =" ) ;
  1371.   DURATION_IO.PUT ( MY_FILE , WALL_SECONDS_NOW ) ;
  1372.   TEXT_IO.PUT_LINE ( MY_FILE , " seconds." ) ;
  1373.   TEXT_IO.CLOSE ( MY_FILE ) ;
  1374. --
  1375. --  Compute and print results
  1376. --
  1377.   START := MARK ( HOLD_1 ) ;
  1378.   DURATION_IO.GET ( HOLD_1(START..LENGTH), CPU_SECONDS_OVERHEAD, END_POS ) ;
  1379.   START := MARK ( HOLD_1(START..LENGTH) ) ;
  1380.   DURATION_IO.GET ( HOLD_1(START..LENGTH), WALL_SECONDS_OVERHEAD, END_POS ) ;
  1381.   START := MARK ( HOLD_2 ) ;
  1382.   DURATION_IO.GET ( HOLD_2(START..LENGTH), CPU_SECONDS_OVERHEAD_2, END_POS ) ;
  1383.   START := MARK ( HOLD_2(START..LENGTH) ) ;
  1384.   DURATION_IO.GET ( HOLD_2(START..LENGTH), WALL_SECONDS_OVERHEAD_2, END_POS ) ;
  1385.   START := MARK ( HOLD_3 ) ;
  1386.   DURATION_IO.GET ( HOLD_3(START..LENGTH), CPU_SECONDS_OF_TEST, END_POS ) ;
  1387.   START := MARK ( HOLD_3(START..LENGTH) ) ;
  1388.   DURATION_IO.GET ( HOLD_3(START..LENGTH), WALL_SECONDS_OF_TEST, END_POS ) ;
  1389.   CPU_SECONDS_OF_TEST := ( CPU_SECONDS_NOW - CPU_SECONDS_OF_TEST ) - 
  1390.                          ( CPU_SECONDS_OVERHEAD_2 - CPU_SECONDS_OVERHEAD ) ;
  1391.   WALL_SECONDS_OF_TEST := ( WALL_SECONDS_NOW - WALL_SECONDS_OF_TEST ) - 
  1392.                           ( WALL_SECONDS_OVERHEAD_2 - WALL_SECONDS_OVERHEAD ) ;
  1393.   TEXT_IO.PUT_LINE ( "Measurement" ) ;
  1394.   TEXT_IO.PUT ( "CPU Time:   " ) ;
  1395.   DURATION_IO.PUT ( CPU_SECONDS_OF_TEST , 6 , 2 ) ;
  1396.   TEXT_IO.PUT_LINE ( "  seconds" ) ;
  1397.   TEXT_IO.PUT ( "Wall Time:  " ) ;
  1398.   DURATION_IO.PUT ( WALL_SECONDS_OF_TEST , 6 , 2 ) ;
  1399.   TEXT_IO.PUT_LINE ( "  seconds" ) ;
  1400. end A000055 ;
  1401. ::::::::::
  1402. A000091.ADA
  1403. ::::::::::
  1404. -------------------------------------------------------------------------------
  1405. --                                                                           --
  1406. --                "DHRYSTONE" Benchmark Program                              --
  1407. --                -----------------------------                              --
  1408. --                                                                           --
  1409. --         Version ADA/1                                                     --
  1410. --                                                                           --
  1411. --         Date:   04/15/84                                                  --
  1412. --                                                                           --
  1413. --         Author: Reinhold P. Weicker                                       --
  1414. --                                                                           --
  1415. --                                                                           --
  1416. --  As published in Communications of ACM, October 1984  Vol 27 No 10        --
  1417. --                                                                           --
  1418. -------------------------------------------------------------------------------
  1419. --                                                                           --
  1420. -- The following program contains statements of a high-level programming     --
  1421. -- language (Ada) in a distribution considered representative:               --
  1422. --                                                                           --
  1423. --   assignments               53%                                           --
  1424. --   control statements        32%                                           --
  1425. --   procedures, function call 15%                                           --
  1426.  
  1427. -- 100 statements are dynamically executed. The program is balanced with     --
  1428. -- respect to the three aspects:                                             --
  1429. --                                                                           --
  1430. --    - statement type                                                       --
  1431. --    - operand type (for simple data types)                                 --
  1432. --    - operand access                                                       --
  1433. --         operand global, local, parameter, or constant.                    --
  1434. --                                                                           --
  1435. -- The combination of these three aspects is balanced only approximately.    --
  1436. --                                                                           --
  1437. -- The program does not compute anything meaningful, but it is syntactically --
  1438. -- and semantically correct. All variables have a value assigned to them     --
  1439. -- before they are used as a source operand                                  --
  1440. -------------------------------------------------------------------------------
  1441. package global_def is
  1442. ------------------
  1443.  
  1444. -- global definintions
  1445.  
  1446. type Enumeration is (ident_1,ident_2,ident_3,ident_4,ident_5);
  1447.  
  1448. subtype one_to_thirty is integer range 1..30;
  1449. subtype one_to_fifty is integer range 1..50;
  1450. subtype capital_letter is character range 'A'..'Z';
  1451.  
  1452. type String_30 is array(one_to_thirty) of character;
  1453.     pragma pack(string_30);
  1454.  
  1455. type array_1_dim_integer is array (one_to_fifty) of integer;
  1456. type array_2_dim_integer is array (one_to_fifty,
  1457.                                    one_to_fifty)  of integer;
  1458.  
  1459. type record_type(discr:enumeration:=ident_1);
  1460.  
  1461. type record_pointer is access record_type;
  1462.  
  1463. type record_type(discr:enumeration:=ident_1) is
  1464.     record
  1465.         pointer_comp:           record_pointer;
  1466.         case discr is
  1467.         when ident_1 =>         -- only this variant is used,
  1468.                                 -- but in some cases discriminant
  1469.                                 -- checks are necessary
  1470.           enum_comp:            enumeration;
  1471.           int_comp:             one_to_fifty;
  1472.           string_comp:          string_30;
  1473.         when ident_2 =>
  1474.           enum_comp_2:          enumeration;
  1475.           string_comp_2:        string_30;
  1476.         when others =>
  1477.           char_comp_1,
  1478.           char_comp_2:          character;
  1479.         end case;
  1480.     end record;
  1481.  
  1482. end global_def;
  1483.  
  1484.     with global_def;
  1485.     use global_def;
  1486.  
  1487. package pack_1 is
  1488. -------------
  1489.  
  1490.     procedure proc_0;
  1491.     procedure proc_1(pointer_par_in:  in      record_pointer);
  1492.     procedure proc_2(int_par_in_out:  in out  one_to_fifty);
  1493.     procedure proc_3(pointer_par_out: out     record_pointer);
  1494.  
  1495.     int_glob:   integer;
  1496.  
  1497. end pack_1;
  1498.  
  1499.     with global_def;
  1500.     use global_def;
  1501.  
  1502. package pack_2 is
  1503. --------------
  1504.  
  1505.     procedure proc_6 (enum_par_in:      in      enumeration;
  1506.                       enum_par_out:     out     enumeration);
  1507.  
  1508.     procedure proc_7 (int_par_in_1,
  1509.                       int_par_in_2:     in      one_to_fifty;
  1510.                       int_par_out:      out     one_to_fifty);
  1511.  
  1512.     procedure proc_8 (array_par_in_out_1: in out array_1_dim_integer;
  1513.                       array_par_in_out_2: in out array_2_dim_integer;
  1514.                       int_par_in_1,
  1515.                       int_par_in_2:       in     integer);
  1516.  
  1517.     function func_1  (char_par_in_1,
  1518.                       char_par_in_2:      in     capital_letter)
  1519.                                                    return enumeration;
  1520.  
  1521.     function func_2  (string_par_in_1,
  1522.                       string_par_in_2:    in    string_30)
  1523.                                                    return boolean;
  1524.  
  1525. end pack_2;
  1526.  
  1527. with global_def, pack_1;
  1528. use global_def;
  1529.  
  1530. procedure A000091 is -- Dhrystone
  1531. --------------
  1532.  
  1533. begin
  1534.     pack_1.proc_0;      -- proc_0 is actually the main program, but it is
  1535.                         -- part of a package, and a program within a
  1536.                         -- package can not be designated as the main
  1537.                         -- program for execution. Therefore proc_0 is
  1538.                         -- activated by a call from "main".
  1539.  
  1540. end A000091 ;
  1541.  
  1542. with global_def,pack_2;
  1543. use global_def;
  1544. with cpu_time_clock;
  1545. with text_io;
  1546. with duration_io;
  1547.  
  1548. package body pack_1 is
  1549. -----------
  1550.  
  1551.     bool_glob:          boolean;
  1552.     char_glob_1,
  1553.     char_glob_2:        character;
  1554.     array_glob_1:       array_1_dim_integer;
  1555.     array_glob_2:       array_2_dim_integer;
  1556.     pointer_glob,
  1557.     pointer_glob_next:  record_pointer;
  1558.  
  1559.     start_time : duration ;
  1560.     stop_time : duration ;
  1561.     iteration_count : constant := 10_000 ;
  1562.  
  1563.     procedure proc_4;
  1564.     procedure proc_5;
  1565.  
  1566. procedure proc_0
  1567. is
  1568.     int_loc_1,
  1569.     int_loc_2,
  1570.     int_loc_3:          one_to_fifty;
  1571.     char_loc:           character;
  1572.     enum_loc:           enumeration;
  1573.     string_loc_1,
  1574.     string_loc_2:       string_30;
  1575.  
  1576.     begin
  1577.         -- initializations
  1578.         pack_1.pointer_glob_next := new record_type;
  1579.  
  1580.         pack_1.pointer_glob := new record_type
  1581.                              '(
  1582.                              pointer_comp => pack_1.pointer_glob_next,
  1583.                              discr        => ident_1,
  1584.                              enum_comp    => ident_3,
  1585.                              int_comp     => 40,
  1586.                              string_comp  => "DHRYSTONE PROGRAM, SOME STRING"
  1587.                                 );
  1588.  
  1589.         string_loc_1 := "DHRYSTONE PROGRAM, 1'ST STRING";
  1590.  
  1591. ---------------
  1592. -- start timer here
  1593. ---------------
  1594.      start_time := cpu_time_clock ;
  1595.      for i in 1 .. iteration_count loop
  1596.  
  1597.         proc_5;
  1598.         proc_4;
  1599.          -- char_glob_1 = 'A', char_glob_2 = 'B', bool_glob = false
  1600.  
  1601.         int_loc_1 := 2;
  1602.         int_loc_2 := 3;
  1603.         string_loc_2 := "DHRYSTONE PROGRAM, 2'ND STRING";
  1604.         enum_loc := ident_2 ;
  1605.         bool_glob := not pack_2.func_2( string_loc_1,string_loc_2);
  1606.         -- bool_glob = true
  1607.         while int_loc_1 < int_loc_2 loop --loop body executed once
  1608.            int_loc_3 := 5 * int_loc_1 - int_loc_2;
  1609.            -- int_loc_3 = 7
  1610.            pack_2.proc_7(int_loc_1,int_loc_2,int_loc_3);
  1611.            -- int_loc_3 = 7
  1612.            int_loc_1 := int_loc_1 + 1;
  1613.         end loop;
  1614.            -- int_loc_1 = 3
  1615.         pack_2.proc_8(array_glob_1,array_glob_2,int_loc_1,int_loc_3);
  1616.           -- int_glob = 5
  1617.         proc_1(pointer_glob);
  1618.         for char_index in 'A'..Char_glob_2 loop --loop body executed twice
  1619.             if enum_loc = pack_2.func_1(char_index,'C')
  1620.             then   -- not executed
  1621.                 pack_2.proc_6(ident_1,enum_loc);
  1622.             end if;
  1623.         end loop;
  1624.           -- enum_loc = ident_1
  1625.           -- int_loc = 3, int_loc_2 = 3, int_loc_3 = 7
  1626.         int_loc_3 := int_loc_2 * int_loc_1;
  1627.         int_loc_2 := int_loc_3 / int_loc_1;
  1628.         int_loc_2 := 7 * ( int_loc_3 - int_loc_2 ) - int_loc_1;
  1629.         proc_2(int_loc_1);
  1630.  
  1631.      end loop ;
  1632.      stop_time := cpu_time_clock ;
  1633.      duration_io.put((stop_time-start_time)*1000/iteration_count);
  1634.      text_io.put_line(" is time in milliseconds for one Dhrystone");
  1635. ------------------
  1636. -- stop timer here
  1637. ------------------
  1638.  
  1639. end proc_0;
  1640.  
  1641. procedure proc_1(pointer_par_in: in record_pointer) is -- executed once
  1642.  
  1643.         next_record: record_type
  1644.             renames pointer_par_in.pointer_comp.all; -- pointer_glob_next.all
  1645. begin
  1646.         next_record :=pointer_glob.all;
  1647.         pointer_par_in.int_comp := 5;
  1648.         next_record.int_comp := pointer_par_in.int_comp;
  1649.         next_record.pointer_comp:= pointer_par_in.pointer_comp;
  1650.         proc_3(next_record.pointer_comp);
  1651.            -- next_record.pointer_glob.pointer_comp = pointer_comp.next
  1652.         if next_record.discr = ident_1
  1653.         then  -- executed
  1654.             next_record.int_comp := 6;
  1655.             pack_2.proc_6(pointer_par_in.enum_comp,next_record.enum_comp);
  1656.             next_record.pointer_comp := pointer_glob.pointer_comp;
  1657.             pack_2.proc_7(next_record.int_comp,10,next_record.int_comp);
  1658.         else
  1659.             pointer_par_in.all := next_record;
  1660.         end if;
  1661. end proc_1;
  1662.  
  1663. procedure proc_2 ( int_par_in_out: in out one_to_fifty)
  1664. is -- executed once
  1665.    -- in_par_in_out = 3 becomes 7
  1666.     int_loc : one_to_fifty;
  1667.     enum_loc : enumeration;
  1668. begin
  1669.     int_loc := int_par_in_out + 10;
  1670.     loop
  1671.         if char_glob_1 = 'A'
  1672.         then
  1673.             int_loc := int_loc - 1;
  1674.             int_par_in_out := int_loc - int_glob;
  1675.             enum_loc := ident_1;  -- true
  1676.         end if;
  1677.     exit when enum_loc = ident_1; -- true
  1678.     end loop;
  1679. end proc_2;
  1680.  
  1681. procedure proc_3(pointer_par_out: out record_pointer)
  1682. is -- executed once
  1683.         -- pointer_par_out becomes pointer_glob
  1684. begin
  1685.     if pointer_glob /= null
  1686.     then   -- executed
  1687.         pointer_par_out := pointer_glob.pointer_comp;
  1688.     else
  1689.         int_glob := 100;
  1690.     end if;
  1691.     pack_2.proc_7(10,int_glob,pointer_glob.int_comp);
  1692. end proc_3;
  1693.  
  1694. procedure proc_4
  1695. is
  1696.     bool_loc : boolean;
  1697. begin
  1698.     bool_loc := char_glob_1 = 'A';
  1699.     bool_loc := bool_loc or bool_glob;
  1700.     char_glob_2 := 'B';
  1701. end proc_4;
  1702.  
  1703. procedure proc_5
  1704. is
  1705. begin
  1706.     char_glob_1 := 'A';
  1707.     bool_glob := false;
  1708. end proc_5;
  1709.  
  1710. end pack_1;
  1711.  
  1712.     with global_def,pack_1; use global_def;
  1713. package body pack_2 is
  1714.  
  1715. function func_3(enum_par_in: in enumeration) return boolean;
  1716.         -- forward declaration
  1717. procedure proc_6(enum_par_in:  in  enumeration;
  1718.                  enum_par_out: out enumeration) is
  1719. begin
  1720.     enum_par_out := enum_par_in;
  1721.     if not func_3(enum_par_in) then
  1722.         enum_par_out := ident_4;
  1723.     end if;
  1724.     case enum_par_in is
  1725.         when ident_1 =>enum_par_out := ident_1;
  1726.         when ident_2 =>if pack_1.int_glob>100
  1727.                         then enum_par_out := ident_1;
  1728.                         else enum_par_out := ident_4;
  1729.                         end if;
  1730.         when ident_3 =>enum_par_out := ident_2; -- executed
  1731.         when ident_4 =>null;
  1732.         when ident_5 =>enum_par_out := ident_3;
  1733.     end case;
  1734. end proc_6;
  1735.  
  1736. procedure proc_7(int_par_in_1,
  1737.                 int_par_in_2: in  one_to_fifty;
  1738.                 int_par_out:  out one_to_fifty) is
  1739.  
  1740. int_loc : one_to_fifty;
  1741. begin
  1742.    int_loc := int_par_in_1 + 2;
  1743.    int_par_out := int_par_in_2 + int_loc;
  1744. end proc_7;
  1745.  
  1746. procedure proc_8 (array_par_in_out_1: in out array_1_dim_integer;
  1747.                   array_par_in_out_2: in out array_2_dim_integer;
  1748.                   int_par_in_1,
  1749.                   int_par_in_2:       in integer)
  1750. is
  1751.  
  1752. int_loc: one_to_fifty;
  1753. begin
  1754.     int_loc := int_par_in_1 + 5;
  1755.     array_par_in_out_1(int_loc) := int_par_in_2;
  1756.     array_par_in_out_1(int_loc + 1) :=
  1757.                                         array_par_in_out_1(int_loc);
  1758.     array_par_in_out_1(int_loc + 30) := int_loc;
  1759.     for int_index in int_loc..int_loc + 1 loop -- loop body executed twice
  1760.         array_par_in_out_2(int_loc,int_index) := int_loc ;
  1761.     end loop;
  1762.     array_par_in_out_2(int_loc,int_loc-1) :=
  1763.                            array_par_in_out_2(int_loc,int_loc-1) + 1;
  1764.     array_par_in_out_2(int_loc + 20,int_loc) :=
  1765.                            array_par_in_out_1(int_loc);
  1766.     pack_1.int_glob := 5;
  1767.  
  1768. end proc_8;
  1769.  
  1770. function func_1 (char_par_in_1,
  1771.                 char_par_in_2: in capital_letter) return enumeration
  1772. is
  1773.  
  1774. char_loc_1, char_loc_2 : capital_letter;
  1775.  
  1776. begin
  1777.     char_loc_1 := char_par_in_1;
  1778.     char_loc_2 := char_loc_1;
  1779.     if char_loc_2 /= char_par_in_2 then
  1780.         return ident_1;
  1781.     else
  1782.         return ident_2;
  1783.     end if;
  1784. end func_1;
  1785.  
  1786. function func_2(string_par_in_1,
  1787.                 string_par_in_2: in string_30) return boolean
  1788. is
  1789.  
  1790. int_loc: one_to_thirty;
  1791. char_loc: capital_letter;
  1792.  
  1793. begin
  1794.     int_loc := 2;
  1795.     while int_loc <= 2 loop
  1796.         if func_1(string_par_in_1(int_loc),
  1797.                   string_par_in_2(int_loc+1)) = ident_1 then
  1798.             char_loc := 'A';
  1799.             int_loc := int_loc + 1;
  1800.         end if;
  1801.     end loop;
  1802.     if char_loc >='W' and char_loc < 'Z' then
  1803.         int_loc := 7;
  1804.     end if;
  1805.     if char_loc = 'X' then
  1806.         return true;
  1807.     else
  1808.         if string_par_in_1 > string_par_in_2 then
  1809.             int_loc := int_loc + 7;
  1810.             return true;
  1811.         else
  1812.             return false;
  1813.         end if;
  1814.     end if;
  1815. end func_2;
  1816.  
  1817. function func_3(enum_par_in: in enumeration) return boolean
  1818. is
  1819.  
  1820.     enum_loc: enumeration;
  1821. begin
  1822.     enum_loc := enum_par_in;
  1823.     if enum_loc = ident_3 then
  1824.         return true;
  1825.     end if;
  1826. end func_3;
  1827.  
  1828. end pack_2;
  1829. ::::::::::
  1830. A000092.ADA
  1831. ::::::::::
  1832. -- Ada version of Whetstone Benchmark Program
  1833. -- This must be edited to "with" the compiler suppliers math routines
  1834. --  SIN, COS, ATAN, SQRT, EXP and LOG
  1835. --  These results may be interesting to compare to Z000093 that uses
  1836. --  a physically included, all Ada set of math routines
  1837.  
  1838.  
  1839. --------------------------------------------------------------------------
  1840. --                                                                      --
  1841. --     WHETADA.ADA    distributed as A000092.ADA                        --
  1842. --                                                                      --
  1843. --   Ada version of the Whetstone Benchmark Program.                    --
  1844. --   Reference: "Computer Journal" February 1976, pages 43-49           --
  1845. --              for description of benchmark and ALGOL60 version.       --
  1846. -- Note: Procedure POUT is omitted.                                     --
  1847. --                                                                      --
  1848. -- From Timing Studies using a synthetic Whetstone Benchmark            --
  1849. --      by Sam Harbaugh and John A. Forakis                             --
  1850. --                                                                      --
  1851. --------------------------------------------------------------------------
  1852. --                                                                      --
  1853. -- Authors Disclaimer                                                   --
  1854. -- "   The Whetstone measure deals only with the most basic scientific/ --
  1855. --  computational aspects of the languages and computers and no general --
  1856. --  conclusions should be drawn from this work. Application specific    --
  1857. --  benchmarks should be written and run by anyone needing to draw      --
  1858. --  conclusions reguarding suitability of languages, compilers and      --
  1859. --  hardware. This data is reported to stimulate interest and work in   --
  1860. --  run time benchmarking and in no way is meant to influence anyone's  --
  1861. --  choice of languages or software in any situation "                  --
  1862. --                                                                      --
  1863. --------------------------------------------------------------------------
  1864.  
  1865. with CPU_TIME_CLOCK ;
  1866. with TEXT_IO;   use TEXT_IO;
  1867. -- Change the following line to use the compiler vendors or manufacturers
  1868. -- math library.
  1869. with FLOAT_MATH_LIB; use FLOAT_MATH_LIB; -- manufacturers routines ( VAX )
  1870.  
  1871. procedure A000092 is
  1872.  --pragma SUPPRESS(ACCESS_CHECK);
  1873.  --pragma SUPPRESS(DISCRIMINANT_CHECK);
  1874.  --pragma SUPPRESS(INDEX_CHECK);
  1875.  --pragma SUPPRESS(LENGTH_CHECK);
  1876.  --pragma SUPPRESS(RANGE_CHECK);
  1877.  --pragma SUPPRESS(DIVISION_CHECK);
  1878.  --pragma SUPPRESS(OVERFLOW_CHECK);
  1879.  --pragma SUPPRESS(STORAGE_CHECK);
  1880.  --pragma SUPPRESS(ELABORATION_CHECK);
  1881.  
  1882.   package INT_IO is new INTEGER_IO(INTEGER);  use INT_IO;
  1883.   package REAL_IO is new FLOAT_IO(FLOAT);  use REAL_IO;
  1884.  
  1885.      procedure WHETSTONE(I, NO_OF_CYCLES : in INTEGER;
  1886.                          START_TIME,STOP_TIME: out FLOAT) is
  1887.  
  1888.      -- Calling procedure provides the loop count weight factor, I, and
  1889.      -- the encompassing loop count, NO_OF_CYCLES.
  1890.  
  1891.         type VECTOR is array (INTEGER range <>) of FLOAT;
  1892.         X1,X2,X3,X4,X,Y,Z,T,T1,T2 : FLOAT;
  1893.         E1 : VECTOR(1..4);
  1894.         J,K,L,N1,N2,N3,N4,N5,N6,N7,N8,N9,N10,N11 : INTEGER;
  1895.  
  1896.         procedure PA(E: in out VECTOR) is
  1897.         -- tests computations with an array as a parameter
  1898.            J : INTEGER;
  1899.            -- T,T2 : FLOAT are global variables
  1900.            begin
  1901.              J:=0;
  1902.              <<LAB>>
  1903.              E(1) := (E(1) + E(2) + E(3) - E(4)) * T;
  1904.              E(2) := (E(1) + E(2) - E(3) + E(4)) * T;
  1905.              E(3) := (E(1) - E(2) + E(3) + E(4)) * T;
  1906.              E(4) := (-E(1) + E(2) + E(3) + E(4)) / T2;
  1907.              J := J + 1;
  1908.              if J < 6 then
  1909.                 goto LAB;
  1910.              end if;
  1911.         end PA;
  1912.  
  1913.  
  1914.         procedure P0 is
  1915.         -- tests computations with no parameters
  1916.         -- T1,T2 : FLOAT are global
  1917.         -- E1 : VECTOR(1..4) is global
  1918.         -- J,K,L : INTEGER are global
  1919.            begin
  1920.              E1(J) := E1(K);
  1921.              E1(K) := E1(L);
  1922.              E1(L) := E1(J);
  1923.            end P0;
  1924.  
  1925.  
  1926.         procedure P3(X,Y: in out FLOAT;  Z : out FLOAT) is
  1927.         -- tests computations with simple identifiers as parameters
  1928.         -- T,T2 : FLOAT are global
  1929.            begin
  1930.              X := T * (X + Y);
  1931.              Y := T * (X + Y);
  1932.              Z := (X + Y) / T2;
  1933.            end P3;
  1934.  
  1935.  
  1936.         begin
  1937.           -- Set constants
  1938.           T := 0.499975;
  1939.           T1 := 0.50025;
  1940.           T2 := 2.0;
  1941.           -- Compute the execution frequency for the benchmark modules
  1942.           N1 := 0;      --Module 1 not executed
  1943.           N2 := 12 * I;
  1944.           N3 := 14 * I;
  1945.           N4 := 345*I;
  1946.           N5 := 0;      -- Module 5 not executed
  1947.           N6 := 210*I;
  1948.           N7 := 32*I;
  1949.           N8 := 899*I;
  1950.           N9 := 616*I;
  1951.           N10:= 0;      -- Module 10 not executed
  1952.           N11:= 93*I;
  1953.  
  1954.           START_TIME := FLOAT(CPU_TIME_CLOCK);  --Get Whetstone start time
  1955.  
  1956.           CYCLE_LOOP:
  1957.           for CYCLE_NO in 1..NO_OF_CYCLES loop
  1958.              -- Module 1 : computations with simple identifiers
  1959.                 X1 := 1.0;
  1960.                 X2 := -1.0;
  1961.                 X3 := -1.0;
  1962.                 X4 := -1.0;
  1963.                 for I in 1..N1 loop
  1964.                    X1 := (X1 + X2 + X3 - X4) * T;
  1965.                    X2 := (X1 + X2 - X3 + X4) * T;
  1966.                    X3 := (X1 + X2 + X3 + X4) * T;
  1967.                    X4 := (-X1 + X2 + X3 + X4) * T;
  1968.                 end loop;
  1969.              -- end Module 1
  1970.  
  1971.              -- Module 2: computations with array elements
  1972.                 E1(1) := 1.0;
  1973.                 E1(2) := -1.0;
  1974.                 E1(3) := -1.0;
  1975.                 E1(4) := -1.0;
  1976.                 for I in 1..N2 loop
  1977.                    E1(1) := (E1(1) + E1(2) + E1(3) - E1(4)) * T;
  1978.                    E1(2) := (E1(1) + E1(2) - E1(3) + E1(4)) * T;
  1979.                    E1(3) := (E1(1) - E1(2) + E1(3) + E1(4)) * T;
  1980.                    E1(4) := (-E1(1) + E1(2) + E1(3) + E1(4)) * T;
  1981.                 end loop;
  1982.              -- end Module 2
  1983.  
  1984.              -- Module 3 : passing an array as a parmeter
  1985.                 for I in 1..N3 loop
  1986.                      PA(E1);
  1987.                 end loop;
  1988.              -- end Module 3
  1989.  
  1990.              -- Module 4 : performing conditional jumps
  1991.                 J := 1;
  1992.                 for I in 1..N4 loop
  1993.                    if J=1 then
  1994.                        J := 2;
  1995.                    else
  1996.                        J := 3;
  1997.                    end if;
  1998.                    if J>2 then
  1999.                        J := 0;
  2000.                    else
  2001.                        J := 1;
  2002.                    end if;
  2003.                    if J<1 then
  2004.                        J := 1;
  2005.                    else
  2006.                        J := 0;
  2007.                    end if;
  2008.                 end loop;
  2009.              --end Module 4
  2010.  
  2011.              -- Module 5 : omitted
  2012.  
  2013.              -- Module 6 : performing integer arithmetic
  2014.                 J := 1;
  2015.                 K := 2;
  2016.                 L := 3;
  2017.                 for I in 1..N6 loop
  2018.                    J := J * (K-J) * (L-K);
  2019.                    K := L*K - (L-J) * K;
  2020.                    L := (L-K) * (K+J);
  2021.                    E1(L-1) := FLOAT(J+K+L);
  2022.                    E1(K-1) := FLOAT(J*K*L);
  2023.                 end loop;
  2024.              -- end Module 6
  2025.  
  2026.              -- Module 7 : performing computations using trigonometric
  2027.              --            functions
  2028.                 X := 0.5;
  2029.                 Y := 0.5;
  2030.                 for I in 1..N7 loop
  2031.                   X := T*ATAN(T2*SIN(X)*COS(X)/(COS(X+Y)+COS(X-Y)-1.0));
  2032.                   Y := T*ATAN(T2*SIN(Y)*COS(Y)/(COS(X+Y)+COS(X-Y)-1.0));
  2033.                 end loop;
  2034.              -- end Module 7
  2035.  
  2036.              -- Module 8 : procedure calls with simple identifiers as
  2037.              --            parameters
  2038.                 X := 1.0;
  2039.                 Y := 1.0;
  2040.                 Z := 1.0;
  2041.                 for I in 1..N8 loop
  2042.                    P3(X,Y,Z);
  2043.                 end loop;
  2044.              -- end Module 8
  2045.  
  2046.              -- Module 9 : array reference and procedure calls with no
  2047.              --            parameters
  2048.                 J := 1;
  2049.                 K := 2;
  2050.                 L := 3;
  2051.                 E1(1) := 1.0;
  2052.                 E1(2) := 2.0;
  2053.                 E1(3) := 3.0;
  2054.                 for I in 1..N9 loop
  2055.                    P0;
  2056.                 end loop;
  2057.              -- end Module 9
  2058.  
  2059.              -- Module 10 : integer arithmetic
  2060.                 J := 2;
  2061.                 K := 3;
  2062.                 for I in 1..N10 loop
  2063.                    J := J + K;
  2064.                    K := K + J;
  2065.                    J := K - J;
  2066.                    K := K - J - J;
  2067.                 end loop;
  2068.              -- end Module 10
  2069.  
  2070.              -- Module 11 : performing computations using standard
  2071.              --            mathematical functions
  2072.                 X := 0.75;
  2073.                 for I in 1..N11 loop
  2074.                    X := SQRT(EXP(LOG(X)/T1));
  2075.                 end loop;
  2076.              -- end Moudle 11
  2077.  
  2078.           end loop CYCLE_LOOP;
  2079.  
  2080.           STOP_TIME := FLOAT(CPU_TIME_CLOCK);    --Get Whetstone stop time
  2081.     end WHETSTONE;
  2082.  
  2083.     procedure COMPUTE_WHETSTONE_KIPS is
  2084.        -- Variables used to control execution of benchmark and to
  2085.        -- compute the Whetstone rating :
  2086.  
  2087.           NO_OF_RUNS : INTEGER;   -- Number of times the benchmark is executed
  2088.           NO_OF_CYCLES : INTEGER; -- Number of times the group of benchmark
  2089.                                   -- modules is executed
  2090.           I : INTEGER;
  2091.              -- Factor weighting number of times each module loops
  2092.              -- A value of ten gives a total weight for modules of
  2093.              -- approximately one million Whetstone instructions
  2094.           START_TIME : FLOAT;
  2095.                      -- Time at which execution of benchmark modules begins
  2096.           STOP_TIME : FLOAT;
  2097.                     -- Time at which execution of benchmark modules ends
  2098.                     -- (time for NO_OF_CYCLES)
  2099.           ELAPSED_TIME : FLOAT;
  2100.                        -- Time between START_TIME and STOP_TIME
  2101.           MEAN_TIME : FLOAT;     -- Average time per cycle
  2102.           RATING : FLOAT;    -- Thousands of Whetstone instructions per sec
  2103.           MEAN_RATING : FLOAT;     -- Average Whetstone rating
  2104.           INT_RATING : INTEGER;    -- Integer value of KWIPS
  2105.  
  2106.           begin
  2107.             NEW_LINE; PUT_LINE("ADA Whetstone benchmark"); NEW_LINE;
  2108.             PUT_LINE("A000092 using manufacturers math routines");
  2109.             NEW_LINE;
  2110.  
  2111.             MEAN_TIME := 0.0;
  2112.             MEAN_RATING := 0.0;
  2113.             NO_OF_CYCLES := 10;
  2114.             NO_OF_RUNS := 5;
  2115.             I := 10;
  2116.  
  2117.             RUN_LOOP:
  2118.             for RUN_NO in 1..NO_OF_RUNS loop
  2119.                -- Call the Whetstone benchmark parocedure
  2120.                WHETSTONE(I,NO_OF_CYCLES,START_TIME,STOP_TIME);
  2121.  
  2122.                -- Write the Whetstone start time
  2123.                NEW_LINE; PUT("Whetstone start time: "); PUT(START_TIME,5,2,0);
  2124.                PUT_LINE(" seconds");
  2125.  
  2126.                -- Write the Whetstone stop time
  2127.                NEW_LINE;   PUT("Whetstone stop time : ");
  2128.                PUT(STOP_TIME,5,2,0);     PUT_LINE(" seconds ");
  2129.  
  2130.                -- Compute and write elapsed time
  2131.                ELAPSED_TIME := STOP_TIME - START_TIME;
  2132.  
  2133.                NEW_LINE;  PUT("Elapsed time for "); PUT(NO_OF_CYCLES,3);
  2134.                PUT(" cycles : ");  PUT(ELAPSED_TIME,5,2,0);
  2135.                PUT_LINE(" seconds");
  2136.  
  2137.                -- Sum time in milliseconds per cycle
  2138.                MEAN_TIME := MEAN_TIME + (ELAPSED_TIME*1000.0)/FLOAT(NO_OF_CYCLES);
  2139.  
  2140.                -- Calculate the Whetstone rating based on the time for
  2141.                -- the number of cycles just executed and write
  2142.                RATING := (1000.0 * FLOAT(NO_OF_CYCLES))/ELAPSED_TIME;
  2143.  
  2144.                -- Sum Whetstone rating
  2145.                MEAN_RATING := MEAN_RATING + RATING;
  2146.                INT_RATING := INTEGER(RATING);
  2147.  
  2148.                NEW_LINE;  PUT("Whetstone rating : ");  PUT(INT_RATING);
  2149.                PUT_LINE(" KWIPS");  NEW_LINE;
  2150.  
  2151.                -- Reset NO_OF_CYCLES for next run using ten cycles more
  2152.                NO_OF_CYCLES := NO_OF_CYCLES + 10;
  2153.             end loop RUN_LOOP;
  2154.  
  2155.             -- Compute average time in millieseconds per cycle and write
  2156.             MEAN_TIME := MEAN_TIME/FLOAT(NO_OF_RUNS);
  2157.  
  2158.             NEW_LINE;  PUT("Average time per cycle : ");
  2159.             PUT(MEAN_TIME,5,2,0);   PUT_LINE(" milliseconds");
  2160.  
  2161.             -- Calculate average Whetstone rating and write
  2162.             MEAN_RATING := MEAN_RATING/FLOAT(NO_OF_RUNS);
  2163.             INT_RATING := INTEGER(MEAN_RATING);
  2164.  
  2165.             NEW_LINE;  PUT(" Average Whetstone rating : ");
  2166.             PUT(INT_RATING);  PUT_LINE(" KWIPS");
  2167.             NEW_LINE; NEW_LINE;
  2168.  
  2169.          end COMPUTE_WHETSTONE_KIPS;
  2170.  
  2171.          begin
  2172.             COMPUTE_WHETSTONE_KIPS;
  2173.          end A000092;
  2174. ::::::::::
  2175. A000093.ADA
  2176. ::::::::::
  2177. -- Ada version of Whetstone Benchmark Program
  2178. -- using standardized math routines for the measurements
  2179. -- The math routines are physically included
  2180.  
  2181. --------------------------------------------------------------------------
  2182. --                                                                      --
  2183. --     WHETADA.ADA    distributed as A000093.ADA                        --
  2184. --                                                                      --
  2185. --   Ada version of the Whetstone Benchmark Program.                    --
  2186. --   Reference: "Computer Journal" February 1976, pages 43-49           --
  2187. --              for description of benchmark and ALGOL60 version.       --
  2188. -- Note: Procedure POUT is omitted.                                     --
  2189. --                                                                      --
  2190. -- From Timing Studies using a synthetic Whetstone Benchmark            --
  2191. --      by Sam Harbaugh and John A. Forakis                             --
  2192. --                                                                      --
  2193. --------------------------------------------------------------------------
  2194. --                                                                      --
  2195. -- Authors Disclaimer                                                   --
  2196. -- "   The Whetstone measure deals only with the most basic scientific/ --
  2197. --  computational aspects of the languages and computers and no general --
  2198. --  conclusions should be drawn from this work. Application specific    --
  2199. --  benchmarks should be written and run by anyone needing to draw      --
  2200. --  conclusions reguarding suitability of languages, compilers and      --
  2201. --  hardware. This data is reported to stimulate interest and work in   --
  2202. --  run time benchmarking and in no way is meant to influence anyone's  --
  2203. --  choice of languages or software in any situation "                  --
  2204. --                                                                      --
  2205. --------------------------------------------------------------------------
  2206. --                                                                      --
  2207. -- All references to DATA_FILE and associated OPEN and PUT's are removed--
  2208. -- This was not in the timing loop.                                     --
  2209. --                                                                      --
  2210. --------------------------------------------------------------------------
  2211.  
  2212. with CPU_TIME_CLOCK ;
  2213. with TEXT_IO;   use TEXT_IO;
  2214.  
  2215. procedure A000093 is
  2216.  --pragma SUPPRESS(ACCESS_CHECK);
  2217.  --pragma SUPPRESS(DISCRIMINANT_CHECK);
  2218.  --pragma SUPPRESS(INDEX_CHECK);
  2219.  --pragma SUPPRESS(LENGTH_CHECK);
  2220.  --pragma SUPPRESS(RANGE_CHECK);
  2221.  --pragma SUPPRESS(DIVISION_CHECK);
  2222.  --pragma SUPPRESS(OVERFLOW_CHECK);
  2223.  --pragma SUPPRESS(STORAGE_CHECK);
  2224.  --pragma SUPPRESS(ELABORATION_CHECK);
  2225.  
  2226.   package INT_IO is new INTEGER_IO(INTEGER);  use INT_IO;
  2227.   package REAL_IO is new FLOAT_IO(FLOAT);  use REAL_IO;
  2228.  
  2229.  
  2230. -- This is a standard Ada inplementation of the required math routines
  2231. -- that is Copyright Westinghouse Electric Corporation 1983,1984,1985.
  2232. -- These routines are provided for use by ACM SIGAda PIWG for making
  2233. -- measurements. These routines are copyrighted and may only be used for
  2234. -- performance measurements. These math routines must not be distributed
  2235. -- without this notice. No permission is granted to any party to modify,
  2236. -- to redistribute, to sell, to give away, or to otherwise use or
  2237. -- transmit these math routines without express written permission from
  2238. -- Westinghous Electric Corporation, c/o Jon Squire, P.O. Box 746 MS1615,
  2239. -- Baltimore, MD 21203.
  2240.  
  2241.   PI_2 : constant FLOAT := 1.5707963267949 ;
  2242.   PI : constant FLOAT := 2.0 * PI_2 ;
  2243.  
  2244.   function SIN ( X : FLOAT ) return FLOAT is -- Copyright Westinghouse 1985
  2245.  
  2246.     C1 : constant FLOAT := 1.57079631847 ;
  2247.     C3 : constant FLOAT := - 0.64596371106 ;
  2248.     C5 : constant FLOAT := 0.07968967928 ;
  2249.     C7 : constant FLOAT := - 0.00467376557 ;
  2250.     C9 : constant FLOAT := 0.00015148419 ;
  2251.     X_NORM : FLOAT ;
  2252.     X_INT : FLOAT ;
  2253.     X_2 : FLOAT ;
  2254.     Y : FLOAT ;
  2255.   begin
  2256.     X_NORM := X / PI_2 ;
  2257.     if abs ( X_NORM ) > 4.0 then  -- REDUCE TO  -2 PI .. 2 PI
  2258.       X_INT := FLOAT ( INTEGER( X_NORM / 4.0 )) ;
  2259.       X_NORM := X_NORM - 4.0 * X_INT ;
  2260.     end if ;
  2261.     if X_NORM > 2.0 then  -- REDUCE TO  -PI .. PI
  2262.       X_NORM := 2.0 - X_NORM ;
  2263.     elsif X_NORM < - 2.0 then
  2264.       X_NORM := - 2.0 - X_NORM ;
  2265.     end if ;
  2266.     if X_NORM > 1.0 then  -- REDUCE TO  -PI/2 .. PI/2
  2267.       X_NORM := 2.0 - X_NORM ;
  2268.     elsif X_NORM < - 1.0 then
  2269.       X_NORM := - 2.0 - X_NORM ;
  2270.     end if ;
  2271.     X_2 := X_NORM * X_NORM ;
  2272.     Y := ( C1 +( C3 +( C5 +( C7 + C9 * X_2 ) * X_2) * X_2) * X_2) * X_NORM ;
  2273.     return Y ;
  2274.   end SIN ;
  2275.  
  2276.   function COS ( X : FLOAT ) return FLOAT is
  2277.  
  2278.   begin
  2279.     return SIN ( X + PI_2 ) ;
  2280.   end COS ;
  2281.  
  2282.  
  2283.   function ATAN ( X : FLOAT ) return FLOAT is -- Copyright Westinghouse 1985
  2284.  
  2285.     C1 : constant FLOAT := 0.9999993329 ;
  2286.     C3 : constant FLOAT := - 0.3332985605 ;
  2287.     C5 : constant FLOAT := 0.1994653599 ;
  2288.     C7 : constant FLOAT := - 0.1390853351 ;
  2289.     C9 : constant FLOAT := 0.0964200441 ;
  2290.     C11 : constant FLOAT := - 0.0559098861 ;
  2291.     C13 : constant FLOAT := 0.0218612288 ;
  2292.     C15 : constant FLOAT := - 0.0040540580 ;
  2293.     A_2 : FLOAT ;
  2294.     Y : FLOAT ;
  2295.     A : FLOAT ;
  2296.   begin
  2297.     A := X ;
  2298.     if abs ( A ) > 1.0 then
  2299.       A := 1.0 / A ;
  2300.     end if ;
  2301.     A_2 := A * A ;
  2302.     Y := ( C1 +( C3 +( C5 +( C7 +( C9 +( C11 +( C13 + C15 * A_2 ) * A_2) * A_2
  2303.        ) * A_2) * A_2) * A_2) * A_2) * A ;
  2304.     if abs ( X ) >= 1.0 then
  2305.       if X < 0.0 then
  2306.         Y := - ( PI_2 + Y ) ;
  2307.       else
  2308.         Y := PI_2 - Y ;
  2309.       end if ;
  2310.     end if ;
  2311.     return Y ;
  2312.   end ATAN ;
  2313.  
  2314.  
  2315.   function SQRT ( X : FLOAT ) return FLOAT is -- Copyright Westinghouse 1985
  2316.  
  2317.     Y , ROOT_PWR , X_NORM : FLOAT ;
  2318.     A : constant FLOAT := 2.1902 ;
  2319.     B : constant FLOAT := - 3.0339 ;
  2320.     C : constant FLOAT := 1.5451 ;
  2321.   begin
  2322.     X_NORM := X ;
  2323.     ROOT_PWR := 1.0 ;
  2324.     if X <= 0.0 then
  2325.       return 0.0 ;
  2326.     end if ;
  2327.     if X > 1.0 then -- REDUCE TO 0.25 .. 1.0
  2328.       while X_NORM > 1.0 loop
  2329.         ROOT_PWR := ROOT_PWR * 2.0 ;
  2330.         X_NORM := X_NORM * 0.25 ;
  2331.       end loop ;
  2332.     else
  2333.       while X_NORM < 0.25 loop
  2334.         ROOT_PWR := ROOT_PWR * 0.5 ;
  2335.         X_NORM := X_NORM * 4.0 ;
  2336.       end loop ;
  2337.     end if ;
  2338.     Y := A + B / ( C + X_NORM ) ;
  2339.     Y := 0.5 * ( Y + X_NORM / Y ) ;
  2340.     Y := 0.5 * ( Y + X_NORM / Y ) ;
  2341.     Y := Y * ROOT_PWR ;
  2342.     return Y ;
  2343.   end SQRT ;
  2344.  
  2345.   function EXP ( X : FLOAT ) return FLOAT is -- Copyright Westinghouse 1985
  2346.  
  2347.     C1 : constant FLOAT := 9.99999900943303E-01 ;
  2348.     C2 : constant FLOAT := 5.00006347344554E-01 ;
  2349.     C3 : constant FLOAT := 1.66667985598315E-01 ;
  2350.     C4 : constant FLOAT := 4.16350120350139E-02 ;
  2351.     C5 : constant FLOAT := 8.32859610677671E-03 ;
  2352.     C6 : constant FLOAT := 1.43927433449119E-03 ;
  2353.     C7 : constant FLOAT := 2.04699933614437E-04 ;
  2354.  
  2355. --         4.01169746699903E-07 = MAX_ERROR APPROXIMATION-FUNCTION
  2356.     X1 : FLOAT ;
  2357.     Y : FLOAT ;
  2358.     E_PWR : FLOAT := 1.0 ;
  2359.     E : FLOAT := 2.71828182845905 ;
  2360.   begin
  2361.     if X > 88.0 then
  2362.       raise NUMERIC_ERROR ;
  2363.     end if ;
  2364.     X1 := abs ( X ) ;
  2365.     if X1 > 88.0 then
  2366.       return 0.0 ;
  2367.     end if ;
  2368.     while X1 >= 1.0 loop
  2369.       E_PWR := E_PWR * E * E ;
  2370.       X1 := X1 - 2.0 ;
  2371.     end loop ;
  2372.     Y := 1.0 + ( C1 +( C2 +( C3 +( C4 +( C5 +( C6 + C7 * X1 ) * X1) * X1) * X1
  2373.        ) * X1) * X1) * X1 ;
  2374.     Y := Y * E_PWR ;
  2375.     if X < 0.0 then
  2376.       Y := 1.0 / Y ;
  2377.     end if ;
  2378.     return Y ;
  2379.   end EXP ;
  2380.  
  2381.   function LOG10 ( X : FLOAT ) return FLOAT is -- Copyright Westinghouse 1985
  2382.  
  2383.     C1 : constant FLOAT := 0.868591718 ;
  2384.     C3 : constant FLOAT := 0.289335524 ;
  2385.     C5 : constant FLOAT := 0.177522071 ;
  2386.     C7 : constant FLOAT := 0.094376476 ;
  2387.     C9 : constant FLOAT := 0.191337714 ;
  2388.     C_R10 : constant FLOAT := 3.1622777 ;
  2389.     Y : FLOAT ;
  2390.     X_NORM : FLOAT ;
  2391.     X_LOG : FLOAT ;
  2392.     FRAC : FLOAT ;
  2393.     FRAC_2 : FLOAT ;
  2394.   begin
  2395.     X_LOG := 0.5 ;
  2396.     X_NORM := X ;
  2397.     if X <= 0.0 then
  2398.       return 0.0 ;
  2399.     end if ;
  2400.     if X >= 10.0 then
  2401.       while X_NORM >= 10.0  -- REDUCE TO 1.0 .. 10.0
  2402.           loop
  2403.         X_LOG := X_LOG + 1.0 ;
  2404.         X_NORM := X_NORM * 0.1 ;
  2405.       end loop ;
  2406.     else
  2407.       while X_NORM < 1.0  -- REDUCE TO 1.0 .. 10.0
  2408.           loop
  2409.         X_LOG := X_LOG - 1.0 ;
  2410.         X_NORM := X_NORM * 10.0 ;
  2411.       end loop ;
  2412.     end if ;
  2413.     FRAC := ( X_NORM - C_R10 ) / ( X_NORM + C_R10 ) ;
  2414.     FRAC_2 := FRAC * FRAC ;
  2415.     Y := ( C1 +( C3 +( C5 +( C7 + C9 * FRAC_2 ) * FRAC_2) * FRAC_2) * FRAC_2)
  2416.         * FRAC ;
  2417.     return Y + X_LOG ;
  2418.   end LOG10 ; -- end of copyrighted section
  2419.  
  2420.   function LOG ( X : FLOAT ) return FLOAT is 
  2421.  
  2422.   begin
  2423.     return 2.302585093 * LOG10 ( X ) ;
  2424.   end LOG ;
  2425.  
  2426.  
  2427.      procedure WHETSTONE(I, NO_OF_CYCLES : in INTEGER;
  2428.                          START_TIME,STOP_TIME: out FLOAT) is
  2429.  
  2430.      -- Calling procedure provides the loop count weight factor, I, and
  2431.      -- the encompassing loop count, NO_OF_CYCLES.
  2432.  
  2433.         type VECTOR is array (INTEGER range <>) of FLOAT;
  2434.         X1,X2,X3,X4,X,Y,Z,T,T1,T2 : FLOAT;
  2435.         E1 : VECTOR(1..4);
  2436.         J,K,L,N1,N2,N3,N4,N5,N6,N7,N8,N9,N10,N11 : INTEGER;
  2437.  
  2438.         procedure PA(E: in out VECTOR) is
  2439.         -- tests computations with an array as a parameter
  2440.            J : INTEGER;
  2441.            -- T,T2 : FLOAT are global variables
  2442.            begin
  2443.              J:=0;
  2444.              <<LAB>>
  2445.              E(1) := (E(1) + E(2) + E(3) - E(4)) * T;
  2446.              E(2) := (E(1) + E(2) - E(3) + E(4)) * T;
  2447.              E(3) := (E(1) - E(2) + E(3) + E(4)) * T;
  2448.              E(4) := (-E(1) + E(2) + E(3) + E(4)) / T2;
  2449.              J := J + 1;
  2450.              if J < 6 then
  2451.                 goto LAB;
  2452.              end if;
  2453.         end PA;
  2454.  
  2455.  
  2456.         procedure P0 is
  2457.         -- tests computations with no parameters
  2458.         -- T1,T2 : FLOAT are global
  2459.         -- E1 : VECTOR(1..4) is global
  2460.         -- J,K,L : INTEGER are global
  2461.            begin
  2462.              E1(J) := E1(K);
  2463.              E1(K) := E1(L);
  2464.              E1(L) := E1(J);
  2465.            end P0;
  2466.  
  2467.  
  2468.         procedure P3(X,Y: in out FLOAT;  Z : out FLOAT) is
  2469.         -- tests computations with simple identifiers as parameters
  2470.         -- T,T2 : FLOAT are global
  2471.            begin
  2472.              X := T * (X + Y);
  2473.              Y := T * (X + Y);
  2474.              Z := (X + Y) / T2;
  2475.            end P3;
  2476.  
  2477.  
  2478.         begin
  2479.           -- Set constants
  2480.           T := 0.499975;
  2481.           T1 := 0.50025;
  2482.           T2 := 2.0;
  2483.           -- Compute the execution frequency for the benchmark modules
  2484.           N1 := 0;      --Module 1 not executed
  2485.           N2 := 12 * I;
  2486.           N3 := 14 * I;
  2487.           N4 := 345*I;
  2488.           N5 := 0;      -- Module 5 not executed
  2489.           N6 := 210*I;
  2490.           N7 := 32*I;
  2491.           N8 := 899*I;
  2492.           N9 := 616*I;
  2493.           N10:= 0;      -- Module 10 not executed
  2494.           N11:= 93*I;
  2495.  
  2496.           START_TIME := FLOAT(CPU_TIME_CLOCK);  --Get Whetstone start time
  2497.  
  2498.           CYCLE_LOOP:
  2499.           for CYCLE_NO in 1..NO_OF_CYCLES loop
  2500.              -- Module 1 : computations with simple identifiers
  2501.                 X1 := 1.0;
  2502.                 X2 := -1.0;
  2503.                 X3 := -1.0;
  2504.                 X4 := -1.0;
  2505.                 for I in 1..N1 loop
  2506.                    X1 := (X1 + X2 + X3 - X4) * T;
  2507.                    X2 := (X1 + X2 - X3 + X4) * T;
  2508.                    X3 := (X1 + X2 + X3 + X4) * T;
  2509.                    X4 := (-X1 + X2 + X3 + X4) * T;
  2510.                 end loop;
  2511.              -- end Module 1
  2512.  
  2513.              -- Module 2: computations with array elements
  2514.                 E1(1) := 1.0;
  2515.                 E1(2) := -1.0;
  2516.                 E1(3) := -1.0;
  2517.                 E1(4) := -1.0;
  2518.                 for I in 1..N2 loop
  2519.                    E1(1) := (E1(1) + E1(2) + E1(3) - E1(4)) * T;
  2520.                    E1(2) := (E1(1) + E1(2) - E1(3) + E1(4)) * T;
  2521.                    E1(3) := (E1(1) - E1(2) + E1(3) + E1(4)) * T;
  2522.                    E1(4) := (-E1(1) + E1(2) + E1(3) + E1(4)) * T;
  2523.                 end loop;
  2524.              -- end Module 2
  2525.  
  2526.              -- Module 3 : passing an array as a parmeter
  2527.                 for I in 1..N3 loop
  2528.                      PA(E1);
  2529.                 end loop;
  2530.              -- end Module 3
  2531.  
  2532.              -- Module 4 : performing conditional jumps
  2533.                 J := 1;
  2534.                 for I in 1..N4 loop
  2535.                    if J=1 then
  2536.                        J := 2;
  2537.                    else
  2538.                        J := 3;
  2539.                    end if;
  2540.                    if J>2 then
  2541.                        J := 0;
  2542.                    else
  2543.                        J := 1;
  2544.                    end if;
  2545.                    if J<1 then
  2546.                        J := 1;
  2547.                    else
  2548.                        J := 0;
  2549.                    end if;
  2550.                 end loop;
  2551.              --end Module 4
  2552.  
  2553.              -- Module 5 : omitted
  2554.  
  2555.              -- Module 6 : performing integer arithmetic
  2556.                 J := 1;
  2557.                 K := 2;
  2558.                 L := 3;
  2559.                 for I in 1..N6 loop
  2560.                    J := J * (K-J) * (L-K);
  2561.                    K := L*K - (L-J) * K;
  2562.                    L := (L-K) * (K+J);
  2563.                    E1(L-1) := FLOAT(J+K+L);
  2564.                    E1(K-1) := FLOAT(J*K*L);
  2565.                 end loop;
  2566.              -- end Module 6
  2567.  
  2568.              -- Module 7 : performing computations using trigonometric
  2569.              --            functions
  2570.                 X := 0.5;
  2571.                 Y := 0.5;
  2572.                 for I in 1..N7 loop
  2573.                   X := T*ATAN(T2*SIN(X)*COS(X)/(COS(X+Y)+COS(X-Y)-1.0));
  2574.                   Y := T*ATAN(T2*SIN(Y)*COS(Y)/(COS(X+Y)+COS(X-Y)-1.0));
  2575.                 end loop;
  2576.              -- end Module 7
  2577.  
  2578.              -- Module 8 : procedure calls with simple identifiers as
  2579.              --            parameters
  2580.                 X := 1.0;
  2581.                 Y := 1.0;
  2582.                 Z := 1.0;
  2583.                 for I in 1..N8 loop
  2584.                    P3(X,Y,Z);
  2585.                 end loop;
  2586.              -- end Module 8
  2587.  
  2588.              -- Module 9 : array reference and procedure calls with no
  2589.              --            parameters
  2590.                 J := 1;
  2591.                 K := 2;
  2592.                 L := 3;
  2593.                 E1(1) := 1.0;
  2594.                 E1(2) := 2.0;
  2595.                 E1(3) := 3.0;
  2596.                 for I in 1..N9 loop
  2597.                    P0;
  2598.                 end loop;
  2599.              -- end Module 9
  2600.  
  2601.              -- Module 10 : integer arithmetic
  2602.                 J := 2;
  2603.                 K := 3;
  2604.                 for I in 1..N10 loop
  2605.                    J := J + K;
  2606.                    K := K + J;
  2607.                    J := K - J;
  2608.                    K := K - J - J;
  2609.                 end loop;
  2610.              -- end Module 10
  2611.  
  2612.              -- Module 11 : performing computations using standard
  2613.              --            mathematical functions
  2614.                 X := 0.75;
  2615.                 for I in 1..N11 loop
  2616.                    X := SQRT(EXP(LOG(X)/T1));
  2617.                 end loop;
  2618.              -- end Moudle 11
  2619.  
  2620.           end loop CYCLE_LOOP;
  2621.  
  2622.           STOP_TIME := FLOAT(CPU_TIME_CLOCK);    --Get Whetstone stop time
  2623.     end WHETSTONE;
  2624.  
  2625.     procedure COMPUTE_WHETSTONE_KIPS is
  2626.        -- Variables used to control execution of benchmark and to
  2627.        -- compute the Whetstone rating :
  2628.  
  2629.           NO_OF_RUNS : INTEGER;   -- Number of times the benchmark is executed
  2630.           NO_OF_CYCLES : INTEGER; -- Number of times the group of benchmark
  2631.                                   -- modules is executed
  2632.           I : INTEGER;
  2633.              -- Factor weighting number of times each module loops
  2634.              -- A value of ten gives a total weight for modules of
  2635.              -- approximately one million Whetstone instructions
  2636.           START_TIME : FLOAT;
  2637.                      -- Time at which execution of benchmark modules begins
  2638.           STOP_TIME : FLOAT;
  2639.                     -- Time at which execution of benchmark modules ends
  2640.                     -- (time for NO_OF_CYCLES)
  2641.           ELAPSED_TIME : FLOAT;
  2642.                        -- Time between START_TIME and STOP_TIME
  2643.           MEAN_TIME : FLOAT;     -- Average time per cycle
  2644.           RATING : FLOAT;    -- Thousands of Whetstone instructions per sec
  2645.           MEAN_RATING : FLOAT;     -- Average Whetstone rating
  2646.           INT_RATING : INTEGER;    -- Integer value of KWIPS
  2647.  
  2648.           begin
  2649.             NEW_LINE; PUT_LINE("ADA Whetstone benchmark"); NEW_LINE;
  2650.             PUT_LINE("A000093 using standard internal math routines");
  2651.             NEW_LINE;
  2652.  
  2653.             MEAN_TIME := 0.0;
  2654.             MEAN_RATING := 0.0;
  2655.             NO_OF_CYCLES := 10;
  2656.             NO_OF_RUNS := 5;
  2657.             I := 10;
  2658.  
  2659.             RUN_LOOP:
  2660.             for RUN_NO in 1..NO_OF_RUNS loop
  2661.                -- Call the Whetstone benchmark parocedure
  2662.                WHETSTONE(I,NO_OF_CYCLES,START_TIME,STOP_TIME);
  2663.  
  2664.                -- Write the Whetstone start time
  2665.                NEW_LINE; PUT("Whetstone start time: "); PUT(START_TIME,5,2,0);
  2666.                PUT_LINE(" seconds");
  2667.  
  2668.                -- Write the Whetstone stop time
  2669.                NEW_LINE;   PUT("Whetstone stop time : ");
  2670.                PUT(STOP_TIME,5,2,0);     PUT_LINE(" seconds ");
  2671.  
  2672.                -- Compute and write elapsed time
  2673.                ELAPSED_TIME := STOP_TIME - START_TIME;
  2674.  
  2675.                NEW_LINE;  PUT("Elapsed time for "); PUT(NO_OF_CYCLES,3);
  2676.                PUT(" cycles : ");  PUT(ELAPSED_TIME,5,2,0);
  2677.                PUT_LINE(" seconds");
  2678.  
  2679.                -- Sum time in milliseconds per cycle
  2680.                MEAN_TIME := MEAN_TIME + (ELAPSED_TIME*1000.0)/FLOAT(NO_OF_CYCLES);
  2681.  
  2682.                -- Calculate the Whetstone rating based on the time for
  2683.                -- the number of cycles just executed and write
  2684.                RATING := (1000.0 * FLOAT(NO_OF_CYCLES))/ELAPSED_TIME;
  2685.  
  2686.                -- Sum Whetstone rating
  2687.                MEAN_RATING := MEAN_RATING + RATING;
  2688.                INT_RATING := INTEGER(RATING);
  2689.  
  2690.                NEW_LINE;  PUT("Whetstone rating : ");  PUT(INT_RATING);
  2691.                PUT_LINE(" KWIPS");  NEW_LINE;
  2692.  
  2693.                -- Reset NO_OF_CYCLES for next run using ten cycles more
  2694.                NO_OF_CYCLES := NO_OF_CYCLES + 10;
  2695.             end loop RUN_LOOP;
  2696.  
  2697.             -- Compute average time in millieseconds per cycle and write
  2698.             MEAN_TIME := MEAN_TIME/FLOAT(NO_OF_RUNS);
  2699.  
  2700.             NEW_LINE;  PUT("Average time per cycle : ");
  2701.             PUT(MEAN_TIME,5,2,0);   PUT_LINE(" milliseconds");
  2702.  
  2703.             -- Calculate average Whetstone rating and write
  2704.             MEAN_RATING := MEAN_RATING/FLOAT(NO_OF_RUNS);
  2705.             INT_RATING := INTEGER(MEAN_RATING);
  2706.  
  2707.             NEW_LINE;  PUT(" Average Whetstone rating : ");
  2708.             PUT(INT_RATING);  PUT_LINE(" KWIPS");
  2709.             NEW_LINE; NEW_LINE;
  2710.  
  2711.          end COMPUTE_WHETSTONE_KIPS;
  2712.  
  2713.          begin
  2714.             COMPUTE_WHETSTONE_KIPS;
  2715.          end A000093;
  2716. ::::::::::
  2717. A000094.ADA
  2718. ::::::::::
  2719. -- A000094.ADA   "Henessy" benchmarks
  2720. --
  2721. --  modified to use CPU_TIME_CLOCK rather than CALENDAR.CLOCK for PIWG
  2722. --  ( Editorial note: These are unchanged by PIWG other than the the use of
  2723. --    CPU time rather than wall time. These procedures are for comparison
  2724. --    purposes. Many came from other languages and are used for comparing
  2725. --    Ada to other languages. Most of these procedures would be considered
  2726. --    poor Ada programming. The matrix multiply is also a poor numerical
  2727. --    method. )
  2728. --
  2729. -- This is a suite of benchmarks that are relatively short, both in program
  2730. -- size and execution time.  It requires no input, and prints the execution
  2731. -- time for each program, using the system- dependent routine Getclock,
  2732. -- below, to find out the current CPU time.  It does a rudimentary check to
  2733. -- make sure each program gets the right output.  These programs were
  2734. -- gathered by John Henessy and modified by Peter Nye. 
  2735.  
  2736. -- Ada version translated from Pascal
  2737. -- 11/15/85 by Mitchell Gart, Alsys Inc.
  2738.  
  2739. with TEXT_IO, CPU_TIME_CLOCK, DURATION_IO;
  2740.  
  2741. procedure A000094 is
  2742.  
  2743.    -- Global variables:
  2744.    TIMER: DURATION ;
  2745.    XTIMES: ARRAY(1..11) OF DURATION;
  2746.    SORTELEMENTS: constant := 5000;
  2747.    type LISTSIZE is range 0..SORTELEMENTS;
  2748.    RANDARRAY: ARRAY (LISTSIZE) OF INTEGER;
  2749.    type LONG_INTEGER is range -2**30 .. 2**30 ; 
  2750.    SEED: LONG_INTEGER;
  2751.  
  2752.    -- Shared by Bubble and Quick 
  2753.    type sortarray is array (listsize) of integer;
  2754.    sortlist: sortarray;
  2755.    biggest, littlest: integer;
  2756.    top: listsize;
  2757.  
  2758.  
  2759.    -- global procedures 
  2760.  
  2761. --   Getclock was replaced by CPU_TIME_CLOCK
  2762. --   function Getclock return CALENDAR.TIME renames CALENDAR.CLOCK;
  2763.  
  2764.  
  2765.    procedure Initrand is
  2766.    begin
  2767.       seed := 74755;
  2768.    end;
  2769.  
  2770.    function Rand return integer is
  2771.    begin
  2772.       seed := (seed * 1309 + 13849) mod 32767;
  2773.       return INTEGER(SEED);
  2774.    end;
  2775.  
  2776.  
  2777.    generic
  2778.       type ELEM is private;
  2779.       with function CVT(VAL: INTEGER)      return ELEM;
  2780.       with function "+"(LEFT, RIGHT: ELEM) return ELEM is <>;
  2781.       with function "*"(LEFT, RIGHT: ELEM) return ELEM is <>;
  2782.    procedure MATRIX_MULT;
  2783.  
  2784.    -- Integer and real matrix multiplication, programmed with generics:
  2785.  
  2786.    procedure MATRIX_MULT is
  2787.       rowsize: constant := 40;
  2788.       type index is range 1 .. rowsize;
  2789.       type matrix is array (index,index) of ELEM;
  2790.       ima, imb, imr: matrix;
  2791.  
  2792.       procedure Initmatrix (m: out matrix) is
  2793.          K: LISTSIZE;
  2794.       begin
  2795.          K := 0;
  2796.          for I in INDEX'FIRST..INDEX'LAST loop
  2797.             for J in INDEX'FIRST..INDEX'LAST loop
  2798.                M(I,J) := CVT(RANDARRAY(K) mod 120 - 60);
  2799.                K := K+1;
  2800.             end loop;
  2801.          end loop;
  2802.       end INITMATRIX;
  2803.    
  2804.       procedure Innerproduct (
  2805.                    RESULT:     out ELEM; 
  2806.                    A,B:        in  MATRIX;
  2807.                    ROW,COLUMN: in  INDEX ) is
  2808.          -- computes the inner product of A(row, and B--,column) 
  2809.          RES : ELEM := CVT(0);
  2810.       begin
  2811.          for I in INDEX'FIRST..INDEX'LAST loop
  2812.             RES := RES + A(ROW,I)*B(I,COLUMN);
  2813.          end loop;
  2814.          RESULT := RES;
  2815.       end INNERPRODUCT;
  2816.    
  2817.    begin    -- MATRIX_MULT
  2818.       INITMATRIX (IMA);
  2819.       INITMATRIX (IMB);
  2820.       for I in INDEX'FIRST..INDEX'LAST loop
  2821.          for J in INDEX'FIRST..INDEX'LAST loop
  2822.             INNERPRODUCT(IMR(I,J),IMA,IMB,I,J);
  2823.          end loop;
  2824.       end loop;
  2825.    end MATRIX_MULT;
  2826.  
  2827.    -- Having to specify these conversion routines is sort of a pain.
  2828.    -- At least they are only called during matrix initialization,
  2829.    -- not during the product loop.
  2830.  
  2831.    function INT_CVT(I: INTEGER) return INTEGER is
  2832.    begin 
  2833.       return I;
  2834.    end INT_CVT;
  2835.  
  2836.    function FLOAT_CVT(I: INTEGER) return FLOAT is
  2837.    begin 
  2838.       return FLOAT(I);
  2839.    end FLOAT_CVT;
  2840.  
  2841.    -- Here are the instantiations.  "*" and "+" are implied parameters.
  2842.  
  2843.    procedure Intmm is new MATRIX_MULT(INTEGER, INT_CVT);
  2844.  
  2845.    procedure mm is new MATRIX_MULT(FLOAT, FLOAT_CVT);
  2846.  
  2847.  
  2848.    procedure Puzzle is 
  2849.  
  2850.       -- A compute-bound program from Forest Baskett. 
  2851.  
  2852.       size: constant := 511;
  2853.       classmax: constant := 3;
  2854.       typemax: constant := 12;
  2855.       d: constant := 8;
  2856.  
  2857.       type piececlass is range 0..classmax;
  2858.       type piecetype is range 0..typemax;
  2859.       type position is range 0..size;
  2860.       type piecerange is range 0..13;
  2861.  
  2862.       piececount: array (piececlass) of piecerange;
  2863.       class: array (piecetype) of piececlass;
  2864.       piecemax: array (piecetype) of position;
  2865.       puzzl: array (position) of boolean;
  2866.       p: array (piecetype, position) of boolean;
  2867.       m,n: position;
  2868.       kount: integer;
  2869.   
  2870.       function Fit (i : piecetype; j : position) return boolean is
  2871.   
  2872.             k,m      :       position;
  2873.   
  2874.       begin
  2875.          for k in 0 .. piecemax(i) loop
  2876.             if p(i,k) and then puzzl(j+k) then return false; end if;
  2877.          end loop;
  2878.          return true;
  2879.       end;
  2880.   
  2881.       function Place (i : piecetype; j : position) return position is
  2882.       begin
  2883.          for K in 0 .. PIECEMAX(I) loop
  2884.             if p(i,k) then puzzl(j+k) := true; end if;
  2885.          end loop;
  2886.          piececount(class(i)) := piececount(class(i)) - 1;
  2887.          for K in J .. SIZE loop
  2888.             if not PUZZL(K) then 
  2889.                return K;
  2890.             end if;
  2891.          end loop;
  2892.          return 0;
  2893.       end;
  2894.   
  2895.       procedure Remove (i : piecetype; j : position) is
  2896.       begin
  2897.          for K in 0 .. PIECEMAX(I) loop
  2898.             if P(I,K) then PUZZL(J+K) := FALSE; end if;
  2899.          end loop;
  2900.          PIECECOUNT(CLASS(I)) := PIECECOUNT(CLASS(I)) + 1;
  2901.       end REMOVE;
  2902.   
  2903.       function Trial (J : position) return boolean is
  2904.          k : position;
  2905.       begin
  2906.          kount := kount + 1;
  2907.          for I in PIECETYPE'FIRST..PIECETYPE'LAST loop
  2908.             if PIECECOUNT(CLASS(I)) /= 0 then
  2909.                if Fit (i, j) then 
  2910.                   k := Place (i, j);
  2911.                   if Trial(k) OR (k = 0) then 
  2912.                      return TRUE;
  2913.                   else 
  2914.                      Remove (i, j);
  2915.                   end if;
  2916.                end if;
  2917.             end if;
  2918.          end loop;
  2919.          return FALSE;
  2920.       end TRIAL;
  2921.   
  2922.    begin    -- PUZZLE
  2923.  
  2924.       for m in POSITION'FIRST..POSITION'LAST loop puzzl(m) := true; end loop;
  2925.       for i in 1 .. 5 loop for j in 1 .. 5 loop for k in 1 .. 5 loop
  2926.          puzzl(POSITION(i+d*(j+d*k))) := false;
  2927.       end loop; end loop; end loop;
  2928.       for i in PIECETYPE'FIRST..PIECETYPE'LAST loop 
  2929.          for m in POSITION'FIRST..POSITION'LAST loop 
  2930.             p(i, m) := false;
  2931.          end loop; 
  2932.       end loop;
  2933.       for i in 0..3 loop for j in 0 .. 1 loop for k in 0 .. 0 loop
  2934.             p(0,POSITION(i+d*(j+d*k))) := true;
  2935.          end loop; end loop; 
  2936.       end loop;
  2937.       class(0) := 0;
  2938.       piecemax(0) := 3+d*1+d*d*0;
  2939.       for i in 0 .. 1 loop for j in 0 .. 0 loop for k in 0 .. 3 loop
  2940.          p(1,POSITION(i+d*(j+d*k))) := true;
  2941.       end loop; end loop; end loop;
  2942.       class(1) := 0;
  2943.       piecemax(1) := 1+d*0+d*d*3;
  2944.       for i in 0 .. 0 loop for j in 0 .. 3 loop for k in 0 .. 1 loop
  2945.          p(2,POSITION(i+d*(j+d*k))) := true;
  2946.       end loop; end loop; end loop;
  2947.       class(2) := 0;
  2948.       piecemax(2) := 0+d*3+d*d*1;
  2949.       for i in 0 .. 1 loop for j in 0 .. 3 loop for k in 0 .. 0 loop
  2950.          p(3,POSITION(i+d*(j+d*k))) := true;
  2951.       end loop; end loop; end loop;
  2952.       class(3) := 0;
  2953.       piecemax(3) := 1+d*3+d*d*0;
  2954.       for i in 0 .. 3 loop for j in 0 .. 0 loop for k in 0 .. 1 loop
  2955.          p(4,POSITION(i+d*(j+d*k))) := true;
  2956.       end loop; end loop; end loop;
  2957.       class(4) := 0;
  2958.       piecemax(4) := 3+d*0+d*d*1;
  2959.       for i in 0 .. 0 loop for j in 0 .. 1 loop for k in 0 .. 3 loop
  2960.          p(5,POSITION(i+d*(j+d*k))) := true;
  2961.       end loop; end loop; end loop;
  2962.       class(5) := 0;
  2963.       piecemax(5) := 0+d*1+d*d*3;
  2964.       for i in 0 .. 2 loop for j in 0 .. 0 loop for k in 0 .. 0 loop
  2965.          p(6,POSITION(i+d*(j+d*k))) := true;
  2966.       end loop; end loop; end loop;
  2967.       class(6) := 1;
  2968.       piecemax(6) := 2+d*0+d*d*0;
  2969.       for i in 0 .. 0 loop for j in 0 .. 2 loop for k in 0 .. 0 loop
  2970.          p(7,POSITION(i+d*(j+d*k))) := true;
  2971.       end loop; end loop; end loop;
  2972.       class(7) := 1;
  2973.       piecemax(7) := 0+d*2+d*d*0;
  2974.       for i in 0 .. 0 loop for j in 0 .. 0 loop for k in 0 .. 2 loop
  2975.          p(8,POSITION(i+d*(j+d*k))) := true;
  2976.       end loop; end loop; end loop;
  2977.       class(8) := 1;
  2978.       piecemax(8) := 0+d*0+d*d*2;
  2979.       for i in 0 .. 1 loop for j in 0 .. 1 loop for k in 0 .. 0 loop
  2980.          p(9,POSITION(i+d*(j+d*k))) := true;
  2981.       end loop; end loop; end loop;
  2982.       class(9) := 2;
  2983.       piecemax(9) := 1+d*1+d*d*0;
  2984.       for i in 0 .. 1 loop for j in 0 .. 0 loop for k in 0 .. 1 loop
  2985.          p(10,POSITION(i+d*(j+d*k))) := true;
  2986.       end loop; end loop; end loop;
  2987.       class(10) := 2;
  2988.       piecemax(10) := 1+d*0+d*d*1;
  2989.       for i in 0 .. 0 loop for j in 0 .. 1 loop for k in 0 .. 1 loop
  2990.          p(11,POSITION(i+d*(j+d*k))) := true;
  2991.       end loop; end loop; end loop;
  2992.       class(11) := 2;
  2993.       piecemax(11) := 0+d*1+d*d*1;
  2994.       for i in 0 .. 1 loop for j in 0 .. 1 loop for k in 0 .. 1 loop
  2995.          p(12,POSITION(i+d*(j+d*k))) := true;
  2996.       end loop; end loop; end loop;
  2997.       class(12) := 3;
  2998.       piecemax(12) := 1+d*1+d*d*1;
  2999.       piececount(0) := 13;
  3000.       piececount(1) := 3;
  3001.       piececount(2) := 1;
  3002.       piececount(3) := 1;
  3003.       m := 1+d*(1+d*1);
  3004.       kount := 0;
  3005.       if Fit(0, m) then 
  3006.          n := Place(0, m);
  3007.       else 
  3008.          TEXT_IO.PUT_LINE("Error1 in Puzzle");
  3009.       end if;
  3010.       if NOT Trial(n) then 
  3011.          TEXT_IO.PUT_LINE("Error2 in Puzzle.");
  3012.       elsif kount /= 2005 then 
  3013.          TEXT_IO.PUT_LINE("Error3 in Puzzle.");
  3014.       end if;
  3015.    end PUZZLE;
  3016.  
  3017.  
  3018.    procedure TREES is 
  3019.  
  3020.       -- Sorts an array using treesort 
  3021.  
  3022.       type NODE;
  3023.       type NODEPTR is access NODE;
  3024.       type NODE is record
  3025.            LEFT,
  3026.            RIGHT: NODEPTR;
  3027.            VAL:   INTEGER;
  3028.       end record;
  3029.   
  3030.       -- tree 
  3031.       TREE: NODEPTR;
  3032.   
  3033.       procedure INITARR is
  3034.       begin
  3035.          BIGGEST := 0; LITTLEST := 0;
  3036.          for I in LISTSIZE'FIRST .. LISTSIZE'LAST loop
  3037.             SORTLIST(I) := (RANDARRAY(I) mod 10000) - 5000;
  3038.             if SORTLIST(I) > BIGGEST then 
  3039.                BIGGEST := SORTLIST(I);
  3040.             elsif SORTLIST(I) < LITTLEST then 
  3041.                LITTLEST := SORTLIST(I);
  3042.             end if;
  3043.          end loop;
  3044.       end INITARR;
  3045.  
  3046.       procedure INSERT(N: INTEGER;  T: in out NODEPTR) is
  3047.          -- insert n into tree 
  3048.  
  3049.          procedure CreateNode(t: in out nodeptr; n: in integer) is
  3050.          begin
  3051.             T := new NODE;
  3052.             T.LEFT := null; 
  3053.             T.RIGHT := null;
  3054.             T.VAL := N;
  3055.          end CREATENODE;
  3056.  
  3057.       begin
  3058.          if N>T.VAL then
  3059.             if T.LEFT=NULL then 
  3060.                CREATENODE(T.LEFT, N);
  3061.             else 
  3062.                INSERT(N, T.LEFT);
  3063.             end if;
  3064.          elsif N<T.VAL then
  3065.             if T.RIGHT=null then 
  3066.                CREATENODE(T.RIGHT,N);
  3067.             else 
  3068.                INSERT(N,T.RIGHT);
  3069.             end if;
  3070.          end if;
  3071.       end INSERT;
  3072.  
  3073.  
  3074.       function CHECKTREE(P: NODEPTR) return BOOLEAN is
  3075.          -- check by inorder traversal 
  3076.          RESULT: BOOLEAN;
  3077.       begin
  3078.          RESULT := TRUE;
  3079.          if P.LEFT/=null then
  3080.             if P.LEFT.VAL <= P.VAL then 
  3081.                RESULT:=FALSE;
  3082.             else 
  3083.                RESULT := CHECKTREE(P.LEFT) and RESULT;
  3084.             end if;
  3085.          end if;
  3086.          if P.RIGHT/=null then
  3087.             if P.RIGHT.VAL >= P.VAL then 
  3088.                RESULT := FALSE;
  3089.             else 
  3090.                RESULT := CHECKTREE(P.RIGHT) and RESULT;
  3091.             end if;
  3092.          end if;
  3093.          return RESULT;
  3094.       end CHECKTREE;
  3095.  
  3096.    begin    -- TREES
  3097.  
  3098.       INITARR;
  3099.       TREE := new NODE;
  3100.       TREE.LEFT := null; TREE.RIGHT := null; TREE.VAL:=SORTLIST(1);
  3101.       for I in 2 .. SORTELEMENTS loop 
  3102.          INSERT(SORTLIST(LISTSIZE(I)),TREE);
  3103.       end loop;
  3104.       if not CHECKTREE(TREE) then 
  3105.          TEXT_IO.PUT(" Error in Tree.");
  3106.       end if;
  3107.  
  3108.    end TREES;
  3109.  
  3110.  
  3111.    procedure Perm is 
  3112.       -- Permutation program, heavily recursive, written by Denny Brown. 
  3113.       type       permrange is range 0 .. 10;
  3114.       permarray: array (permrange) of permrange;
  3115.       pctr:      long_integer;
  3116.       i:         integer;
  3117.  
  3118.       procedure Swap(a, b : in permrange) is
  3119.          t : permrange;
  3120.       begin
  3121.          t := permarray(a);  
  3122.          permarray(a) := permarray(b);  
  3123.          permarray(b) := t;
  3124.       end;
  3125.  
  3126.       procedure Initialize is
  3127.       begin
  3128.          for i in 1 .. 7 loop
  3129.             permarray(permrange(i)) := permrange(i-1);
  3130.          end loop;
  3131.       end;
  3132.  
  3133.       procedure Permute(n : permrange) is
  3134.       begin   
  3135.          pctr := pctr + 1;
  3136.          if n /= 1 then  
  3137.              Permute(n-1);
  3138.              for k in reverse 1..n-1 loop
  3139.                 Swap(n, k);
  3140.                 Permute(n-1);
  3141.                 Swap(n, k);
  3142.              end loop;
  3143.           end if;
  3144.        end permute;
  3145.  
  3146.     begin   -- Perm 
  3147.        pctr := 0;
  3148.        for i in 1 .. 5 loop
  3149.           Initialize;
  3150.           Permute(7);
  3151.        end loop;
  3152.        if pctr /= 43300 then          
  3153.           TEXT_IO.PUT_LINE(" Error in Perm.");
  3154.        end if;
  3155.     end Perm;
  3156.  
  3157.  
  3158.    procedure Towers is
  3159.  
  3160.       -- Program to Solve the Towers of Hanoi
  3161.       towersbase: constant := 2.39;
  3162.       maxcells: constant := 18;
  3163.       type discsizrange is range 1..maxcells;
  3164.       type stackrange is range 1..3;
  3165.       type cellcursor is range 0..maxcells;
  3166.       type element is record
  3167.          discsize:discsizrange;
  3168.          next:cellcursor;
  3169.       end record;
  3170.    
  3171.       stack: array(stackrange) of cellcursor;
  3172.       cellspace: array(1..maxcells) of element;
  3173.       cfreelist: cellcursor;
  3174.       movesdone: integer;
  3175.       -- Freelist: integer;
  3176.  
  3177.       procedure Error (emsg: string) is
  3178.       begin
  3179.          TEXT_IO.PUT("Error in Towers:  ");
  3180.          TEXT_IO.PUT_LINE(EMSG);
  3181.       end;
  3182.  
  3183.       procedure Makenull (s:stackrange) is
  3184.       begin
  3185.          stack(s):=0;
  3186.       end;
  3187.  
  3188.       function Getelement return cellcursor is
  3189.          RESULT: CELLCURSOR;
  3190.       begin
  3191.          if cfreelist>0 then
  3192.             RESULT := cfreelist;
  3193.             cfreelist:=cellspace(integer(cfreelist)).next;
  3194.             return RESULT;
  3195.          else
  3196.             Error("out of space   ");
  3197.          end if;
  3198.       end getelement;
  3199.  
  3200.       procedure Push(i:discsizrange;s:stackrange) is
  3201.          errorfound:boolean;
  3202.          localel:cellcursor;
  3203.       begin
  3204.           errorfound:=false;
  3205.           if stack(s) > 0 then
  3206.               if cellspace(integer(stack(s))).discsize<=i then
  3207.                     errorfound:=true;
  3208.                     Error("disc size error");
  3209.               end if;
  3210.           end if;
  3211.           if NOT errorfound then
  3212.               localel:=Getelement;
  3213.               cellspace(integer(localel)).next:=stack(s);
  3214.               stack(s):=localel;
  3215.               cellspace(integer(localel)).discsize:=i;
  3216.           end if;
  3217.       end PUSH;
  3218.  
  3219.       procedure Init (s:stackrange;n:discsizrange) is
  3220.          discctr:discsizrange;
  3221.       begin
  3222.          Makenull(s);
  3223.          for discctr in reverse 1..n loop
  3224.             Push(discctr,s);
  3225.          end loop;
  3226.       end;
  3227.  
  3228.       function Pop (s:stackrange) return discsizrange is
  3229.          temp: cellcursor;
  3230.          result: discsizrange;
  3231.       begin
  3232.          if stack(s) > 0 then
  3233.             result := cellspace(integer(stack(s))).discsize;
  3234.             temp:=cellspace(integer(stack(s))).next;
  3235.             cellspace(integer(stack(s))).next:=cfreelist;
  3236.             cfreelist:=stack(s);
  3237.             stack(s):=temp;
  3238.             return result;
  3239.          else
  3240.              Error("nothing to pop ");
  3241.          end if;
  3242.       end pop;
  3243.  
  3244.       procedure Move (s1,s2:stackrange) is
  3245.       begin
  3246.          Push(Pop(s1),s2);
  3247.          movesdone:=movesdone+1;
  3248.       end;
  3249.  
  3250.       procedure Tower(i,j,k:integer) is
  3251.          other:integer;
  3252.       begin
  3253.          if k=1 then
  3254.             Move(stackrange(i),stackrange(j));
  3255.          else
  3256.             other:=6-i-j;
  3257.             Tower(i,other,k-1);
  3258.             Move(stackrange(i),stackrange(j));
  3259.             Tower(other,j,k-1);
  3260.          end if;
  3261.       end tower;
  3262.  
  3263.  
  3264.    begin -- Towers 
  3265.       for I in 1..MAXCELLS loop
  3266.          cellspace(integer(I)).NEXT := cellcursor(I - 1);
  3267.       end loop;
  3268.       cfreelist:=maxcells;
  3269.       Init(1,14);
  3270.       Makenull(2);
  3271.       Makenull(3);
  3272.       movesdone:=0;
  3273.       Tower(1,2,14);
  3274.       if movesdone /= 16383 then
  3275.           TEXT_IO.PUT_LINE("Error in Towers.");
  3276.       end if;
  3277.    end Towers;
  3278.  
  3279.  
  3280.    procedure Queens is 
  3281.  
  3282.       -- The eight queens problem, solved 50 times. 
  3283.  
  3284.       i: integer;
  3285.  
  3286.       procedure Doit is
  3287.  
  3288.          subtype doubleboard is integer range   2..16;
  3289.          subtype doublenorm  is integer range   -7..7;
  3290.          subtype boardrange  is integer range   1..8;
  3291.          type aarray is array (boardrange) of boolean;
  3292.          type barray is array (doubleboard) of boolean;
  3293.          type carray is array (doublenorm) of boolean;
  3294.          type xarray is array (boardrange) of boardrange;
  3295.  
  3296.          i: integer;
  3297.          q: boolean;
  3298.          a: aarray;
  3299.          b: barray;
  3300.          c: carray;
  3301.          x: xarray;
  3302.  
  3303.          procedure Try (
  3304.             i : in integer; 
  3305.             q : in out boolean; 
  3306.             a : in out barray;
  3307.             b : in out aarray) is
  3308.  
  3309.             j :   integer;
  3310.  
  3311.          begin
  3312.             j := 0;
  3313.             q := false;
  3314.             while (not Q) and (J /= 8) loop
  3315.                j := j + 1;
  3316.                q := false;
  3317.                if B(J) and A(I+J) and C(I-J) then
  3318.                   x(i) := j;
  3319.                   b(j) := false;
  3320.                   a(i+j) := false;
  3321.                   c(i-j) := false;
  3322.                   if i < 8 then
  3323.                      Try(i+1,q,a,b);
  3324.                      if NOT q then
  3325.                         b(j) := true;
  3326.                         a(i+j) := true;
  3327.                         c(i-j) := true;
  3328.                      end if;
  3329.                   else 
  3330.                      q := true;
  3331.                   end if;
  3332.                end if;
  3333.             end loop;
  3334.          end TRY;
  3335.  
  3336.       begin    -- Doit
  3337.          i := 0 - 7;
  3338.          while I <= 16 loop
  3339.             if (I >= 1) and (I <= 8) then A(I) := TRUE; end if;
  3340.             if i >= 2 then B(I) := TRUE; end if;
  3341.             if i <= 7 then c(i) := true; end if;
  3342.             i := i + 1;
  3343.          end loop;
  3344.  
  3345.          Try(1, q, b, a);
  3346.          if not Q then
  3347.             TEXT_IO.PUT_LINE(" Error in Queens.");
  3348.          end if;
  3349.       end DOIT;
  3350.  
  3351.    begin    -- Queens
  3352.       for i in 1 .. 50 loop
  3353.          Doit;
  3354.       end loop;
  3355.    end QUEENS;
  3356.  
  3357.  
  3358.    procedure Quick is 
  3359.  
  3360.       -- Sorts an array using quicksort 
  3361.  
  3362.       procedure INITARR is
  3363.       begin
  3364.          BIGGEST := -6500; LITTLEST := 6500;
  3365.          for I in 1 .. SORTELEMENTS loop
  3366.             SORTLIST(LISTSIZE(I)) := (RANDARRAY(LISTSIZE(I)) mod 10000) - 5000;
  3367.             if SORTLIST(LISTSIZE(I)) > BIGGEST then 
  3368.                BIGGEST := SORTLIST(LISTSIZE(I));
  3369.             elsif SORTLIST(LISTSIZE(I)) < LITTLEST then 
  3370.                LITTLEST := SORTLIST(LISTSIZE(I));
  3371.             end if;
  3372.          end loop;
  3373.       end INITARR;
  3374.  
  3375.       procedure QUICKSORT(A: in out SORTARRAY; L,R: LISTSIZE) is
  3376.       -- quicksort the array A from start to finish 
  3377.          I,J: INTEGER;
  3378.          X,W: INTEGER;
  3379.       begin
  3380.          I:=INTEGER(L); J:=INTEGER(R);
  3381.          X:=A((L+R)/2);
  3382.          loop
  3383.             while A(LISTSIZE(I))<X loop I := I+1; end loop;
  3384.             while X<A(LISTSIZE(J)) loop J := J-1; end loop;
  3385.             if I<=J then 
  3386.                W := A(LISTSIZE(I));
  3387.                A(LISTSIZE(I)) := A(LISTSIZE(J));
  3388.                A(LISTSIZE(J)) := W;
  3389.                I := i+1;    
  3390.                J:= J-1;
  3391.             end if;
  3392.             exit when I > J;
  3393.          end loop;
  3394.          if L <LISTSIZE(J) then QUICKSORT(A,L,LISTSIZE(J)); end if;
  3395.          if LISTSIZE(I)<R then QUICKSORT(A,LISTSIZE(I),R); end if;
  3396.       end QUICKSORT;
  3397.  
  3398.    begin    -- QUICK
  3399.       INITARR;
  3400.       QUICKSORT(SORTLIST, 1, SORTELEMENTS);
  3401.       if (SORTLIST(1) /= LITTLEST) or (SORTLIST(SORTELEMENTS) /= BIGGEST) then
  3402.          TEXT_IO.PUT(" Error in Quick.");
  3403.       end if;
  3404.    end QUICK;
  3405.  
  3406.  
  3407.  
  3408.    procedure Bubble is 
  3409.  
  3410.       -- Sorts an array using bubblesort 
  3411.  
  3412.       J:      INTEGER;
  3413.       I, TOP: LISTSIZE;
  3414.       LIMIT:  constant LISTSIZE := SORTELEMENTS/10;
  3415.  
  3416.       procedure INITARR is
  3417.          I: LISTSIZE;
  3418.       begin
  3419.          BIGGEST := 0; LITTLEST := 0;
  3420.          for I in 1 .. LISTSIZE'(SORTELEMENTS) loop
  3421.             SORTLIST(I) := (RANDARRAY(I) mod 10000) - 5000;
  3422.             if SORTLIST(I) > BIGGEST then 
  3423.                BIGGEST := SORTLIST(I);
  3424.             elsif SORTLIST(I) < LITTLEST then 
  3425.                LITTLEST := SORTLIST(I);
  3426.             end if;
  3427.          end loop;
  3428.       end INITARR;
  3429.  
  3430.    begin    -- BUBBLE
  3431.       INITARR;
  3432.       TOP := LIMIT;
  3433.       while TOP>1 loop
  3434.          I:=1;
  3435.          while I<TOP loop 
  3436.             if SORTLIST(I) > SORTLIST(I+1) then 
  3437.                J := SORTLIST(I);
  3438.                SORTLIST(I) := SORTLIST(I+1);
  3439.                SORTLIST(I+1) := J;
  3440.             end if;
  3441.             I:=I+1;
  3442.         end loop;
  3443.         TOP:=TOP-1;
  3444.       end loop;
  3445.       for I in 2 .. LIMIT loop
  3446.          if (SORTLIST(I-1) > SORTLIST(I)) then
  3447.             TEXT_IO.PUT("Error3 in Bubble.");
  3448.          end if;
  3449.       end loop;
  3450.    end BUBBLE;
  3451.  
  3452.  
  3453.    procedure OSCAR is 
  3454.  
  3455.       -- fft 
  3456.  
  3457.       FFTSIZE: constant := 256 ;
  3458.       FFTSIZE2: constant := 129  ;
  3459.  
  3460.       type COMPLEX is record  
  3461.          rp,
  3462.          ip: FLOAT;
  3463.       end record;
  3464.       type CARRAY is array (1..FFTSIZE) of COMPLEX ;
  3465.       type C2ARRAY is array (1..FFTSIZE2) of COMPLEX ;
  3466.  
  3467.       Z, W   : CARRAY ;
  3468.       E      : C2ARRAY ;
  3469.       ZR, ZI : FLOAT;
  3470.  
  3471.       function COS (X: FLOAT) return FLOAT is
  3472.          -- computes cos of x (x in radians) by an expansion 
  3473.          type T is range 2..10;
  3474.          I: T;
  3475.          RESULT,POWER: FLOAT;
  3476.          FACTOR: LONG_INTEGER;
  3477.       begin
  3478.          RESULT := 1.0; FACTOR := 1;  POWER := X;
  3479.          for I in 2 .. 10 loop 
  3480.             FACTOR := FACTOR * LONG_INTEGER(I);  POWER := POWER*X;
  3481.             if (I mod 2) = 0 then  
  3482.                if (i mod 4) = 0 then 
  3483.                   result := result + power/FLOAT(FACTOR);
  3484.                else 
  3485.                   result := result - power/FLOAT(FACTOR);
  3486.                end if;
  3487.             end if;
  3488.          end loop;
  3489.          return RESULT;
  3490.       end;
  3491.  
  3492.       function MIN0( ARG1, ARG2 : INTEGER) return INTEGER is
  3493.       begin
  3494.          if ARG1 < ARG2 then
  3495.             return ARG1;
  3496.          else
  3497.             return ARG2;
  3498.          end if;
  3499.       end MIN0;
  3500.   
  3501.       procedure UNIFORM11( IY:  in out LONG_INTEGER;
  3502.                            YFL: out    FLOAT) is
  3503.       begin
  3504.          IY := (4855*IY + 1731) mod 8192;
  3505.          YFL := FLOAT(IY)/8192.0;
  3506.       end UNIFORM11;
  3507.  
  3508.       procedure EXPTAB(N: INTEGER;
  3509.                        E: in out C2ARRAY) is
  3510.  
  3511.          H: array (1..25) of FLOAT ;
  3512.          I, J, K, L, M : INTEGER;
  3513.          THETA, DIVISOR : FLOAT;
  3514.  
  3515.       begin     -- exptab 
  3516.          THETA := 3.1415926536;
  3517.          DIVISOR := 4.0;
  3518.          for I  in 1 .. 25 loop
  3519.             H(I) := 1.0/(2.0*COS( THETA/DIVISOR ));
  3520.             DIVISOR := DIVISOR + DIVISOR;
  3521.          end loop;
  3522.     
  3523.          M := N / 2 ;
  3524.          L := M / 2 ;
  3525.          J := 1 ;
  3526.          E(1).RP := 1.0 ;
  3527.          E(1).IP := 0.0;
  3528.          E(L+1).RP := 0.0;
  3529.          E(L+1).IP := 1.0 ;
  3530.          E(M+1).RP := -1.0 ;
  3531.          E(M+1).IP := 0.0 ;
  3532.     
  3533.          loop
  3534.             I := L / 2 ;
  3535.             K := I ;
  3536.     
  3537.             loop
  3538.                E(K+1).RP := H(J)*(E(K+I+1).RP+E(K-I+1).RP) ;
  3539.                E(K+1).IP := H(J)*(E(K+I+1).IP+E(K-I+1).IP) ;
  3540.                K := K+L ;
  3541.                exit when K > M ;
  3542.             end loop;
  3543.     
  3544.             J := MIN0( J+1, 25);
  3545.             L := I ;
  3546.             exit when L <= 1 ;
  3547.          end loop;
  3548.     
  3549.       end EXPTAB;
  3550.  
  3551.       procedure FFT( N:      in     INTEGER ;
  3552.                      Z, W:   in out CARRAY ;
  3553.                      E:      in     C2ARRAY ;
  3554.                      SQRINV: in     FLOAT) is
  3555.  
  3556.          I, J, K, L, M, INDEX: INTEGER ;
  3557.  
  3558.       begin
  3559.          m := n / 2 ;
  3560.          l := 1 ;
  3561.  
  3562.          loop
  3563.             k := 0 ;
  3564.             j := l ;
  3565.             i := 1 ;
  3566.  
  3567.             loop
  3568.  
  3569.                loop
  3570.                   W(I+K).RP := Z(I).RP+Z(M+I).RP ;
  3571.                   W(I+K).IP := Z(I).IP+Z(M+I).IP ;
  3572.                   W(I+J).RP := E(K+1).RP*(Z(I).RP-Z(I+M).RP)
  3573.                         -E(K+1).IP*(Z(I).IP-Z(I+M).IP) ;
  3574.                   W(I+J).IP := E(K+1).RP*(Z(I).IP-Z(I+M).IP)
  3575.                         +E(K+1).IP*(Z(I).RP-Z(I+M).RP) ;
  3576.                   I := I+1 ;
  3577.                   exit when I > J ;
  3578.                end loop;
  3579.  
  3580.                K := J ;
  3581.                J := K+L ;
  3582.                exit when J > M ;
  3583.             end loop;
  3584.  
  3585.             -- Z := W; 
  3586.             INDEX := 1;
  3587.             loop
  3588.                Z(INDEX) := W(INDEX);
  3589.                INDEX := INDEX+1;
  3590.                exit when INDEX > N;
  3591.             end loop;
  3592.             L := L+L ;
  3593.             exit when l > m ;
  3594.          end loop;
  3595.  
  3596.          for I in 1 .. N loop
  3597.             Z(I).RP := SQRINV*Z(I).RP ;
  3598.             Z(I).IP := -SQRINV*Z(I).IP;
  3599.          end loop;
  3600.       end FFT;
  3601.  
  3602.    begin     -- oscar 
  3603.  
  3604.       EXPTAB(FFTSIZE,E) ;
  3605.       SEED := 5767 ;
  3606.       for I in 1 .. FFTSIZE loop
  3607.          UNIFORM11( SEED, ZR );
  3608.          UNIFORM11( SEED, ZI );
  3609.          Z(I).RP := 20.0*ZR - 10.0;
  3610.          Z(I).IP := 20.0*ZI - 10.0;
  3611.       end loop;
  3612.  
  3613.       for I in 1 .. 20 loop 
  3614.          FFT(FFTSIZE,Z,W,E,0.0625) ;
  3615.          -- Printcomplex( 6, 99, z, 1, 256, 17 ); 
  3616.       end loop;
  3617.  
  3618.    end OSCAR;
  3619.  
  3620.  
  3621.    procedure ackerman is
  3622.       -- Ackerman function Ack(3,6) run 10 times:
  3623.       x : integer;
  3624.       function ack (m, n: integer) return integer is
  3625.       begin
  3626.          if m = 0 then
  3627.             return n + 1;
  3628.          elsif n = 0 then
  3629.             return ack (m - 1, 1);
  3630.          else 
  3631.             return ack (m - 1, ack (m, n - 1));
  3632.          end if;
  3633.       end;
  3634.    begin
  3635.       for i in 1 .. 10 loop
  3636.          x := ack (3, 6);
  3637.       end loop;
  3638.    end ackerman;
  3639.  
  3640.  
  3641. begin        -- BENCH  A00094 
  3642.    INITRAND;   
  3643.    for I in 1..SORTELEMENTS loop      
  3644.       RANDARRAY(LISTSIZE(I)) := RAND;   
  3645.    end loop;   
  3646.    TEXT_IO.PUT_LINE("A000094");
  3647.    TEXT_IO.PUT("   Perm");timer := CPU_TIME_CLOCK;
  3648.    Perm;   xtimes(1) := CPU_TIME_CLOCK-timer;
  3649.    TEXT_IO.PUT(" Towers");timer := CPU_TIME_CLOCK;
  3650.    Towers; xtimes(2) := CPU_TIME_CLOCK-timer;   
  3651.    TEXT_IO.PUT(" Queens");timer := CPU_TIME_CLOCK;
  3652.    Queens; xtimes(3) := CPU_TIME_CLOCK-timer;   
  3653.    TEXT_IO.PUT("  Intmm");timer := CPU_TIME_CLOCK;
  3654.    Intmm;  xtimes(4) := CPU_TIME_CLOCK-timer;
  3655.    TEXT_IO.PUT("     Mm");timer := CPU_TIME_CLOCK;
  3656.    Mm;     xtimes(5) := CPU_TIME_CLOCK-timer;   
  3657.    TEXT_IO.PUT(" Puzzle");timer := CPU_TIME_CLOCK;
  3658.    Puzzle; xtimes(6) := CPU_TIME_CLOCK-timer;   
  3659.    TEXT_IO.PUT("  Quick");timer := CPU_TIME_CLOCK;
  3660.    Quick;  xtimes(7) := CPU_TIME_CLOCK-timer;
  3661.    TEXT_IO.PUT(" Bubble");timer := CPU_TIME_CLOCK;
  3662.    Bubble; xtimes(8) := CPU_TIME_CLOCK-timer;   
  3663.    TEXT_IO.PUT("   Tree");timer := CPU_TIME_CLOCK;
  3664.    Trees;  xtimes(9) := CPU_TIME_CLOCK-timer;   
  3665.    TEXT_IO.PUT("    FFT");timer := CPU_TIME_CLOCK;
  3666.    Oscar;  xtimes(10):= CPU_TIME_CLOCK-timer;   
  3667.    TEXT_IO.PUT("    Ack");timer := CPU_TIME_CLOCK;
  3668.    Ackerman;xtimes(11):= CPU_TIME_CLOCK-timer;   
  3669.    TEXT_IO.NEW_LINE;
  3670.    for I in 1..11 loop      
  3671.       DURATION_IO.PUT(XTIMES(I), FORE=>4, AFT=>2, EXP=>0);
  3672.    end loop;   
  3673.    TEXT_IO.NEW_LINE;
  3674.  
  3675. end A000094;
  3676. ::::::::::
  3677. A000098.ADA
  3678. ::::::::::
  3679. -- This is a sample skeleton test
  3680. -- It is based on the concept of having a control loop
  3681. -- and a test loop. The test loop has everything the control loop has
  3682. -- plus CASE_COUNT copies of A feature to be measured.
  3683. -- The time reported for the feature is based on many iterations.
  3684. -- The measurement auto calibrates using the ITERATION package.
  3685. -- The time calculation is a difference of a difference and thus
  3686. -- removes measurement bias from many sources.
  3687.  
  3688.  
  3689. -- PERFORMANCE MEASUREMENT : Comment here and at bottom on what measured
  3690. --                           more comments
  3691. --                           more comments
  3692.  
  3693. with REMOTE_GLOBAL ; use REMOTE_GLOBAL ; -- control optimization
  3694. with ITERATION ; -- obtain stable measurement
  3695. with PIWG_IO ; -- output results
  3696.  
  3697. procedure A000098 is  -- main procedure to execute
  3698.  
  3699.   CPU_TIME : DURATION ; -- CPU time for one feature execution
  3700.   WALL_TIME : DURATION ; -- WALL time for one feature execution
  3701.   CHECK_TIMES : constant := 100 ; -- inside loop count and check
  3702.   ITERATION_COUNT : INTEGER ; -- set and varied by ITERATION package
  3703.   STABLE : BOOLEAN ; -- true when measurement stable
  3704.   CASE_COUNT : constant := <number of repetitions> ;
  3705. --
  3706. -- More declarations may go here
  3707. --
  3708.  
  3709. begin
  3710.  
  3711.   ITERATION.START_CONTROL ;  -- dummy to bring in pages on some machines
  3712.  
  3713.   delay 0.5 ;  -- wait for stable enviornment on some machines
  3714.  
  3715.   ITERATION.INITIALIZE ( ITERATION_COUNT ) ;
  3716.  
  3717.   loop  -- until stable measurement, ITERATION_COUNT increases each time
  3718.  
  3719. --
  3720. -- Control loop
  3721. --
  3722.     ITERATION.START_CONTROL ;
  3723.     for J in 1 .. ITERATION_COUNT loop
  3724.       GLOBAL := 0 ;
  3725.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  3726.         GLOBAL := GLOBAL + A_ONE ; -- typical control loop is
  3727.         REMOTE ;                   -- these two statements
  3728.       end loop ;
  3729.     end loop ;
  3730.     ITERATION.STOP_CONTROL ( GLOBAL , CHECK_TIMES ) ;
  3731.  
  3732. --
  3733. -- Test loop
  3734. --
  3735.     ITERATION.START_TEST ;
  3736.     for J in 1 .. ITERATION_COUNT loop
  3737.       GLOBAL := 0 ;
  3738.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  3739. --      PROC_0 ;  -- this has control global increment and call inside
  3740.                   -- example of testing a feature in the test loop
  3741.         null;
  3742.       end loop ;
  3743.     end loop ;
  3744.     GLOBAL := GLOBAL / CASE_COUNT ;
  3745.     ITERATION.STOP_TEST ( GLOBAL , CHECK_TIMES ) ;
  3746.     ITERATION.TEST_STABLE ( ITERATION_COUNT , STABLE ) ;
  3747.     exit when STABLE ;
  3748.   end loop ;
  3749. --
  3750.   ITERATION.FEATURE_TIMES ( CPU_TIME , WALL_TIME ) ;
  3751.   CPU_TIME := DURATION ( CPU_TIME / CASE_COUNT ) ;
  3752.   WALL_TIME := DURATION ( WALL_TIME / CASE_COUNT ) ;
  3753.  
  3754. --
  3755. -- Printout
  3756. --
  3757.   PIWG_IO.PIWG_OUTPUT ( "A000098" , "Procedure" ,
  3758.                         CPU_TIME , WALL_TIME , ITERATION_COUNT ,
  3759.      " Three lines of comments explaining what was measured " ,
  3760.      " more comments " ,
  3761.      " more comments" ) ;
  3762.  
  3763. end A000098 ;
  3764. ::::::::::
  3765. A000099.ADA
  3766. ::::::::::
  3767. -- This is a sample skeleton test
  3768. -- It is based on the concept of having a control loop
  3769. -- and a test loop. The test loop has everything the control loop has
  3770. -- plus one feature to be measured.
  3771. -- The time reported for the feature is based on many iterations.
  3772. -- The measurement auto calibrates using the ITERATION package.
  3773. -- The time calculation is a difference of a difference and thus
  3774. -- removes measurement bias from many sources.
  3775.  
  3776.  
  3777. -- PERFORMANCE MEASUREMENT : Comment here and at bottom on what measured
  3778. --                           more comments
  3779. --                           more comments
  3780.  
  3781. with REMOTE_GLOBAL ; use REMOTE_GLOBAL ; -- control optimization
  3782. with ITERATION ; -- obtain stable measurement
  3783. with PIWG_IO ; -- output results
  3784.  
  3785. procedure A000099 is  -- main procedure to execute
  3786.  
  3787.   CPU_TIME : DURATION ; -- CPU time for one feature execution
  3788.   WALL_TIME : DURATION ; -- WALL time for one feature execution
  3789.   CHECK_TIMES : constant := 100 ; -- inside loop count and check
  3790.   ITERATION_COUNT : INTEGER ; -- set and varied by ITERATION package
  3791.   STABLE : BOOLEAN ; -- true when measurement stable
  3792.  
  3793. --
  3794. -- More declarations may go here
  3795. --
  3796.  
  3797. begin
  3798.  
  3799.   ITERATION.START_CONTROL ;  -- dummy to bring in pages on some machines
  3800.  
  3801.   delay 0.5 ;  -- wait for stable enviornment on some machines
  3802.  
  3803.   ITERATION.INITIALIZE ( ITERATION_COUNT ) ;
  3804.  
  3805.   loop  -- until stable measurement, ITERATION_COUNT increases each time
  3806.  
  3807. --
  3808. -- Control loop
  3809. --
  3810.     ITERATION.START_CONTROL ;
  3811.     for J in 1 .. ITERATION_COUNT loop
  3812.       GLOBAL := 0 ;
  3813.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  3814.         GLOBAL := GLOBAL + A_ONE ; -- typical control loop is
  3815.         REMOTE ;                   -- these two statements
  3816.       end loop ;
  3817.     end loop ;
  3818.     ITERATION.STOP_CONTROL ( GLOBAL , CHECK_TIMES ) ;
  3819.  
  3820. --
  3821. -- Test loop
  3822. --
  3823.     ITERATION.START_TEST ;
  3824.     for J in 1 .. ITERATION_COUNT loop
  3825.       GLOBAL := 0 ;
  3826.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  3827. --      PROC_0 ;  -- this has control global increment and call inside
  3828.                   -- example of testing a feature in the test loop
  3829.         null;
  3830.       end loop ;
  3831.     end loop ;
  3832.     ITERATION.STOP_TEST ( GLOBAL , CHECK_TIMES ) ;
  3833.     ITERATION.TEST_STABLE ( ITERATION_COUNT , STABLE ) ;
  3834.     exit when STABLE ;
  3835.   end loop ;
  3836. --
  3837.   ITERATION.FEATURE_TIMES ( CPU_TIME , WALL_TIME ) ;
  3838.  
  3839. --
  3840. -- Printout
  3841. --
  3842.   PIWG_IO.PIWG_OUTPUT ( "A000099" , "Procedure" ,
  3843.                         CPU_TIME , WALL_TIME , ITERATION_COUNT ,
  3844.      " Three lines of comments explaining what was measured " ,
  3845.      " more comments " ,
  3846.      " more comments" ) ;
  3847.  
  3848. end A000099 ;
  3849. ::::::::::
  3850. A000100.ADA
  3851. ::::::::::
  3852. -- This is a procedure that calls all the timing procedures once
  3853.  
  3854. with A000091 ;
  3855. --with A000092 ; -- comment out  or  provide host math library in A000092.ADA
  3856. with A000093 ;
  3857. with A000094 ;
  3858. with C000001 ;
  3859. with C000002 ;
  3860. with C000003 ;
  3861. with D000001 ;
  3862. with D000002 ;
  3863. with D000003 ;
  3864. with D000004 ;
  3865. with E000001 ;
  3866. with E000002 ;
  3867. with E000004 ;
  3868. with F000001 ;
  3869. with F000002 ;
  3870. with G000001 ;
  3871. with G000002 ;
  3872. with G000003 ;
  3873. with G000004 ;
  3874. with G000005 ;
  3875. with G000006 ;
  3876. with G000007 ;
  3877. with L000001 ;
  3878. with L000002 ;
  3879. with L000003 ;
  3880. with P000001 ;
  3881. with P000002 ;
  3882. with P000003 ;
  3883. with P000004 ;
  3884. with P000005 ;
  3885. with P000006 ;
  3886. with P000007 ;
  3887. with P000010 ;
  3888. with P000011 ;
  3889. with P000012 ;
  3890. with P000013 ;
  3891. with T000001 ;
  3892. with T000002 ;
  3893. with T000003 ;
  3894. with T000004 ;
  3895. with T000005 ;
  3896. with T000006 ;
  3897. --with T000007 ; -- may not work on some compilers
  3898.  
  3899. procedure A000100 is
  3900. begin
  3901.  
  3902.   A000091 ;
  3903. --  A000092 ; -- comment out  or  provide host math routines in A000094.ADA
  3904.   A000093 ;
  3905.   A000094 ;
  3906.   C000001 ;
  3907.   C000002 ;
  3908.   C000003 ;
  3909.   D000001 ;
  3910.   D000002 ;
  3911.   D000003 ;
  3912.   D000004 ;
  3913.   E000001 ;
  3914.   E000002 ;
  3915.   E000004 ;
  3916.   F000001 ;
  3917.   F000002 ;
  3918.   G000001 ;
  3919.   G000002 ;
  3920.   G000003 ;
  3921.   G000004 ;
  3922.   G000005 ;
  3923.   G000006 ;
  3924.   G000007 ;
  3925.   L000001 ;
  3926.   L000002 ;
  3927.   L000003 ;
  3928.   P000001 ;
  3929.   P000002 ;
  3930.   P000003 ;
  3931.   P000004 ;
  3932.   P000005 ;
  3933.   P000006 ;
  3934.   P000007 ;
  3935.   P000010 ;
  3936.   P000011 ;
  3937.   P000012 ;
  3938.   P000013 ;
  3939.   T000001 ;
  3940.   T000002 ;
  3941.   T000003 ;
  3942.   T000004 ;
  3943.   T000005 ;
  3944.   T000006 ;
  3945. --  T000007 ; -- only a check. it will not work on some hosts.
  3946.  
  3947. end A000100 ;
  3948. ::::::::::
  3949. A000101.ADA
  3950. ::::::::::
  3951. -- This is a procedure that calls about half of the timing procedures once
  3952.  
  3953. with A000091 ;
  3954. with A000093 ;
  3955. with A000094 ;
  3956. with C000001 ;
  3957. with C000002 ;
  3958. with C000003 ;
  3959. with D000001 ;
  3960. with D000002 ;
  3961. with D000003 ;
  3962. with D000004 ;
  3963. with E000001 ;
  3964. with E000002 ;
  3965. with E000004 ;
  3966. with F000001 ;
  3967. with F000002 ;
  3968. with G000001 ;
  3969. with G000002 ;
  3970. with G000003 ;
  3971. with G000004 ;
  3972. with G000005 ;
  3973. with G000006 ;
  3974. with G000007 ;
  3975.  
  3976. procedure A000101 is
  3977. begin
  3978.  
  3979.   A000091 ;
  3980.   A000093 ;
  3981.   A000094 ;
  3982.   C000001 ;
  3983.   C000002 ;
  3984.   C000003 ;
  3985.   D000001 ;
  3986.   D000002 ;
  3987.   D000003 ;
  3988.   D000004 ;
  3989.   E000001 ;
  3990.   E000002 ;
  3991.   E000004 ;
  3992.   F000001 ;
  3993.   F000002 ;
  3994.   G000001 ;
  3995.   G000002 ;
  3996.   G000003 ;
  3997.   G000004 ;
  3998.   G000005 ;
  3999.   G000006 ;
  4000.   G000007 ;
  4001.  
  4002. end A000101 ;
  4003. ::::::::::
  4004. A000102.ADA
  4005. ::::::::::
  4006. -- This is a procedure that calls the other half of the timing procedures once
  4007.  
  4008. with L000001 ;
  4009. with L000002 ;
  4010. with L000003 ;
  4011. with P000001 ;
  4012. with P000002 ;
  4013. with P000003 ;
  4014. with P000004 ;
  4015. with P000005 ;
  4016. with P000006 ;
  4017. with P000007 ;
  4018. with P000010 ;
  4019. with P000011 ;
  4020. with P000012 ;
  4021. with P000013 ;
  4022. with T000001 ;
  4023. with T000002 ;
  4024. with T000003 ;
  4025. with T000004 ;
  4026. with T000005 ;
  4027. with T000006 ;
  4028.  
  4029. procedure A000102 is
  4030. begin
  4031.  
  4032.   L000001 ;
  4033.   L000002 ;
  4034.   L000003 ;
  4035.   P000001 ;
  4036.   P000002 ;
  4037.   P000003 ;
  4038.   P000004 ;
  4039.   P000005 ;
  4040.   P000006 ;
  4041.   P000007 ;
  4042.   P000010 ;
  4043.   P000011 ;
  4044.   P000012 ;
  4045.   P000013 ;
  4046.   T000001 ;
  4047.   T000002 ;
  4048.   T000003 ;
  4049.   T000004 ;
  4050.   T000005 ;
  4051.   T000006 ;
  4052.  
  4053. end A000102 ;
  4054. ::::::::::
  4055. A000103.ADA
  4056. ::::::::::
  4057. -- This is a procedure that calls most of the timing procedures 10 times
  4058. --    The task timing is not set up for use in a loop
  4059.  
  4060. with A000049 ; -- must be used with A000043, PIWG_IO to disk
  4061. with A000091 ;
  4062. --with A000092 ; -- comment out  or  provide host math library in A000092.ADA
  4063. with A000093 ;
  4064. with A000094 ;
  4065. with C000001 ;
  4066. with C000002 ;
  4067. with C000003 ;
  4068. with D000001 ;
  4069. with D000002 ;
  4070. with D000003 ;
  4071. with D000004 ;
  4072. with E000001 ;
  4073. with E000002 ;
  4074. with E000004 ;
  4075. with F000001 ;
  4076. with F000002 ;
  4077. with G000001 ;
  4078. with G000002 ;
  4079. with G000003 ;
  4080. with G000004 ;
  4081. with G000005 ;
  4082. with G000006 ;
  4083. with G000007 ;
  4084. with L000001 ;
  4085. with L000002 ;
  4086. with L000003 ;
  4087. with P000001 ;
  4088. with P000002 ;
  4089. with P000003 ;
  4090. with P000004 ;
  4091. with P000005 ;
  4092. with P000006 ;
  4093. with P000007 ;
  4094. with P000010 ;
  4095. with P000011 ;
  4096. with P000012 ;
  4097. with P000013 ;
  4098. with T000001 ;
  4099. with T000002 ;
  4100. with T000003 ;
  4101. with T000004 ;
  4102. with T000005 ;
  4103. with T000006 ;
  4104.  
  4105. procedure A000103 is
  4106. begin
  4107.  
  4108.   A000091 ;
  4109. --  A000092 ; -- comment out  or  provide host math routines
  4110.   A000093 ;
  4111.   A000094 ;
  4112.   C000001 ;
  4113.   C000002 ;
  4114.   C000003 ;
  4115.   for I in 1..10 loop -- data collected on disk, then averaged
  4116.     D000001 ;
  4117.     D000002 ;
  4118.     D000003 ;
  4119.     D000004 ;
  4120.     E000001 ;
  4121.     E000002 ;
  4122.     E000004 ;
  4123.     F000001 ;
  4124.     F000002 ;
  4125.     G000001 ;
  4126.     G000002 ;
  4127.     G000003 ;
  4128.     G000004 ;
  4129.     G000005 ;
  4130.     G000006 ;
  4131.     G000007 ;
  4132.     L000001 ;
  4133.     L000002 ;
  4134.     L000003 ;
  4135.     P000001 ;
  4136.     P000002 ;
  4137.     P000003 ;
  4138.     P000004 ;
  4139.     P000005 ;
  4140.     P000006 ;
  4141.     P000007 ;
  4142.     P000010 ;
  4143.     P000011 ;
  4144.     P000012 ;
  4145.     P000013 ;
  4146.   end loop ;
  4147.   T000001 ;
  4148.   T000002 ;
  4149.   T000003 ;
  4150.   T000004 ;
  4151.   T000005 ;
  4152.   T000006 ;
  4153. --  T000007 ; -- only a check. it will not work on some hosts.
  4154.   A000049 ; -- write out timing report
  4155. end ;
  4156. ::::::::::
  4157. A000104.ADA
  4158. ::::::::::
  4159. -- This is a procedure that calls the composite benchmarks once
  4160.  
  4161. with A000091 ;
  4162. --with A000092 ; -- provide local math routines & fix up A000092.ADA
  4163. with A000093 ;
  4164. with A000094 ;
  4165.  
  4166. procedure A000104 is
  4167. begin
  4168.  
  4169.   A000091 ;
  4170. --  A000092 ;
  4171.   A000093 ;
  4172.   A000094 ;
  4173.  
  4174. end A000104 ;
  4175. ::::::::::
  4176. A000105.ADA
  4177. ::::::::::
  4178. -- This is a procedure that calls the non I/O, non tasking timing procedures
  4179.  
  4180. with D000001 ;
  4181. with D000002 ;
  4182. with D000003 ;
  4183. with D000004 ;
  4184. with E000001 ;
  4185. with E000002 ;
  4186. with E000004 ;
  4187. with F000001 ;
  4188. with F000002 ;
  4189. with L000001 ;
  4190. with L000002 ;
  4191. with L000003 ;
  4192. with P000001 ;
  4193. with P000002 ;
  4194. with P000003 ;
  4195. with P000004 ;
  4196. with P000005 ;
  4197. with P000006 ;
  4198. with P000007 ;
  4199. with P000010 ;
  4200. with P000011 ;
  4201. with P000012 ;
  4202. with P000013 ;
  4203.  
  4204. procedure A000105 is
  4205. begin
  4206.  
  4207.   D000001 ;
  4208.   D000002 ;
  4209.   D000003 ;
  4210.   D000004 ;
  4211.   E000001 ;
  4212.   E000002 ;
  4213.   E000004 ;
  4214.   F000001 ;
  4215.   F000002 ;
  4216.   L000001 ;
  4217.   L000002 ;
  4218.   L000003 ;
  4219.   P000001 ;
  4220.   P000002 ;
  4221.   P000003 ;
  4222.   P000004 ;
  4223.   P000005 ;
  4224.   P000006 ;
  4225.   P000007 ;
  4226.   P000010 ;
  4227.   P000011 ;
  4228.   P000012 ;
  4229.   P000013 ;
  4230.  
  4231. end A000105 ;
  4232. ::::::::::
  4233. A000106.ADA
  4234. ::::::::::
  4235. -- This is a procedure that calls the I/O timing procedures once
  4236.  
  4237. with G000001 ; 
  4238. with G000002 ;
  4239. with G000003 ;
  4240. with G000004 ;
  4241. with G000005 ;
  4242. with G000006 ;
  4243. with G000007 ;
  4244.  
  4245. procedure A000106 is
  4246. begin
  4247.  
  4248.   G000001 ; 
  4249.   G000002 ;
  4250.   G000003 ;
  4251.   G000004 ;
  4252.   G000005 ;
  4253.   G000006 ;
  4254.   G000007 ;
  4255.  
  4256. end A000106 ;
  4257. ::::::::::
  4258. A000107.ADA
  4259. ::::::::::
  4260. -- This is a procedure that calls the tasking related timing procedures
  4261.  
  4262. with C000001 ;
  4263. with C000002 ;
  4264. with C000003 ;
  4265. with T000001 ;
  4266. with T000002 ;
  4267. with T000003 ;
  4268. with T000004 ;
  4269. with T000005 ;
  4270. with T000006 ;
  4271. with T000007 ;
  4272.  
  4273. procedure A000107 is
  4274. begin
  4275.  
  4276.   C000001 ;
  4277.   C000002 ;
  4278.   C000003 ;
  4279.   T000001 ;
  4280.   T000002 ;
  4281.   T000003 ;
  4282.   T000004 ;
  4283.   T000005 ;
  4284.   T000006 ;
  4285.   T000007 ; -- only a check. it will not work on some hosts.
  4286.  
  4287. end A000107 ;
  4288. ::::::::::
  4289. ACOMPILE.CLI
  4290. ::::::::::
  4291.  Data General AOS files to compile ( using disk PIWG_IO )
  4292. ADA A000001
  4293. ADA A000013
  4294. ADA A000021
  4295. ADA A000022
  4296. ADA A000031
  4297. ADA A000032
  4298. ADA A000041
  4299. ADA A000043
  4300. ADA A000049
  4301. ADA/MAIN_PROGRAM A000051
  4302. ADA/MAIN_PROGRAM A000052
  4303. ADA/MAIN_PROGRAM A000053
  4304. ADA/MAIN_PROGRAM A000054
  4305. ADA?MAIN_PROGRAM A000055
  4306. ADA A000091
  4307. ADA A000093
  4308. ADA A000094
  4309. ADA C000001
  4310. ADA C000002
  4311. ADA C000003
  4312. ADA D000001
  4313. ADA D000002
  4314. ADA D000003
  4315. ADA D000004
  4316. ADA E000001
  4317. ADA E000002
  4318. ADA E000004
  4319. ADA F000001
  4320. ADA F000002
  4321. ADA G000001
  4322. ADA G000002
  4323. ADA G000003
  4324. ADA G000004
  4325. ADA G000005
  4326. ADA G000006
  4327. ADA G000007
  4328. ADA L000001
  4329. ADA L000002
  4330. ADA L000003
  4331. ADA P000001
  4332. ADA P000002
  4333. ADA P000003
  4334. ADA P000004
  4335. ADA P000005
  4336. ADA P000006
  4337. ADA P000007
  4338. ADA P000010
  4339. ADA P000011
  4340. ADA P000012
  4341. ADA P000013
  4342. ADA T000001
  4343. ADA T000002
  4344. ADA T000003
  4345. ADA T000004
  4346. ADA T000005
  4347. ADA T000006
  4348. ADALINK A000051
  4349. ADALINK A000052
  4350. ADALINK A000053
  4351. ADALINK A000054
  4352. ADALINK A000055
  4353. ADA/MAIN_PROGRAM A000103
  4354. ADALINK A000103
  4355. XEQ A000103
  4356. ::::::::::
  4357. ACOMPILE.COM
  4358. ::::::::::
  4359. $! RUN THIS FIRST ON VAX VMS ( Feature benchmarks )
  4360. $!
  4361. $! VAX VMS files to compile ( using disk PIWG_IO )
  4362. $ SET VERIFY
  4363. $ SET NOON
  4364. $ SET DEF [.SIGADA.TAPE_8_31_86]
  4365. $ ACS CREA LIB [.ADALIB]
  4366. $ ACS SET LIB  [.ADALIB]
  4367. $ ADA A000001
  4368. $ ADA A000012 ! VAX Ada dependent
  4369. $ ADA A000021
  4370. $ ADA A000022
  4371. $ ADA A000031
  4372. $ ADA A000032
  4373. $ ADA A000041
  4374. $ ADA A000043 ! using disk PIWG_IO
  4375. $ ADA A000049 ! using disk reporting
  4376. $ ADA A000051
  4377. $ ADA A000052
  4378. $ ADA A000053
  4379. $ ADA A000054
  4380. $ ADA A000055
  4381. $ ADA A000091
  4382. $ ADA A000092 ! VAX Ada dependent
  4383. $ ADA A000093
  4384. $ ADA A000094
  4385. $ ADA C000001
  4386. $ ADA C000002
  4387. $ ADA C000003
  4388. $ ADA D000001
  4389. $ ADA D000002
  4390. $ ADA D000003
  4391. $ ADA D000004
  4392. $ ADA E000001
  4393. $ ADA E000002
  4394. $ ADA E000004
  4395. $ ADA F000001
  4396. $ ADA F000002
  4397. $ ADA G000001
  4398. $ ADA G000002
  4399. $ ADA G000003
  4400. $ ADA G000004
  4401. $ ADA G000005
  4402. $ ADA G000006
  4403. $ ADA G000007
  4404. $ ADA L000001
  4405. $ ADA L000002
  4406. $ ADA L000003
  4407. $ ADA P000001
  4408. $ ADA P000002
  4409. $ ADA P000003
  4410. $ ADA P000004
  4411. $ ADA P000005
  4412. $ ADA P000006
  4413. $ ADA P000007
  4414. $ ADA P000010
  4415. $ ADA P000011
  4416. $ ADA P000012
  4417. $ ADA P000013
  4418. $ ADA T000001
  4419. $ ADA T000002
  4420. $ ADA T000003
  4421. $ ADA T000004
  4422. $ ADA T000005
  4423. $ ADA T000006
  4424. $ ADA T000007 ! execution possibly machine dependent
  4425. $ ACS LINK A000051 ! needed by Z tests
  4426. $ ACS LINK A000052
  4427. $ ACS LINK A000053
  4428. $ ACS LINK A000054
  4429. $ ACS LINK A000055
  4430. $ ADA A000103
  4431. $ ACS LINK A000103
  4432. $ RUN A000103 ! all feature tests in one procedure
  4433. ::::::::::
  4434. ACOMPILE.LR1
  4435. ::::::::::
  4436.  
  4437. ----------------------------------------------------------------------------
  4438. !USERS..PIWG % COMPILATION.MAKE                  STARTED 12:25:24 PM
  4439. ----------------------------------------------------------------------------
  4440.  
  4441. 86/09/02 12:25:25 === [Compilation.Promote ("", ALL_PARTS, CODED, SAME_WORLD, 
  4442. 86/09/02 12:25:26 ... FALSE, PERSEVERE);].
  4443. 86/09/02 12:25:33 !!! !USERS..PIWG.A000100'BODY has no default visible 
  4444. 86/09/02 12:25:33 ... part.
  4445. 86/09/02 12:25:38 +++ !USERS..PIWG.GLOBAL_DEF has been INSTALLED.
  4446. 86/09/02 12:25:40 +++ !USERS..PIWG.PACK_1 has been INSTALLED.
  4447. 86/09/02 12:25:42 +++ !USERS..PIWG.A000091'BODY has been INSTALLED.
  4448. 86/09/02 12:25:45 +++ !USERS..PIWG.CPU_TIME_CLOCK'BODY has been 
  4449. 86/09/02 12:25:45 ... INSTALLED.
  4450. 86/09/02 12:27:19 +++ !USERS..PIWG.A000093'BODY has been INSTALLED.
  4451. 86/09/02 12:27:21 +++ !USERS..PIWG.REMOTE_GLOBAL has been INSTALLED.
  4452. 86/09/02 12:27:21 +++ !USERS..PIWG.CREATE_PACK_1 has been INSTALLED.
  4453. 86/09/02 12:27:23 +++ !USERS..PIWG.ITERATION has been INSTALLED.
  4454. 86/09/02 12:27:26 +++ !USERS..PIWG.PIWG_IO has been INSTALLED.
  4455. 86/09/02 12:27:33 +++ !USERS..PIWG.C000001'BODY has been INSTALLED.
  4456. 86/09/02 12:27:34 +++ !USERS..PIWG.CREATE_PACK_2 has been INSTALLED.
  4457. 86/09/02 12:27:40 +++ !USERS..PIWG.C000002'BODY has been INSTALLED.
  4458. 86/09/02 12:27:46 +++ !USERS..PIWG.C000003'BODY has been INSTALLED.
  4459. 86/09/02 12:27:48 +++ !USERS..PIWG.DYNAMIC_ARRAY_PACKAGE_1 has been 
  4460. 86/09/02 12:27:48 ... INSTALLED.
  4461. 86/09/02 12:27:54 +++ !USERS..PIWG.D000001'BODY has been INSTALLED.
  4462. 86/09/02 12:27:56 +++ !USERS..PIWG.DYNAMIC_ARRAY_PACKAGE_2 has been 
  4463. 86/09/02 12:27:56 ... INSTALLED.
  4464. 86/09/02 12:28:01 +++ !USERS..PIWG.D000002'BODY has been INSTALLED.
  4465. 86/09/02 12:28:03 +++ !USERS..PIWG.DYNAMIC_ARRAY_PACKAGE_3 has been 
  4466. 86/09/02 12:28:03 ... INSTALLED.
  4467. 86/09/02 12:28:11 +++ !USERS..PIWG.D000003'BODY has been INSTALLED.
  4468. 86/09/02 12:28:12 +++ !USERS..PIWG.DYNAMIC_ARRAY_PACKAGE_4 has been 
  4469. 86/09/02 12:28:13 ... INSTALLED.
  4470. 86/09/02 12:28:19 +++ !USERS..PIWG.D000004'BODY has been INSTALLED.
  4471. 86/09/02 12:28:27 +++ !USERS..PIWG.E000001'BODY has been INSTALLED.
  4472. 86/09/02 12:28:28 +++ !USERS..PIWG.EXCEPT_PACK_2 has been INSTALLED.
  4473. 86/09/02 12:28:35 +++ !USERS..PIWG.E000002'BODY has been INSTALLED.
  4474. 86/09/02 12:28:36 +++ !USERS..PIWG.EXCEPT_PACK_4 has been INSTALLED.
  4475. 86/09/02 12:28:43 +++ !USERS..PIWG.E000004'BODY has been INSTALLED.
  4476. 86/09/02 12:28:51 +++ !USERS..PIWG.F000001'BODY has been INSTALLED.
  4477. 86/09/02 12:28:59 +++ !USERS..PIWG.F000002'BODY has been INSTALLED.
  4478. 86/09/02 12:29:09 +++ !USERS..PIWG.G000001'BODY has been INSTALLED.
  4479. 86/09/02 12:29:18 +++ !USERS..PIWG.G000002'BODY has been INSTALLED.
  4480. 86/09/02 12:29:26 +++ !USERS..PIWG.G000003'BODY has been INSTALLED.
  4481. 86/09/02 12:29:34 +++ !USERS..PIWG.G000004'BODY has been INSTALLED.
  4482. 86/09/02 12:29:43 +++ !USERS..PIWG.G000005'BODY has been INSTALLED.
  4483. 86/09/02 12:29:52 +++ !USERS..PIWG.G000006'BODY has been INSTALLED.
  4484. 86/09/02 12:29:59 +++ !USERS..PIWG.G000007'BODY has been INSTALLED.
  4485. 86/09/02 12:30:05 +++ !USERS..PIWG.P000001'BODY has been INSTALLED.
  4486. 86/09/02 12:30:11 +++ !USERS..PIWG.P000002'BODY has been INSTALLED.
  4487. 86/09/02 12:30:12 +++ !USERS..PIWG.PROC_PACKAGE_3 has been INSTALLED.
  4488. 86/09/02 12:30:18 +++ !USERS..PIWG.P000003'BODY has been INSTALLED.
  4489. 86/09/02 12:30:19 +++ !USERS..PIWG.PROC_PACKAGE_4 has been INSTALLED.
  4490. 86/09/02 12:30:24 +++ !USERS..PIWG.P000004'BODY has been INSTALLED.
  4491. 86/09/02 12:30:25 +++ !USERS..PIWG.PROC_PACKAGE_5 has been INSTALLED.
  4492. 86/09/02 12:30:31 +++ !USERS..PIWG.P000005'BODY has been INSTALLED.
  4493. 86/09/02 12:30:31 +++ !USERS..PIWG.PROC_PACKAGE_6 has been INSTALLED.
  4494. 86/09/02 12:30:38 +++ !USERS..PIWG.P000006'BODY has been INSTALLED.
  4495. 86/09/02 12:30:39 +++ !USERS..PIWG.PROC_PACKAGE_7 has been INSTALLED.
  4496. 86/09/02 12:30:45 +++ !USERS..PIWG.P000007'BODY has been INSTALLED.
  4497. 86/09/02 12:30:46 +++ !USERS..PIWG.PROC_PACKAGE_10 has been INSTALLED.
  4498. 86/09/02 12:30:55 +++ !USERS..PIWG.P000010'BODY has been INSTALLED.
  4499. 86/09/02 12:30:56 +++ !USERS..PIWG.PROC_PACKAGE_11 has been INSTALLED.
  4500. 86/09/02 12:31:09 +++ !USERS..PIWG.P000011'BODY has been INSTALLED.
  4501. 86/09/02 12:31:11 +++ !USERS..PIWG.PROC_PACKAGE_12 has been INSTALLED.
  4502. 86/09/02 12:31:19 +++ !USERS..PIWG.P000012'BODY has been INSTALLED.
  4503. 86/09/02 12:31:20 +++ !USERS..PIWG.PROC_PACKAGE_13 has been INSTALLED.
  4504. 86/09/02 12:31:30 +++ !USERS..PIWG.P000013'BODY has been INSTALLED.
  4505. 86/09/02 12:31:36 +++ !USERS..PIWG.T000001'BODY has been INSTALLED.
  4506. 86/09/02 12:31:37 +++ !USERS..PIWG.TASK_PACK_2 has been INSTALLED.
  4507. 86/09/02 12:31:43 +++ !USERS..PIWG.T000002'BODY has been INSTALLED.
  4508. 86/09/02 12:31:44 +++ !USERS..PIWG.TASK_PACK_3 has been INSTALLED.
  4509. 86/09/02 12:31:53 +++ !USERS..PIWG.T000003'BODY has been INSTALLED.
  4510. 86/09/02 12:31:55 +++ !USERS..PIWG.TASK_PACK_4 has been INSTALLED.
  4511. 86/09/02 12:32:04 +++ !USERS..PIWG.T000004'BODY has been INSTALLED.
  4512. 86/09/02 12:32:06 +++ !USERS..PIWG.TASK_PACK_5 has been INSTALLED.
  4513. 86/09/02 12:32:14 +++ !USERS..PIWG.T000005'BODY has been INSTALLED.
  4514. 86/09/02 12:32:16 +++ !USERS..PIWG.TASK_PACK_6 has been INSTALLED.
  4515. 86/09/02 12:32:23 +++ !USERS..PIWG.T000006'BODY has been INSTALLED.
  4516. 86/09/02 12:32:33 +++ !USERS..PIWG.A000100'BODY has been INSTALLED.
  4517. 86/09/02 12:32:36 +++ !USERS..PIWG.PACK_2 has been INSTALLED.
  4518. 86/09/02 12:32:36 === !USERS..PIWG.CPU_TIME_CLOCK is already INSTALLED.
  4519. 86/09/02 12:32:40 +++ !USERS..PIWG.DURATION_IO has been INSTALLED.
  4520. 86/09/02 12:32:58 +++ !USERS..PIWG.PACK_1'BODY has been INSTALLED.
  4521. 86/09/02 12:33:02 +++ !USERS..PIWG.REMOTE_GLOBAL'BODY has been 
  4522. 86/09/02 12:33:02 ... INSTALLED.
  4523. 86/09/02 12:33:03 +++ !USERS..PIWG.CREATE_PACK_1'BODY has been 
  4524. 86/09/02 12:33:03 ... INSTALLED.
  4525. 86/09/02 12:33:14 +++ !USERS..PIWG.ITERATION'BODY has been INSTALLED.
  4526. 86/09/02 12:33:17 +++ !USERS..PIWG.PIWG_IO'BODY has been INSTALLED.
  4527. 86/09/02 12:33:18 +++ !USERS..PIWG.CREATE_PACK_2'BODY has been 
  4528. 86/09/02 12:33:20 ... INSTALLED.
  4529. 86/09/02 12:33:22 +++ !USERS..PIWG.DYNAMIC_ARRAY_PACKAGE_1'BODY has 
  4530. 86/09/02 12:33:23 ... been INSTALLED.
  4531. 86/09/02 12:33:24 +++ !USERS..PIWG.DYNAMIC_ARRAY_PACKAGE_2'BODY has 
  4532. 86/09/02 12:33:25 ... been INSTALLED.
  4533. 86/09/02 12:33:27 +++ !USERS..PIWG.DYNAMIC_ARRAY_PACKAGE_3'BODY has 
  4534. 86/09/02 12:33:27 ... been INSTALLED.
  4535. 86/09/02 12:33:29 +++ !USERS..PIWG.DYNAMIC_ARRAY_PACKAGE_4'BODY has 
  4536. 86/09/02 12:33:29 ... been INSTALLED.
  4537. 86/09/02 12:33:30 +++ !USERS..PIWG.EXCEPT_PACK_2'BODY has been 
  4538. 86/09/02 12:33:30 ... INSTALLED.
  4539. 86/09/02 12:33:32 +++ !USERS..PIWG.EXCEPT_PACK_4'BODY has been 
  4540. 86/09/02 12:33:32 ... INSTALLED.
  4541. 86/09/02 12:33:33 +++ !USERS..PIWG.PROC_PACKAGE_3'BODY has been 
  4542. 86/09/02 12:33:33 ... INSTALLED.
  4543. 86/09/02 12:33:34 +++ !USERS..PIWG.PROC_PACKAGE_4'BODY has been 
  4544. 86/09/02 12:33:34 ... INSTALLED.
  4545. 86/09/02 12:33:36 +++ !USERS..PIWG.PROC_PACKAGE_5'BODY has been 
  4546. 86/09/02 12:33:36 ... INSTALLED.
  4547. 86/09/02 12:33:37 +++ !USERS..PIWG.PROC_PACKAGE_6'BODY has been 
  4548. 86/09/02 12:33:37 ... INSTALLED.
  4549. 86/09/02 12:33:38 +++ !USERS..PIWG.PROC_PACKAGE_7'BODY has been 
  4550. 86/09/02 12:33:38 ... INSTALLED.
  4551. 86/09/02 12:33:41 +++ !USERS..PIWG.PROC_PACKAGE_10'BODY has been 
  4552. 86/09/02 12:33:41 ... INSTALLED.
  4553. 86/09/02 12:33:44 +++ !USERS..PIWG.PROC_PACKAGE_11'BODY has been 
  4554. 86/09/02 12:33:44 ... INSTALLED.
  4555. 86/09/02 12:33:46 +++ !USERS..PIWG.PROC_PACKAGE_12'BODY has been 
  4556. 86/09/02 12:33:46 ... INSTALLED.
  4557. 86/09/02 12:33:51 +++ !USERS..PIWG.PROC_PACKAGE_13'BODY has been 
  4558. 86/09/02 12:33:51 ... INSTALLED.
  4559. 86/09/02 12:33:52 +++ !USERS..PIWG.TASK_PACK_2'BODY has been INSTALLED.
  4560. 86/09/02 12:33:54 +++ !USERS..PIWG.TASK_PACK_3'BODY has been INSTALLED.
  4561. 86/09/02 12:33:55 +++ !USERS..PIWG.TASK_PACK_4'BODY has been INSTALLED.
  4562. 86/09/02 12:33:59 +++ !USERS..PIWG.TASK_PACK_5'BODY has been INSTALLED.
  4563. 86/09/02 12:34:02 +++ !USERS..PIWG.TASK_PACK_6'BODY has been INSTALLED.
  4564. 86/09/02 12:34:12 +++ !USERS..PIWG.PACK_2'BODY has been INSTALLED.
  4565. 86/09/02 12:34:15 --- Messages generated while promoting !USERS..PIWG.
  4566. 86/09/02 12:34:15 ... GLOBAL_DEF to CODED.
  4567. 86/09/02 12:34:16 ---     129  instructions for package GLOBAL_DEF.
  4568. 86/09/02 12:34:16 ---     238  instructions for segment 46343.
  4569. 86/09/02 12:34:16 +++ !USERS..PIWG.GLOBAL_DEF has been CODED.
  4570. 86/09/02 12:34:16 +++ !USERS..PIWG.PACK_1 has been CODED.
  4571. 86/09/02 12:34:17 --- Messages generated while promoting !USERS..PIWG.
  4572. 86/09/02 12:34:17 ... A000091'BODY to CODED.
  4573. 86/09/02 12:34:17 ---      10  instructions for subprog A000091.
  4574. 86/09/02 12:34:18 ---      48  instructions for segment 47367.
  4575. 86/09/02 12:34:19 +++ !USERS..PIWG.A000091'BODY has been CODED.
  4576. 86/09/02 12:34:25 --- Messages generated while promoting !USERS..PIWG.
  4577. 86/09/02 12:34:27 ... CPU_TIME_CLOCK'BODY to CODED.
  4578. 86/09/02 12:34:27 ---      12  instructions for subprog CPU_TIME_CLOCK.
  4579. 86/09/02 12:34:27 ---      48  instructions for segment 48391.
  4580. 86/09/02 12:34:27 +++ !USERS..PIWG.CPU_TIME_CLOCK'BODY has been CODED.
  4581. 86/09/02 12:35:39 --- Messages generated while promoting !USERS..PIWG.
  4582. 86/09/02 12:35:40 ... A000093'BODY to CODED.
  4583. 86/09/02 12:35:40 ---    1329  instructions for subprog A000093.
  4584. 86/09/02 12:35:40 ---    2392  instructions for segment 49415.
  4585. 86/09/02 12:35:40 +++ !USERS..PIWG.A000093'BODY has been CODED.
  4586. 86/09/02 12:35:41 +++ !USERS..PIWG.REMOTE_GLOBAL has been CODED.
  4587. 86/09/02 12:35:42 +++ !USERS..PIWG.CREATE_PACK_1 has been CODED.
  4588. 86/09/02 12:35:42 +++ !USERS..PIWG.ITERATION has been CODED.
  4589. 86/09/02 12:35:43 +++ !USERS..PIWG.PIWG_IO has been CODED.
  4590. 86/09/02 12:35:46 --- Messages generated while promoting !USERS..PIWG.
  4591. 86/09/02 12:35:46 ... C000001'BODY to CODED.
  4592. 86/09/02 12:35:46 ---      94  instructions for subprog C000001.
  4593. 86/09/02 12:35:46 ---     257  instructions for segment 50439.
  4594. 86/09/02 12:35:47 +++ !USERS..PIWG.C000001'BODY has been CODED.
  4595. 86/09/02 12:35:49 +++ !USERS..PIWG.CREATE_PACK_2 has been CODED.
  4596. 86/09/02 12:35:59 --- Messages generated while promoting !USERS..PIWG.
  4597. 86/09/02 12:35:59 ... C000002'BODY to CODED.
  4598. 86/09/02 12:35:59 ---      94  instructions for subprog C000002.
  4599. 86/09/02 12:35:59 ---     257  instructions for segment 51463.
  4600. 86/09/02 12:35:59 +++ !USERS..PIWG.C000002'BODY has been CODED.
  4601. 86/09/02 12:36:02 --- Messages generated while promoting !USERS..PIWG.
  4602. 86/09/02 12:36:02 ... C000003'BODY to CODED.
  4603. 86/09/02 12:36:02 ---      14  instructions for task    T1.
  4604. 86/09/02 12:36:02 ---     106  instructions for subprog C000003.
  4605. 86/09/02 12:36:02 ---     310  instructions for segment 52487.
  4606. 86/09/02 12:36:02 +++ !USERS..PIWG.C000003'BODY has been CODED.
  4607. 86/09/02 12:36:03 +++ !USERS..PIWG.DYNAMIC_ARRAY_PACKAGE_1 has been 
  4608. 86/09/02 12:36:03 ... CODED.
  4609. 86/09/02 12:36:06 --- Messages generated while promoting !USERS..PIWG.
  4610. 86/09/02 12:36:06 ... D000001'BODY to CODED.
  4611. 86/09/02 12:36:06 ---      88  instructions for subprog D000001.
  4612. 86/09/02 12:36:06 ---     273  instructions for segment 53511.
  4613. 86/09/02 12:36:06 +++ !USERS..PIWG.D000001'BODY has been CODED.
  4614. 86/09/02 12:36:07 +++ !USERS..PIWG.DYNAMIC_ARRAY_PACKAGE_2 has been 
  4615. 86/09/02 12:36:07 ... CODED.
  4616. 86/09/02 12:36:09 --- Messages generated while promoting !USERS..PIWG.
  4617. 86/09/02 12:36:09 ... D000002'BODY to CODED.
  4618. 86/09/02 12:36:09 ---      88  instructions for subprog D000002.
  4619. 86/09/02 12:36:09 ---     257  instructions for segment 54535.
  4620. 86/09/02 12:36:09 +++ !USERS..PIWG.D000002'BODY has been CODED.
  4621. 86/09/02 12:36:10 +++ !USERS..PIWG.DYNAMIC_ARRAY_PACKAGE_3 has been 
  4622. 86/09/02 12:36:10 ... CODED.
  4623. 86/09/02 12:36:12 --- Messages generated while promoting !USERS..PIWG.
  4624. 86/09/02 12:36:12 ... D000003'BODY to CODED.
  4625. 86/09/02 12:36:12 ---      88  instructions for subprog D000003.
  4626. 86/09/02 12:36:12 ---     257  instructions for segment 55559.
  4627. 86/09/02 12:36:12 +++ !USERS..PIWG.D000003'BODY has been CODED.
  4628. 86/09/02 12:36:13 +++ !USERS..PIWG.DYNAMIC_ARRAY_PACKAGE_4 has been 
  4629. 86/09/02 12:36:13 ... CODED.
  4630. 86/09/02 12:36:15 --- Messages generated while promoting !USERS..PIWG.
  4631. 86/09/02 12:36:15 ... D000004'BODY to CODED.
  4632. 86/09/02 12:36:15 ---      88  instructions for subprog D000004.
  4633. 86/09/02 12:36:15 ---     265  instructions for segment 56583.
  4634. 86/09/02 12:36:15 +++ !USERS..PIWG.D000004'BODY has been CODED.
  4635. 86/09/02 12:36:19 --- Messages generated while promoting !USERS..PIWG.
  4636. 86/09/02 12:36:19 ... E000001'BODY to CODED.
  4637. 86/09/02 12:36:19 ---     157  instructions for subprog E000001.
  4638. 86/09/02 12:36:19 ---     331  instructions for segment 57607.
  4639. 86/09/02 12:36:19 +++ !USERS..PIWG.E000001'BODY has been CODED.
  4640. 86/09/02 12:36:20 +++ !USERS..PIWG.EXCEPT_PACK_2 has been CODED.
  4641. 86/09/02 12:36:23 --- Messages generated while promoting !USERS..PIWG.
  4642. 86/09/02 12:36:23 ... E000002'BODY to CODED.
  4643. 86/09/02 12:36:23 ---     131  instructions for subprog E000002.
  4644. 86/09/02 12:36:23 ---     310  instructions for segment 58631.
  4645. 86/09/02 12:36:23 +++ !USERS..PIWG.E000002'BODY has been CODED.
  4646. 86/09/02 12:36:24 +++ !USERS..PIWG.EXCEPT_PACK_4 has been CODED.
  4647. 86/09/02 12:36:27 --- Messages generated while promoting !USERS..PIWG.
  4648. 86/09/02 12:36:27 ... E000004'BODY to CODED.
  4649. 86/09/02 12:36:27 ---     131  instructions for subprog E000004.
  4650. 86/09/02 12:36:27 ---     302  instructions for segment 59655.
  4651. 86/09/02 12:36:27 +++ !USERS..PIWG.E000004'BODY has been CODED.
  4652. 86/09/02 12:36:30 --- Messages generated while promoting !USERS..PIWG.
  4653. 86/09/02 12:36:30 ... F000001'BODY to CODED.
  4654. 86/09/02 12:36:30 ---     134  instructions for subprog F000001.
  4655. 86/09/02 12:36:30 ---     303  instructions for segment 60679.
  4656. 86/09/02 12:36:30 +++ !USERS..PIWG.F000001'BODY has been CODED.
  4657. 86/09/02 12:36:33 --- Messages generated while promoting !USERS..PIWG.
  4658. 86/09/02 12:36:33 ... F000002'BODY to CODED.
  4659. 86/09/02 12:36:34 ---     139  instructions for subprog F000002.
  4660. 86/09/02 12:36:34 ---     305  instructions for segment 61703.
  4661. 86/09/02 12:36:34 +++ !USERS..PIWG.F000002'BODY has been CODED.
  4662. 86/09/02 12:36:38 --- Messages generated while promoting !USERS..PIWG.
  4663. 86/09/02 12:36:38 ... G000001'BODY to CODED.
  4664. 86/09/02 12:36:38 ---     159  instructions for subprog G000001.
  4665. 86/09/02 12:36:38 ---     342  instructions for segment 62727.
  4666. 86/09/02 12:36:38 +++ !USERS..PIWG.G000001'BODY has been CODED.
  4667. 86/09/02 12:36:48 --- Messages generated while promoting !USERS..PIWG.
  4668. 86/09/02 12:36:48 ... G000002'BODY to CODED.
  4669. 86/09/02 12:36:49 ---     173  instructions for subprog G000002.
  4670. 86/09/02 12:36:49 ---     387  instructions for segment 63751.
  4671. 86/09/02 12:36:49 +++ !USERS..PIWG.G000002'BODY has been CODED.
  4672. 86/09/02 12:36:52 --- Messages generated while promoting !USERS..PIWG.
  4673. 86/09/02 12:36:52 ... G000003'BODY to CODED.
  4674. 86/09/02 12:36:52 ---     138  instructions for subprog G000003.
  4675. 86/09/02 12:36:52 ---     306  instructions for segment 64775.
  4676. 86/09/02 12:36:52 +++ !USERS..PIWG.G000003'BODY has been CODED.
  4677. 86/09/02 12:36:55 --- Messages generated while promoting !USERS..PIWG.
  4678. 86/09/02 12:36:55 ... G000004'BODY to CODED.
  4679. 86/09/02 12:36:55 ---     154  instructions for subprog G000004.
  4680. 86/09/02 12:36:55 ---     351  instructions for segment 65799.
  4681. 86/09/02 12:36:55 +++ !USERS..PIWG.G000004'BODY has been CODED.
  4682. 86/09/02 12:37:01 --- Messages generated while promoting !USERS..PIWG.
  4683. 86/09/02 12:37:01 ... G000005'BODY to CODED.
  4684. 86/09/02 12:37:01 ---     140  instructions for subprog G000005.
  4685. 86/09/02 12:37:01 ---     329  instructions for segment 66823.
  4686. 86/09/02 12:37:01 +++ !USERS..PIWG.G000005'BODY has been CODED.
  4687. 86/09/02 12:37:07 --- Messages generated while promoting !USERS..PIWG.
  4688. 86/09/02 12:37:07 ... G000006'BODY to CODED.
  4689. 86/09/02 12:37:07 ---     158  instructions for subprog G000006.
  4690. 86/09/02 12:37:07 ---     371  instructions for segment 67847.
  4691. 86/09/02 12:37:08 +++ !USERS..PIWG.G000006'BODY has been CODED.
  4692. 86/09/02 12:37:11 --- Messages generated while promoting !USERS..PIWG.
  4693. 86/09/02 12:37:11 ... G000007'BODY to CODED.
  4694. 86/09/02 12:37:12 ---     135  instructions for subprog G000007.
  4695. 86/09/02 12:37:12 ---     320  instructions for segment 68871.
  4696. 86/09/02 12:37:12 +++ !USERS..PIWG.G000007'BODY has been CODED.
  4697. 86/09/02 12:37:15 --- Messages generated while promoting !USERS..PIWG.
  4698. 86/09/02 12:37:15 ... P000001'BODY to CODED.
  4699. 86/09/02 12:37:15 ---     107  instructions for subprog P000001.
  4700. 86/09/02 12:37:15 ---     266  instructions for segment 69895.
  4701. 86/09/02 12:37:15 +++ !USERS..PIWG.P000001'BODY has been CODED.
  4702. 86/09/02 12:37:18 --- Messages generated while promoting !USERS..PIWG.
  4703. 86/09/02 12:37:18 ... P000002'BODY to CODED.
  4704. 86/09/02 12:37:18 ---     112  instructions for subprog P000002.
  4705. 86/09/02 12:37:18 ---     267  instructions for segment 70919.
  4706. 86/09/02 12:37:19 +++ !USERS..PIWG.P000002'BODY has been CODED.
  4707. 86/09/02 12:37:21 +++ !USERS..PIWG.PROC_PACKAGE_3 has been CODED.
  4708. 86/09/02 12:37:25 --- Messages generated while promoting !USERS..PIWG.
  4709. 86/09/02 12:37:25 ... P000003'BODY to CODED.
  4710. 86/09/02 12:37:25 ---      94  instructions for subprog P000003.
  4711. 86/09/02 12:37:25 ---     257  instructions for segment 71943.
  4712. 86/09/02 12:37:25 +++ !USERS..PIWG.P000003'BODY has been CODED.
  4713. 86/09/02 12:37:26 +++ !USERS..PIWG.PROC_PACKAGE_4 has been CODED.
  4714. 86/09/02 12:37:29 --- Messages generated while promoting !USERS..PIWG.
  4715. 86/09/02 12:37:29 ... P000004'BODY to CODED.
  4716. 86/09/02 12:37:29 ---      94  instructions for subprog P000004.
  4717. 86/09/02 12:37:29 ---     257  instructions for segment 72967.
  4718. 86/09/02 12:37:29 +++ !USERS..PIWG.P000004'BODY has been CODED.
  4719. 86/09/02 12:37:30 +++ !USERS..PIWG.PROC_PACKAGE_5 has been CODED.
  4720. 86/09/02 12:37:32 --- Messages generated while promoting !USERS..PIWG.
  4721. 86/09/02 12:37:33 ... P000005'BODY to CODED.
  4722. 86/09/02 12:37:33 ---      96  instructions for subprog P000005.
  4723. 86/09/02 12:37:33 ---     257  instructions for segment 73991.
  4724. 86/09/02 12:37:34 +++ !USERS..PIWG.P000005'BODY has been CODED.
  4725. 86/09/02 12:37:38 +++ !USERS..PIWG.PROC_PACKAGE_6 has been CODED.
  4726. 86/09/02 12:37:44 --- Messages generated while promoting !USERS..PIWG.
  4727. 86/09/02 12:37:44 ... P000006'BODY to CODED.
  4728. 86/09/02 12:37:44 ---     107  instructions for subprog P000006.
  4729. 86/09/02 12:37:44 ---     276  instructions for segment 75015.
  4730. 86/09/02 12:37:44 +++ !USERS..PIWG.P000006'BODY has been CODED.
  4731. 86/09/02 12:37:45 +++ !USERS..PIWG.PROC_PACKAGE_7 has been CODED.
  4732. 86/09/02 12:37:49 --- Messages generated while promoting !USERS..PIWG.
  4733. 86/09/02 12:37:49 ... P000007'BODY to CODED.
  4734. 86/09/02 12:37:49 ---      99  instructions for subprog P000007.
  4735. 86/09/02 12:37:49 ---     266  instructions for segment 76039.
  4736. 86/09/02 12:37:49 +++ !USERS..PIWG.P000007'BODY has been CODED.
  4737. 86/09/02 12:37:50 +++ !USERS..PIWG.PROC_PACKAGE_10 has been CODED.
  4738. 86/09/02 12:37:54 --- Messages generated while promoting !USERS..PIWG.
  4739. 86/09/02 12:37:54 ... P000010'BODY to CODED.
  4740. 86/09/02 12:37:54 ---     205  instructions for subprog P000010.
  4741. 86/09/02 12:37:54 ---     355  instructions for segment 77063.
  4742. 86/09/02 12:37:54 +++ !USERS..PIWG.P000010'BODY has been CODED.
  4743. 86/09/02 12:37:55 +++ !USERS..PIWG.PROC_PACKAGE_11 has been CODED.
  4744. 86/09/02 12:38:04 --- Messages generated while promoting !USERS..PIWG.
  4745. 86/09/02 12:38:04 ... P000011'BODY to CODED.
  4746. 86/09/02 12:38:04 ---     330  instructions for subprog P000011.
  4747. 86/09/02 12:38:04 ---     477  instructions for segment 78087.
  4748. 86/09/02 12:38:04 +++ !USERS..PIWG.P000011'BODY has been CODED.
  4749. 86/09/02 12:38:07 +++ !USERS..PIWG.PROC_PACKAGE_12 has been CODED.
  4750. 86/09/02 12:38:10 --- Messages generated while promoting !USERS..PIWG.
  4751. 86/09/02 12:38:10 ... P000012'BODY to CODED.
  4752. 86/09/02 12:38:10 ---     165  instructions for subprog P000012.
  4753. 86/09/02 12:38:11 ---     314  instructions for segment 79111.
  4754. 86/09/02 12:38:11 +++ !USERS..PIWG.P000012'BODY has been CODED.
  4755. 86/09/02 12:38:11 +++ !USERS..PIWG.PROC_PACKAGE_13 has been CODED.
  4756. 86/09/02 12:38:21 --- Messages generated while promoting !USERS..PIWG.
  4757. 86/09/02 12:38:21 ... P000013'BODY to CODED.
  4758. 86/09/02 12:38:21 ---     220  instructions for subprog P000013.
  4759. 86/09/02 12:38:21 ---     370  instructions for segment 80135.
  4760. 86/09/02 12:38:21 +++ !USERS..PIWG.P000013'BODY has been CODED.
  4761. 86/09/02 12:38:28 --- Messages generated while promoting !USERS..PIWG.
  4762. 86/09/02 12:38:28 ... T000001'BODY to CODED.
  4763. 86/09/02 12:38:28 ---      24  instructions for task    T1.
  4764. 86/09/02 12:38:28 ---     107  instructions for subprog T000001.
  4765. 86/09/02 12:38:28 ---     296  instructions for segment 81159.
  4766. 86/09/02 12:38:28 +++ !USERS..PIWG.T000001'BODY has been CODED.
  4767. 86/09/02 12:38:29 +++ !USERS..PIWG.TASK_PACK_2 has been CODED.
  4768. 86/09/02 12:38:32 --- Messages generated while promoting !USERS..PIWG.
  4769. 86/09/02 12:38:32 ... T000002'BODY to CODED.
  4770. 86/09/02 12:38:32 ---      99  instructions for subprog T000002.
  4771. 86/09/02 12:38:32 ---     250  instructions for segment 82183.
  4772. 86/09/02 12:38:32 +++ !USERS..PIWG.T000002'BODY has been CODED.
  4773. 86/09/02 12:38:33 +++ !USERS..PIWG.TASK_PACK_3 has been CODED.
  4774. 86/09/02 12:38:36 --- Messages generated while promoting !USERS..PIWG.
  4775. 86/09/02 12:38:36 ... T000003'BODY to CODED.
  4776. 86/09/02 12:38:36 ---     121  instructions for subprog T000003.
  4777. 86/09/02 12:38:36 ---     280  instructions for segment 83207.
  4778. 86/09/02 12:38:36 +++ !USERS..PIWG.T000003'BODY has been CODED.
  4779. 86/09/02 12:38:37 +++ !USERS..PIWG.TASK_PACK_4 has been CODED.
  4780. 86/09/02 12:38:40 --- Messages generated while promoting !USERS..PIWG.
  4781. 86/09/02 12:38:40 ... T000004'BODY to CODED.
  4782. 86/09/02 12:38:40 ---     118  instructions for subprog T000004.
  4783. 86/09/02 12:38:40 ---     279  instructions for segment 84231.
  4784. 86/09/02 12:38:40 +++ !USERS..PIWG.T000004'BODY has been CODED.
  4785. 86/09/02 12:38:41 +++ !USERS..PIWG.TASK_PACK_5 has been CODED.
  4786. 86/09/02 12:38:44 --- Messages generated while promoting !USERS..PIWG.
  4787. 86/09/02 12:38:44 ... T000005'BODY to CODED.
  4788. 86/09/02 12:38:44 ---     162  instructions for subprog T000005.
  4789. 86/09/02 12:38:44 ---     341  instructions for segment 85255.
  4790. 86/09/02 12:38:44 +++ !USERS..PIWG.T000005'BODY has been CODED.
  4791. 86/09/02 12:38:45 +++ !USERS..PIWG.TASK_PACK_6 has been CODED.
  4792. 86/09/02 12:38:48 --- Messages generated while promoting !USERS..PIWG.
  4793. 86/09/02 12:38:48 ... T000006'BODY to CODED.
  4794. 86/09/02 12:38:48 ---     135  instructions for subprog T000006.
  4795. 86/09/02 12:38:48 ---     292  instructions for segment 86279.
  4796. 86/09/02 12:38:48 +++ !USERS..PIWG.T000006'BODY has been CODED.
  4797. 86/09/02 12:38:51 --- Messages generated while promoting !USERS..PIWG.
  4798. 86/09/02 12:38:51 ... A000100'BODY to CODED.
  4799. 86/09/02 12:38:51 ---      46  instructions for subprog A000100.
  4800. 86/09/02 12:38:51 ---     125  instructions for segment 87303.
  4801. 86/09/02 12:38:51 +++ !USERS..PIWG.A000100'BODY has been CODED.
  4802. 86/09/02 12:38:52 +++ !USERS..PIWG.PACK_2 has been CODED.
  4803. 86/09/02 12:38:52 === !USERS..PIWG.CPU_TIME_CLOCK is already CODED.
  4804. 86/09/02 12:38:53 --- Messages generated while promoting !USERS..PIWG.
  4805. 86/09/02 12:38:54 ... DURATION_IO to CODED.
  4806. 86/09/02 12:38:54 ---      11  instructions for package DURATION_IO.
  4807. 86/09/02 12:38:54 ---      41  instructions for segment 88327.
  4808. 86/09/02 12:38:54 +++ !USERS..PIWG.DURATION_IO has been CODED.
  4809. 86/09/02 12:39:00 --- Messages generated while promoting !USERS..PIWG.
  4810. 86/09/02 12:39:00 ... PACK_1'BODY to CODED.
  4811. 86/09/02 12:39:00 ---     356  instructions for package PACK_1.
  4812. 86/09/02 12:39:00 ---     645  instructions for segment 89351.
  4813. 86/09/02 12:39:00 +++ !USERS..PIWG.PACK_1'BODY has been CODED.
  4814. 86/09/02 12:39:03 --- Messages generated while promoting !USERS..PIWG.
  4815. 86/09/02 12:39:03 ... REMOTE_GLOBAL'BODY to CODED.
  4816. 86/09/02 12:39:03 ---      48  instructions for package REMOTE_GLOBAL.
  4817. 86/09/02 12:39:04 ---     154  instructions for segment 90375.
  4818. 86/09/02 12:39:04 +++ !USERS..PIWG.REMOTE_GLOBAL'BODY has been CODED.
  4819. 86/09/02 12:39:05 --- Messages generated while promoting !USERS..PIWG.
  4820. 86/09/02 12:39:05 ... CREATE_PACK_1'BODY to CODED.
  4821. 86/09/02 12:39:06 ---      14  instructions for task    T1.
  4822. 86/09/02 12:39:06 ---      21  instructions for package CREATE_PACK_1.
  4823. 86/09/02 12:39:06 ---     105  instructions for segment 91399.
  4824. 86/09/02 12:39:06 +++ !USERS..PIWG.CREATE_PACK_1'BODY has been CODED.
  4825. 86/09/02 12:39:20 --- Messages generated while promoting !USERS..PIWG.
  4826. 86/09/02 12:39:20 ... ITERATION'BODY to CODED.
  4827. 86/09/02 12:39:20 ---     245  instructions for package ITERATION.
  4828. 86/09/02 12:39:20 ---     548  instructions for segment 92423.
  4829. 86/09/02 12:39:20 +++ !USERS..PIWG.ITERATION'BODY has been CODED.
  4830. 86/09/02 12:39:22 --- Messages generated while promoting !USERS..PIWG.
  4831. 86/09/02 12:39:22 ... PIWG_IO'BODY to CODED.
  4832. 86/09/02 12:39:22 ---      69  instructions for package PIWG_IO.
  4833. 86/09/02 12:39:22 ---     226  instructions for segment 93447.
  4834. 86/09/02 12:39:22 +++ !USERS..PIWG.PIWG_IO'BODY has been CODED.
  4835. 86/09/02 12:39:24 --- Messages generated while promoting !USERS..PIWG.
  4836. 86/09/02 12:39:24 ... CREATE_PACK_2'BODY to CODED.
  4837. 86/09/02 12:39:24 ---      14  instructions for task    T1.
  4838. 86/09/02 12:39:24 ---      18  instructions for package CREATE_PACK_2.
  4839. 86/09/02 12:39:24 ---     104  instructions for segment 95495.
  4840. 86/09/02 12:39:24 +++ !USERS..PIWG.CREATE_PACK_2'BODY has been CODED.
  4841. 86/09/02 12:39:26 --- Messages generated while promoting !USERS..PIWG.
  4842. 86/09/02 12:39:26 ... DYNAMIC_ARRAY_PACKAGE_1'BODY to CODED.
  4843. 86/09/02 12:39:26 ---      75  instructions for package 
  4844. 86/09/02 12:39:26 ... DYNAMIC_ARRAY_PACKAGE_1.
  4845. 86/09/02 12:39:26 ---     149  instructions for segment 96519.
  4846. 86/09/02 12:39:26 +++ !USERS..PIWG.DYNAMIC_ARRAY_PACKAGE_1'BODY has 
  4847. 86/09/02 12:39:27 ... been CODED.
  4848. 86/09/02 12:39:29 --- Messages generated while promoting !USERS..PIWG.
  4849. 86/09/02 12:39:29 ... DYNAMIC_ARRAY_PACKAGE_2'BODY to CODED.
  4850. 86/09/02 12:39:29 ---     104  instructions for package 
  4851. 86/09/02 12:39:29 ... DYNAMIC_ARRAY_PACKAGE_2.
  4852. 86/09/02 12:39:29 ---     173  instructions for segment 97543.
  4853. 86/09/02 12:39:29 +++ !USERS..PIWG.DYNAMIC_ARRAY_PACKAGE_2'BODY has 
  4854. 86/09/02 12:39:29 ... been CODED.
  4855. 86/09/02 12:39:32 --- Messages generated while promoting !USERS..PIWG.
  4856. 86/09/02 12:39:32 ... DYNAMIC_ARRAY_PACKAGE_3'BODY to CODED.
  4857. 86/09/02 12:39:32 ---     113  instructions for package 
  4858. 86/09/02 12:39:32 ... DYNAMIC_ARRAY_PACKAGE_3.
  4859. 86/09/02 12:39:32 ---     202  instructions for segment 98567.
  4860. 86/09/02 12:39:32 +++ !USERS..PIWG.DYNAMIC_ARRAY_PACKAGE_3'BODY has 
  4861. 86/09/02 12:39:32 ... been CODED.
  4862. 86/09/02 12:39:35 --- Messages generated while promoting !USERS..PIWG.
  4863. 86/09/02 12:39:35 ... DYNAMIC_ARRAY_PACKAGE_4'BODY to CODED.
  4864. 86/09/02 12:39:35 ---     195  instructions for package 
  4865. 86/09/02 12:39:35 ... DYNAMIC_ARRAY_PACKAGE_4.
  4866. 86/09/02 12:39:35 ---     290  instructions for segment 99591.
  4867. 86/09/02 12:39:35 +++ !USERS..PIWG.DYNAMIC_ARRAY_PACKAGE_4'BODY has 
  4868. 86/09/02 12:39:35 ... been CODED.
  4869. 86/09/02 12:39:37 --- Messages generated while promoting !USERS..PIWG.
  4870. 86/09/02 12:39:37 ... EXCEPT_PACK_2'BODY to CODED.
  4871. 86/09/02 12:39:37 ---      40  instructions for package EXCEPT_PACK_2.
  4872. 86/09/02 12:39:37 ---      99  instructions for segment 100615.
  4873. 86/09/02 12:39:37 +++ !USERS..PIWG.EXCEPT_PACK_2'BODY has been CODED.
  4874. 86/09/02 12:39:39 --- Messages generated while promoting !USERS..PIWG.
  4875. 86/09/02 12:39:39 ... EXCEPT_PACK_4'BODY to CODED.
  4876. 86/09/02 12:39:39 ---      46  instructions for package EXCEPT_PACK_4.
  4877. 86/09/02 12:39:39 ---     147  instructions for segment 101639.
  4878. 86/09/02 12:39:39 +++ !USERS..PIWG.EXCEPT_PACK_4'BODY has been CODED.
  4879. 86/09/02 12:39:40 --- Messages generated while promoting !USERS..PIWG.
  4880. 86/09/02 12:39:40 ... PROC_PACKAGE_3'BODY to CODED.
  4881. 86/09/02 12:39:40 ---      19  instructions for package PROC_PACKAGE_3.
  4882. 86/09/02 12:39:41 ---      67  instructions for segment 102663.
  4883. 86/09/02 12:39:41 +++ !USERS..PIWG.PROC_PACKAGE_3'BODY has been CODED.
  4884. 86/09/02 12:39:42 --- Messages generated while promoting !USERS..PIWG.
  4885. 86/09/02 12:39:42 ... PROC_PACKAGE_4'BODY to CODED.
  4886. 86/09/02 12:39:42 ---      19  instructions for package PROC_PACKAGE_4.
  4887. 86/09/02 12:39:42 ---      67  instructions for segment 103687.
  4888. 86/09/02 12:39:42 +++ !USERS..PIWG.PROC_PACKAGE_4'BODY has been CODED.
  4889. 86/09/02 12:39:44 --- Messages generated while promoting !USERS..PIWG.
  4890. 86/09/02 12:39:44 ... PROC_PACKAGE_5'BODY to CODED.
  4891. 86/09/02 12:39:44 ---      18  instructions for package PROC_PACKAGE_5.
  4892. 86/09/02 12:39:44 ---      67  instructions for segment 104711.
  4893. 86/09/02 12:39:44 +++ !USERS..PIWG.PROC_PACKAGE_5'BODY has been CODED.
  4894. 86/09/02 12:39:45 --- Messages generated while promoting !USERS..PIWG.
  4895. 86/09/02 12:39:45 ... PROC_PACKAGE_6'BODY to CODED.
  4896. 86/09/02 12:39:46 ---      13  instructions for package PROC_PACKAGE_6.
  4897. 86/09/02 12:39:46 ---      67  instructions for segment 105735.
  4898. 86/09/02 12:39:46 +++ !USERS..PIWG.PROC_PACKAGE_6'BODY has been CODED.
  4899. 86/09/02 12:39:47 --- Messages generated while promoting !USERS..PIWG.
  4900. 86/09/02 12:39:47 ... PROC_PACKAGE_7'BODY to CODED.
  4901. 86/09/02 12:39:47 ---      17  instructions for package PROC_PACKAGE_7.
  4902. 86/09/02 12:39:47 ---      67  instructions for segment 106759.
  4903. 86/09/02 12:39:47 +++ !USERS..PIWG.PROC_PACKAGE_7'BODY has been CODED.
  4904. 86/09/02 12:39:49 --- Messages generated while promoting !USERS..PIWG.
  4905. 86/09/02 12:39:50 ... PROC_PACKAGE_10'BODY to CODED.
  4906. 86/09/02 12:39:50 ---      44  instructions for package PROC_PACKAGE_10.
  4907. 86/09/02 12:39:50 ---      91  instructions for segment 107783.
  4908. 86/09/02 12:39:50 +++ !USERS..PIWG.PROC_PACKAGE_10'BODY has been CODED.
  4909. 86/09/02 12:39:53 --- Messages generated while promoting !USERS..PIWG.
  4910. 86/09/02 12:39:54 ... PROC_PACKAGE_11'BODY to CODED.
  4911. 86/09/02 12:39:55 ---      79  instructions for package PROC_PACKAGE_11.
  4912. 86/09/02 12:39:55 ---     115  instructions for segment 108807.
  4913. 86/09/02 12:39:56 +++ !USERS..PIWG.PROC_PACKAGE_11'BODY has been CODED.
  4914. 86/09/02 12:40:00 --- Messages generated while promoting !USERS..PIWG.
  4915. 86/09/02 12:40:00 ... PROC_PACKAGE_12'BODY to CODED.
  4916. 86/09/02 12:40:00 ---      60  instructions for package PROC_PACKAGE_12.
  4917. 86/09/02 12:40:01 ---     100  instructions for segment 109831.
  4918. 86/09/02 12:40:01 +++ !USERS..PIWG.PROC_PACKAGE_12'BODY has been CODED.
  4919. 86/09/02 12:40:05 --- Messages generated while promoting !USERS..PIWG.
  4920. 86/09/02 12:40:05 ... PROC_PACKAGE_13'BODY to CODED.
  4921. 86/09/02 12:40:05 ---     105  instructions for package PROC_PACKAGE_13.
  4922. 86/09/02 12:40:05 ---     140  instructions for segment 110855.
  4923. 86/09/02 12:40:05 +++ !USERS..PIWG.PROC_PACKAGE_13'BODY has been CODED.
  4924. 86/09/02 12:40:07 --- Messages generated while promoting !USERS..PIWG.
  4925. 86/09/02 12:40:07 ... TASK_PACK_2'BODY to CODED.
  4926. 86/09/02 12:40:07 ---      24  instructions for task    T1.
  4927. 86/09/02 12:40:07 ---      13  instructions for package TASK_PACK_2.
  4928. 86/09/02 12:40:07 ---     103  instructions for segment 111879.
  4929. 86/09/02 12:40:07 +++ !USERS..PIWG.TASK_PACK_2'BODY has been CODED.
  4930. 86/09/02 12:40:09 --- Messages generated while promoting !USERS..PIWG.
  4931. 86/09/02 12:40:09 ... TASK_PACK_3'BODY to CODED.
  4932. 86/09/02 12:40:09 ---      24  instructions for task    T1.
  4933. 86/09/02 12:40:09 ---      24  instructions for task    T2.
  4934. 86/09/02 12:40:09 ---      22  instructions for package TASK_PACK_3.
  4935. 86/09/02 12:40:09 ---     173  instructions for segment 112903.
  4936. 86/09/02 12:40:09 +++ !USERS..PIWG.TASK_PACK_3'BODY has been CODED.
  4937. 86/09/02 12:40:11 --- Messages generated while promoting !USERS..PIWG.
  4938. 86/09/02 12:40:11 ... TASK_PACK_4'BODY to CODED.
  4939. 86/09/02 12:40:11 ---      44  instructions for task    T1.
  4940. 86/09/02 12:40:11 ---      13  instructions for package TASK_PACK_4.
  4941. 86/09/02 12:40:11 ---     135  instructions for segment 113927.
  4942. 86/09/02 12:40:11 +++ !USERS..PIWG.TASK_PACK_4'BODY has been CODED.
  4943. 86/09/02 12:40:20 --- Messages generated while promoting !USERS..PIWG.
  4944. 86/09/02 12:40:20 ... TASK_PACK_5'BODY to CODED.
  4945. 86/09/02 12:40:20 ---      24  instructions for task    T1.
  4946. 86/09/02 12:40:20 ---      24  instructions for task    T2.
  4947. 86/09/02 12:40:20 ---      24  instructions for task    T3.
  4948. 86/09/02 12:40:20 ---      24  instructions for task    T4.
  4949. 86/09/02 12:40:20 ---      24  instructions for task    T5.
  4950. 86/09/02 12:40:20 ---      24  instructions for task    T6.
  4951. 86/09/02 12:40:20 ---      24  instructions for task    T7.
  4952. 86/09/02 12:40:20 ---      24  instructions for task    T8.
  4953. 86/09/02 12:40:20 ---      24  instructions for task    T9.
  4954. 86/09/02 12:40:20 ---      24  instructions for task    T10.
  4955. 86/09/02 12:40:21 ---      94  instructions for package TASK_PACK_5.
  4956. 86/09/02 12:40:21 ---     717  instructions for segment 114951.
  4957. 86/09/02 12:40:21 +++ !USERS..PIWG.TASK_PACK_5'BODY has been CODED.
  4958. 86/09/02 12:40:23 --- Messages generated while promoting !USERS..PIWG.
  4959. 86/09/02 12:40:23 ... TASK_PACK_6'BODY to CODED.
  4960. 86/09/02 12:40:23 ---     172  instructions for task    T1.
  4961. 86/09/02 12:40:23 ---      13  instructions for package TASK_PACK_6.
  4962. 86/09/02 12:40:23 ---     359  instructions for segment 115975.
  4963. 86/09/02 12:40:24 +++ !USERS..PIWG.TASK_PACK_6'BODY has been CODED.
  4964. 86/09/02 12:40:27 --- Messages generated while promoting !USERS..PIWG.
  4965. 86/09/02 12:40:27 ... PACK_2'BODY to CODED.
  4966. 86/09/02 12:40:27 ---     217  instructions for package PACK_2.
  4967. 86/09/02 12:40:27 ---     400  instructions for segment 116999.
  4968. 86/09/02 12:40:27 +++ !USERS..PIWG.PACK_2'BODY has been CODED.
  4969. 86/09/02 12:40:29 ===  1 unit was already INSTALLED.
  4970. 86/09/02 12:40:29 +++  96 units were INSTALLED.
  4971. 86/09/02 12:40:29 ===  1 unit was already CODED.
  4972. 86/09/02 12:40:29 +++  96 units were CODED.
  4973. 86/09/02 12:40:29 === [End of Compilation.Promote Command].
  4974.  
  4975. ----------------------------------------------------------------------------
  4976. !USERS..PIWG % A000100                           STARTED 12:43:44 PM
  4977. ----------------------------------------------------------------------------
  4978.  
  4979.           0.33490 is time in milliseconds for one Dhrystone
  4980.  
  4981. ADA Whetstone benchmark
  4982.  
  4983. A000093 using standard internal math routines
  4984.  
  4985.  
  4986. Whetstone start time:    11.86 seconds
  4987.  
  4988. Whetstone stop time :    24.43 seconds 
  4989.  
  4990. Elapsed time for  10 cycles :    12.57 seconds
  4991.  
  4992. Whetstone rating :         796 KWIPS
  4993.  
  4994.  
  4995. Whetstone start time:    24.50 seconds
  4996.  
  4997. Whetstone stop time :    49.62 seconds 
  4998.  
  4999. Elapsed time for  20 cycles :    25.12 seconds
  5000.  
  5001. Whetstone rating :         796 KWIPS
  5002.  
  5003.  
  5004. Whetstone start time:    49.73 seconds
  5005.  
  5006. Whetstone stop time :    87.15 seconds 
  5007.  
  5008. Elapsed time for  30 cycles :    37.42 seconds
  5009.  
  5010. Whetstone rating :         802 KWIPS
  5011.  
  5012.  
  5013. Whetstone start time:    87.24 seconds
  5014.  
  5015. Whetstone stop time :   137.90 seconds 
  5016.  
  5017. Elapsed time for  40 cycles :    50.67 seconds
  5018.  
  5019. Whetstone rating :         789 KWIPS
  5020.  
  5021.  
  5022. Whetstone start time:   138.03 seconds
  5023.  
  5024. Whetstone stop time :   200.68 seconds 
  5025.  
  5026. Elapsed time for  50 cycles :    62.65 seconds
  5027.  
  5028. Whetstone rating :         798 KWIPS
  5029.  
  5030.  
  5031. Average time per cycle :  1255.90 milliseconds
  5032.  
  5033.  Average Whetstone rating :         796 KWIPS
  5034.  
  5035.  
  5036.  
  5037. Test Name:   C000001                        Class Name:  Tasking
  5038. CPU Time:     3335.0  microseconds 
  5039. Wall Time:   11413.4  microseconds.         Iteration Count:   4
  5040. Test Description:
  5041.  Task create and terminate measurement 
  5042.  with 1 task 0 entry when task is in a procedure
  5043.  in a package, no select statement, no loop, using a task type 
  5044.  
  5045.  
  5046.  
  5047. Test Name:   C000002                        Class Name:  Tasking
  5048. CPU Time:      841.9  microseconds 
  5049. Wall Time:     319.0  microseconds.         Iteration Count:   16
  5050. Test Description:
  5051.  Task create and terminate time measurement. 
  5052.  with 1 task 0 entry when task is in a procedure,
  5053.  in a package, no select statement, no loop 
  5054.  
  5055.  
  5056.  
  5057. Test Name:   C000003                        Class Name:  Tasking
  5058. CPU Time:      832.5  microseconds 
  5059. Wall Time:     313.6  microseconds.         Iteration Count:   16
  5060. Test Description:
  5061.  Task create and terminate time measurement 
  5062.  Task is in declare block of main procedure 
  5063.  with 1 task 0 entry when task is in the loop
  5064.  
  5065.  
  5066.  
  5067. Test Name:   D000001                        Class Name:  Allocation
  5068. CPU Time:        3.7  microseconds 
  5069. Wall Time:       4.4  microseconds.         Iteration Count:   512
  5070. Test Description:
  5071.  Dynamic array allocation, use and deallocation time measurement 
  5072.  Dynamic array elaboration , 1000 integers in a procedure
  5073.  get space and free it in the procedure on each call
  5074.  
  5075.  
  5076.  
  5077. Test Name:   D000002                        Class Name:  Allocation
  5078. CPU Time:     3852.5  microseconds 
  5079. Wall Time:    4266.9  microseconds.         Iteration Count:   4
  5080. Test Description:
  5081.  Dynamic array elaboration and initialization time measurement 
  5082.  allocation, initialization, use and deallocation 
  5083.  1000 integers initialized by  others=>1 
  5084.  
  5085.  
  5086.  
  5087. Test Name:   D000003                        Class Name:  Allocation
  5088. CPU Time:       32.4  microseconds 
  5089. Wall Time:      36.0  microseconds.         Iteration Count:   256
  5090. Test Description:
  5091.  Dynamic record allocation and deallocation time measurement 
  5092.  elaborating, allocating and deallocating 
  5093.  record containing a dynamic array of 1000 integers 
  5094.  
  5095.  
  5096.  
  5097. Test Name:   D000004                        Class Name:  Allocation
  5098. CPU Time:     4012.5  microseconds 
  5099. Wall Time:    4616.9  microseconds.         Iteration Count:   4
  5100. Test Description:
  5101.  Dynamic record allocation and deallocation time measurement 
  5102.  elaborating, initializing by ( DYNAMIC_SIZE,(others=>1)) 
  5103.  record containing a dynamic array of 1000 integers 
  5104.  
  5105.  
  5106.  
  5107. Test Name:   E000001                        Class Name:  Exception
  5108. CPU Time:       10.7  microseconds 
  5109. Wall Time:       7.4  microseconds.         Iteration Count:   512
  5110. Test Description:
  5111.  Time to raise and handle an exception 
  5112.  Exception defined locally and handled locally 
  5113.  
  5114.  
  5115.  
  5116.  
  5117. Test Name:   E000002                        Class Name:  Exception
  5118. CPU Time:       11.9  microseconds 
  5119. Wall Time:      12.8  microseconds.         Iteration Count:   512
  5120. Test Description:
  5121.  Exception raise and handle timing measurement
  5122.  when exception is in a procedure in a package
  5123.  
  5124.  
  5125.  
  5126.  
  5127. Test Name:   E000004                        Class Name:  Procedure
  5128. CPU Time:       15.4  microseconds 
  5129. Wall Time:      16.9  microseconds.         Iteration Count:   256
  5130. Test Description:
  5131.  Exception raise and handle timing measurement 
  5132.  when exception is in a package, 4 deep 
  5133.  
  5134.  
  5135.  
  5136.  
  5137. Test Name:   F000001                        Class Name:  Style
  5138. CPU Time:       -2.5  microseconds 
  5139. Wall Time:       2.8  microseconds.         Iteration Count:   1024
  5140. Test Description:
  5141.  Time to set a boolean flag using a logical equation
  5142.  a local and a global integer are compared 
  5143.  compare this test with F000002
  5144.  
  5145.  
  5146.  
  5147. Test Name:   F000002                        Class Name:  Style
  5148. CPU Time:        3.7  microseconds 
  5149. Wall Time:       4.1  microseconds.         Iteration Count:   1024
  5150. Test Description:
  5151.  Time to set a boolean flag using an 'if' test
  5152.  a local and a global integer are compared 
  5153.  compare this test with F000001
  5154.  
  5155.  
  5156.  
  5157. Test Name:   G000001                        Class Name:  Input/Output
  5158. CPU Time:      363.4  microseconds 
  5159. Wall Time:     400.2  microseconds.         Iteration Count:   32
  5160. Test Description:
  5161.  TEXT_IO.GET_LINE reading 20 characters, time measured 
  5162.  A scratch file is written, then read and reset 
  5163.  
  5164.  
  5165.  
  5166.  
  5167. Test Name:   G000002                        Class Name:  Input/Output
  5168. CPU Time:     1728.7  microseconds 
  5169. Wall Time:    1908.1  microseconds.         Iteration Count:   8
  5170. Test Description:
  5171.  TEXT_IO.GET called 20 times per line, time measured 
  5172.  a scratch file is written, then read and reset 
  5173.  Compare to G000001 for about same number of characters 
  5174.  
  5175.  
  5176.  
  5177. Test Name:   G000003                        Class Name:  Input/Output
  5178. CPU Time:      171.6  microseconds 
  5179. Wall Time:     190.7  microseconds.         Iteration Count:   64
  5180. Test Description:
  5181.  TEXT_IO.PUT_LINE for 20 characters, timing measurment
  5182.  a scratch file is opened, written and reset
  5183.  
  5184.  
  5185.  
  5186.  
  5187. Test Name:   G000004                        Class Name:  Input/Output
  5188. CPU Time:     2371.3  microseconds 
  5189. Wall Time:    2621.8  microseconds.         Iteration Count:   8
  5190. Test Description:
  5191.  TEXT_IO.PUT 20 times with one character, time measurement
  5192.  a scratch file is written, reset and rewritten 
  5193.  compare, approximately, to G000003
  5194.  
  5195.  
  5196.  
  5197. Test Name:   G000005                        Class Name:  Input/Output
  5198. CPU Time:      584.4  microseconds 
  5199. Wall Time:     654.1  microseconds.         Iteration Count:   16
  5200. Test Description:
  5201.  TEXT_IO.GET an integer from a local string, timing measurement
  5202.  use TEXT_IO.PUT to convert 1..100 to a string 
  5203.  then use TEXT_IO.GET to get the number back
  5204.  
  5205.  
  5206.  
  5207. Test Name:   G000006                        Class Name:  Input/Output
  5208. CPU Time:     1717.5  microseconds 
  5209. Wall Time:    1705.5  microseconds.         Iteration Count:   4
  5210. Test Description:
  5211.  TEXT_IO.GET getting a floating point fraction from a local string
  5212.  Timing measurement on 0.001 to 0.01 range of numbers
  5213.  compare, approximately, to G000005 for integer vs float
  5214.  
  5215.  
  5216.  
  5217. Test Name:   G000007                        Class Name:  Input/Output
  5218. CPU Time:    11250.0  microseconds 
  5219. Wall Time:   16319.0  microseconds.         Iteration Count:   1
  5220. Test Description:
  5221.  Open and close an existing file, time measurement
  5222.  A scratch file is created and closed 
  5223.  The scratch file is opened IN_FILE and closed in a loop
  5224.  
  5225.  
  5226.  
  5227. Test Name:   P000001                        Class Name:  Procedure
  5228. CPU Time:        4.1  microseconds 
  5229. Wall Time:       2.1  microseconds.         Iteration Count:   1024
  5230. Test Description:
  5231.  Procedure call and return time ( may be zero if automatic inlining ) 
  5232.  procedure is local 
  5233.  no parameters 
  5234.  
  5235.  
  5236.  
  5237. Test Name:   P000002                        Class Name:  Procedure
  5238. CPU Time:        2.1  microseconds 
  5239. Wall Time:       2.3  microseconds.         Iteration Count:   1024
  5240. Test Description:
  5241.  Procedure call and return time
  5242.  Procedure is local, no parameters 
  5243.  when procedure is not inlinable
  5244.  
  5245.  
  5246.  
  5247. Test Name:   P000003                        Class Name:  Procedure
  5248. CPU Time:        3.7  microseconds 
  5249. Wall Time:       4.2  microseconds.         Iteration Count:   1024
  5250. Test Description:
  5251.  Procedure call and return time measurement
  5252.  The procedure is in a separately compiled package 
  5253.  The package body is compiled after the spec is used
  5254.  
  5255.  
  5256.  
  5257. Test Name:   P000004                        Class Name:  Procedure
  5258. CPU Time:        3.7  microseconds 
  5259. Wall Time:       4.1  microseconds.         Iteration Count:   1024
  5260. Test Description:
  5261.  Procedure call and return time measurement
  5262.  The procedure is in a separately compiled package 
  5263.  The package body is compiled befor the spec is used
  5264.  
  5265.  
  5266.  
  5267. Test Name:   P000005                        Class Name:  Procedure
  5268. CPU Time:        3.9  microseconds 
  5269. Wall Time:       4.4  microseconds.         Iteration Count:   1024
  5270. Test Description:
  5271.  Procedure call and return time measurement
  5272.  The procedure is in a separately compiled package 
  5273.  The package body is compiled befor the spec is used
  5274.  
  5275.  
  5276.  
  5277. Test Name:   P000006                        Class Name:  Procedure
  5278. CPU Time:        6.2  microseconds 
  5279. Wall Time:       4.5  microseconds.         Iteration Count:   1024
  5280. Test Description:
  5281.  Procedure call and return time measurement
  5282.  The procedure is in a separately compiled package 
  5283.  The package body is compiled befor the spec is used
  5284.  
  5285.  
  5286.  
  5287. Test Name:   P000007                        Class Name:  Procedure
  5288. CPU Time:        4.5  microseconds 
  5289. Wall Time:       5.1  microseconds.         Iteration Count:   1024
  5290. Test Description:
  5291.  Procedure call and return time measurement
  5292.  The procedure is in a separately compiled package 
  5293.  The package body is compiled befor the spec is used
  5294.  
  5295.  
  5296.  
  5297. Test Name:   P000010                        Class Name:  Procedure
  5298. CPU Time:       13.4  microseconds 
  5299. Wall Time:      14.6  microseconds.         Iteration Count:   512
  5300. Test Description:
  5301.  Procedure call and return time measurement
  5302.  Ten discrete 'in' parameters 
  5303.  The package body is compiled after the spec is used
  5304.  
  5305.  
  5306.  
  5307. Test Name:   P000011                        Class Name:  Procedure
  5308. CPU Time:       23.4  microseconds 
  5309. Wall Time:      26.0  microseconds.         Iteration Count:   256
  5310. Test Description:
  5311.  Procedure call and return time measurement
  5312.  Twenty discrete 'in' parameters 
  5313.  The package body is compiled after the spec is used
  5314.  
  5315.  
  5316.  
  5317. Test Name:   P000012                        Class Name:  Procedure
  5318. CPU Time:       17.0  microseconds 
  5319. Wall Time:      14.4  microseconds.         Iteration Count:   512
  5320. Test Description:
  5321.  Procedure call and return time measurement
  5322.  Ten composite 'in' parameters 
  5323.  The package body is compiled after the spec is used
  5324.  
  5325.  
  5326.  
  5327. Test Name:   P000013                        Class Name:  Procedure
  5328. CPU Time:       22.4  microseconds 
  5329. Wall Time:      24.6  microseconds.         Iteration Count:   256
  5330. Test Description:
  5331.  Procedure call and return time measurement
  5332.  twenty composite 'in' parameters 
  5333.  The package body is compiled after the spec is used
  5334.  
  5335.  
  5336.  
  5337. Test Name:   T000001                        Class Name:  Tasking
  5338. CPU Time:       11.6  microseconds 
  5339. Wall Time:      48.6  microseconds.         Iteration Count:   512
  5340. Test Description:
  5341.  Minimum rendezvous, entry call and return time 
  5342.  1 task 1 entry 
  5343.  no select 
  5344.  
  5345.  
  5346.  
  5347. Test Name:   T000002                        Class Name:  Tasking
  5348. CPU Time:        5.6  microseconds 
  5349. Wall Time:      51.0  microseconds.         Iteration Count:   1024
  5350. Test Description:
  5351.  Task entry call and return time measured
  5352.  One task active, one entry in task, task in a package 
  5353.  no select statement 
  5354.  
  5355.  
  5356.  
  5357. Test Name:   T000003                        Class Name:  Tasking
  5358. CPU Time:        2.6  microseconds 
  5359. Wall Time:      55.5  microseconds.         Iteration Count:   1024
  5360. Test Description:
  5361.  Task entry call and return time measured
  5362.  Two tasks active, one entry per task, tasks in a package 
  5363.  no select statement 
  5364.  
  5365.  
  5366.  
  5367. Test Name:   T000004                        Class Name:  Tasking
  5368. CPU Time:        5.9  microseconds 
  5369. Wall Time:      63.8  microseconds.         Iteration Count:   1024
  5370. Test Description:
  5371.  Task entry call and return time measured
  5372.  Two tasks active, one entry per task, tasks in a package 
  5373.  no select statement 
  5374.  
  5375.  
  5376.  
  5377. Test Name:   T000005                        Class Name:  Tasking
  5378. CPU Time:       -4.9  microseconds 
  5379. Wall Time:      46.4  microseconds.         Iteration Count:   256
  5380. Test Description:
  5381.  Task entry call and return time measured
  5382.  Ten tasks active, one entry per task, tasks in a package 
  5383.  no select statement 
  5384.  
  5385.  
  5386.  
  5387. Test Name:   T000006                        Class Name:  TASKING
  5388. CPU Time:      283.5  microseconds 
  5389. Wall Time:     392.9  microseconds.         Iteration Count:   4
  5390. Test Description:
  5391.  Task entry call and return time measurement
  5392.  1 task  10 entries , task in a package 
  5393.  one select statement 
  5394.  
  5395. ::::::::::
  5396. C000001.ADA
  5397. ::::::::::
  5398. -- PERFORMANCE MEASUREMENT : task creation and termination time
  5399. --                           1 task no entry
  5400. --                           task type in package, no select
  5401.  
  5402. with REMOTE_GLOBAL ; use REMOTE_GLOBAL ;
  5403. package CREATE_PACK_1 is
  5404.   task type T1 is
  5405.   end T1 ;
  5406.   procedure P1 ; -- will create task, run task, and terminate task
  5407. end CREATE_PACK_1 ;
  5408.  
  5409. with CREATE_PACK_1 ; use CREATE_PACK_1 ;
  5410. with REMOTE_GLOBAL ; use REMOTE_GLOBAL ; -- control optimization
  5411. with ITERATION ; -- obtain stable measurement
  5412. with PIWG_IO ; -- output results
  5413.  
  5414. procedure C000001 is  -- main procedure to execute
  5415.  
  5416.   CPU_TIME : DURATION ; -- CPU time for one feature execution
  5417.   WALL_TIME : DURATION ; -- WALL time for one feature execution
  5418.   CHECK_TIMES : constant := 100 ; -- inside loop count and check
  5419.   ITERATION_COUNT : INTEGER ; -- set and varied by ITERATION package
  5420.   STABLE : BOOLEAN ; -- true when measurement stable
  5421.  
  5422.  
  5423. begin
  5424.  
  5425.   ITERATION.START_CONTROL ;  -- dummy to bring in pages on some machines
  5426.  
  5427.   delay 5.0 ;  -- wait for stable enviornment on some machines
  5428.  
  5429.   ITERATION.INITIALIZE ( ITERATION_COUNT ) ;
  5430.  
  5431.   loop  -- until stable measurement, ITERATION_COUNT increases each time
  5432.  
  5433. --
  5434. -- Control loop
  5435. --
  5436.     ITERATION.START_CONTROL ;
  5437.     for J in 1 .. ITERATION_COUNT loop
  5438.       GLOBAL := 0 ;
  5439.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  5440.         GLOBAL := GLOBAL + A_ONE ; 
  5441.         REMOTE ;                   
  5442.       end loop ;
  5443.     end loop ;
  5444.     ITERATION.STOP_CONTROL ( GLOBAL , CHECK_TIMES ) ;
  5445.  
  5446. --
  5447. -- Test loop
  5448. --
  5449. -- establish task create and terminate time
  5450.  
  5451.     ITERATION.START_TEST ;
  5452.     for J in 1 .. ITERATION_COUNT loop
  5453.       GLOBAL := 0 ;
  5454.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  5455.         P1 ; -- this has task that has global increment and call inside
  5456.       end loop ;
  5457.     end loop ;
  5458.     ITERATION.STOP_TEST ( GLOBAL , CHECK_TIMES ) ;
  5459.     ITERATION.TEST_STABLE ( ITERATION_COUNT , STABLE ) ;
  5460.     exit when STABLE ;
  5461.   end loop ;
  5462. --
  5463.   ITERATION.FEATURE_TIMES ( CPU_TIME , WALL_TIME ) ;
  5464.  
  5465. --
  5466. -- Printout
  5467. --
  5468.   PIWG_IO.PIWG_OUTPUT ( "C000001" , "Tasking" ,
  5469.                         CPU_TIME , WALL_TIME , ITERATION_COUNT ,
  5470.     " Task create and terminate measurement " ,
  5471.     " with one task, no entries, when task is in a procedure" ,
  5472.     " using a task type in a package, no select statement, no loop, " ) ;
  5473.  
  5474. end C000001 ;
  5475.  
  5476. package body CREATE_PACK_1 is
  5477.   task body T1 is
  5478.   begin
  5479.     GLOBAL := GLOBAL + A_ONE ;
  5480.     REMOTE ;
  5481.   end T1 ;
  5482.  
  5483.   procedure P1 is
  5484.     T : T1 ; -- this creates the task, runs task to completion and terminates
  5485.   begin
  5486.     null ;
  5487.   end P1 ;
  5488.  
  5489. end CREATE_PACK_1 ;
  5490. ::::::::::
  5491. C000002.ADA
  5492. ::::::::::
  5493. -- PERFORMANCE MEASUREMENT : task creation and termination time
  5494. --                           1 task no entry
  5495. --                           task defined and used in procedure, no select
  5496.  
  5497. with REMOTE_GLOBAL ; use REMOTE_GLOBAL ;
  5498. package CREATE_PACK_2 is
  5499.   procedure P1 ; -- will create task, run task, and terminate task
  5500. end CREATE_PACK_2 ;
  5501.  
  5502. with CREATE_PACK_2 ; use CREATE_PACK_2 ;
  5503. with REMOTE_GLOBAL ; use REMOTE_GLOBAL ; -- control optimization
  5504. with ITERATION ; -- obtain stable measurement
  5505. with PIWG_IO ; -- output results
  5506.  
  5507. procedure C000002 is  -- main procedure to execute
  5508.  
  5509.   CPU_TIME : DURATION ; -- CPU time for one feature execution
  5510.   WALL_TIME : DURATION ; -- WALL time for one feature execution
  5511.   CHECK_TIMES : constant := 100 ; -- inside loop count and check
  5512.   ITERATION_COUNT : INTEGER ; -- set and varied by ITERATION package
  5513.   STABLE : BOOLEAN ; -- true when measurement stable
  5514.  
  5515. begin
  5516.  
  5517.   ITERATION.START_CONTROL ;  -- dummy to bring in pages on some machines
  5518.  
  5519.   delay 0.5 ;  -- wait for stable enviornment on some machines
  5520.  
  5521.   ITERATION.INITIALIZE ( ITERATION_COUNT ) ;
  5522.  
  5523.   loop  -- until stable measurement, ITERATION_COUNT increases each time
  5524.  
  5525. --
  5526. -- Control loop
  5527. --
  5528.     ITERATION.START_CONTROL ;
  5529.     for J in 1 .. ITERATION_COUNT loop
  5530.       GLOBAL := 0 ;
  5531.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  5532.         GLOBAL := GLOBAL + A_ONE ; 
  5533.         REMOTE ;                   
  5534.       end loop ;
  5535.     end loop ;
  5536.     ITERATION.STOP_CONTROL ( GLOBAL , CHECK_TIMES ) ;
  5537.  
  5538. --
  5539. -- Test loop
  5540. --
  5541.  
  5542.     ITERATION.START_TEST ;
  5543.     for J in 1 .. ITERATION_COUNT loop
  5544.       GLOBAL := 0 ;
  5545.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  5546.         P1 ; -- this has task that has global increment and call inside
  5547.       end loop ;
  5548.     end loop ;
  5549.     ITERATION.STOP_TEST ( GLOBAL , CHECK_TIMES ) ;
  5550.     ITERATION.TEST_STABLE ( ITERATION_COUNT , STABLE ) ;
  5551.     exit when STABLE ;
  5552.   end loop ;
  5553. --
  5554.   ITERATION.FEATURE_TIMES ( CPU_TIME , WALL_TIME ) ;
  5555.  
  5556. --
  5557. -- Printout
  5558. --
  5559.   PIWG_IO.PIWG_OUTPUT ( "C000002" , "Tasking" ,
  5560.                         CPU_TIME , WALL_TIME , ITERATION_COUNT ,
  5561.     " Task create and terminate time measurement. " ,
  5562.     " with one task, no entries when task is in a procedure," ,
  5563.     " task defined and used in procedure, no select statement, no loop " ) ;
  5564.  
  5565. end C000002 ;
  5566.  
  5567. package body CREATE_PACK_2 is
  5568.  
  5569.   procedure P1 is
  5570. --         this creates the task, runs task to completion and terminates
  5571. --         execution time for task taken out by control loop
  5572.     task T1 is
  5573.     end T1 ;
  5574.  
  5575.     task body T1 is
  5576.     begin
  5577.       GLOBAL := GLOBAL + A_ONE ;
  5578.       REMOTE ;
  5579.     end T1 ;
  5580.  
  5581.   begin
  5582.     null ;
  5583.   end P1 ;
  5584.  
  5585. end CREATE_PACK_2 ;
  5586. ::::::::::
  5587. C000003.ADA
  5588. ::::::::::
  5589. -- PERFORMANCE MEASUREMENT : task creation and termination time
  5590. --                           1 task no entry
  5591. --                           task local in declare block, no select
  5592.  
  5593. with REMOTE_GLOBAL ; use REMOTE_GLOBAL ; -- control optimization
  5594. with ITERATION ; -- obtain stable measurement
  5595. with PIWG_IO ; -- output results
  5596.  
  5597. procedure C000003 is  -- main procedure to execute
  5598.  
  5599.   CPU_TIME : DURATION ; -- CPU time for one feature execution
  5600.   WALL_TIME : DURATION ; -- WALL time for one feature execution
  5601.   CHECK_TIMES : constant := 100 ; -- inside loop count and check
  5602.   ITERATION_COUNT : INTEGER ; -- set and varied by ITERATION package
  5603.   STABLE : BOOLEAN ; -- true when measurement stable
  5604.  
  5605. begin
  5606.  
  5607.   ITERATION.START_CONTROL ;  -- dummy to bring in pages on some machines
  5608.  
  5609.   delay 0.5 ;  -- wait for stable enviornment on some machines
  5610.  
  5611.   ITERATION.INITIALIZE ( ITERATION_COUNT ) ;
  5612.  
  5613.   loop  -- until stable measurement, ITERATION_COUNT increases each time
  5614.  
  5615. --
  5616. -- Control loop
  5617. --
  5618.     ITERATION.START_CONTROL ;
  5619.     for J in 1 .. ITERATION_COUNT loop
  5620.       GLOBAL := 0 ;
  5621.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  5622.         GLOBAL := GLOBAL + A_ONE ; 
  5623.         REMOTE ;                   
  5624.       end loop ;
  5625.     end loop ;
  5626.     ITERATION.STOP_CONTROL ( GLOBAL , CHECK_TIMES ) ;
  5627.  
  5628. --
  5629. -- Test loop
  5630. --
  5631. -- establish task create and terminate time
  5632.  
  5633.     ITERATION.START_TEST ;
  5634.     for J in 1 .. ITERATION_COUNT loop
  5635.       GLOBAL := 0 ;
  5636.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  5637.         declare
  5638. --           this creates the task, runs task to completion and terminates
  5639.           task T1 is
  5640.           end T1 ;
  5641.  
  5642.           task body T1 is
  5643.           begin
  5644.             GLOBAL := GLOBAL + A_ONE ;
  5645.             REMOTE ;
  5646.           end T1 ;
  5647.         begin
  5648.           null ;
  5649.         end ;
  5650.       end loop ;
  5651.     end loop ;
  5652.     ITERATION.STOP_TEST ( GLOBAL , CHECK_TIMES ) ;
  5653.     ITERATION.TEST_STABLE ( ITERATION_COUNT , STABLE ) ;
  5654.     exit when STABLE ;
  5655.   end loop ;
  5656. --
  5657.   ITERATION.FEATURE_TIMES ( CPU_TIME , WALL_TIME ) ;
  5658.  
  5659. --
  5660. -- Printout
  5661. --
  5662.   PIWG_IO.PIWG_OUTPUT ( "C000003" , "Tasking" ,
  5663.                         CPU_TIME , WALL_TIME , ITERATION_COUNT ,
  5664.      " Task create and terminate time measurement " ,
  5665.      " Task is in declare block of main procedure " ,
  5666.      " one task, no entries, task is in the loop" ) ;
  5667.  
  5668. end C000003 ;
  5669. ::::::::::
  5670. COMPILE.CLI
  5671. ::::::::::
  5672.    Data General command lines ( If  ACOMPILE.CLI does not work )
  5673. ADA A000001
  5674. ADA A000013
  5675. ADA A000021
  5676. ADA A000022
  5677. ADA A000031
  5678. ADA A000032
  5679. ADA A000041
  5680. ADA A000042
  5681. ADA/MAIN_PROGRAM A000051
  5682. ADA A000091
  5683. ADA A000093
  5684. ADA A000094
  5685. ADA C000001
  5686. ADA C000002
  5687. ADA C000003
  5688. ADA D000001
  5689. ADA D000002
  5690. ADA D000003
  5691. ADA D000004
  5692. ADA E000001
  5693. ADA E000002
  5694. ADA E000004
  5695. ADA F000001
  5696. ADA F000002
  5697. ADA G000001
  5698. ADA G000002
  5699. ADA G000003
  5700. ADA G000004
  5701. ADA G000005
  5702. ADA G000006
  5703. ADA G000007
  5704. ADA L000001
  5705. ADA L000002
  5706. ADA L000003
  5707. ADA P000001
  5708. ADA P000002
  5709. ADA P000003
  5710. ADA P000004
  5711. ADA P000005
  5712. ADA P000006
  5713. ADA P000007
  5714. ADA P000010
  5715. ADA P000011
  5716. ADA P000012
  5717. ADA P000013
  5718. ADA T000001
  5719. ADA T000002
  5720. ADA T000003
  5721. ADA T000004
  5722. ADA T000005
  5723. ADA T000006
  5724. ADALINK A000051
  5725. ADA/MAIN_PROGRAM A000100
  5726. ADALINK A000100
  5727. XEQ A000100
  5728. ::::::::::
  5729. COMPILE.COM
  5730. ::::::::::
  5731. $! VAX VMS files to compile
  5732. $ SET VERIFY
  5733. $ SET NOON
  5734. $ SET DEF [.SIGADA.TAPE_8_31_86]
  5735. $ ACS SET LIB [.ADALIB]
  5736. $ ADA A000001
  5737. $ ADA A000012 ! VAX Ada dependent
  5738. $ ADA A000021
  5739. $ ADA A000022
  5740. $ ADA A000031
  5741. $ ADA A000032
  5742. $ ADA A000041
  5743. $ ADA A000042
  5744. $ ADA A000051
  5745. $ ADA A000052
  5746. $ ADA A000053
  5747. $ ADA A000054
  5748. $ ADA A000055
  5749. $ ADA A000091
  5750. $ ADA A000092 ! VAX Ada dependent
  5751. $ ADA A000093
  5752. $ ADA A000094
  5753. $ ADA C000001
  5754. $ ADA C000002
  5755. $ ADA C000003
  5756. $ ADA D000001
  5757. $ ADA D000002
  5758. $ ADA D000003
  5759. $ ADA D000004
  5760. $ ADA E000001
  5761. $ ADA E000002
  5762. $ ADA E000004
  5763. $ ADA F000001
  5764. $ ADA F000002
  5765. $ ADA G000001
  5766. $ ADA G000002
  5767. $ ADA G000003
  5768. $ ADA G000004
  5769. $ ADA G000005
  5770. $ ADA G000006
  5771. $ ADA G000007
  5772. $ ADA L000001
  5773. $ ADA L000002
  5774. $ ADA L000003
  5775. $ ADA P000001
  5776. $ ADA P000002
  5777. $ ADA P000003
  5778. $ ADA P000004
  5779. $ ADA P000005
  5780. $ ADA P000006
  5781. $ ADA P000007
  5782. $ ADA P000010
  5783. $ ADA P000011
  5784. $ ADA P000012
  5785. $ ADA P000013
  5786. $ ADA T000001
  5787. $ ADA T000002
  5788. $ ADA T000003
  5789. $ ADA T000004
  5790. $ ADA T000005
  5791. $ ADA T000006
  5792. $ ADA T000007 ! execution possibly machine dependent
  5793. $ ACS LINK A000051
  5794. $ ACS LINK A000052
  5795. $ ACS LINK A000053
  5796. $ ACS LINK A000054
  5797. $ ACS LINK A000055
  5798. $ ADA A000100
  5799. $ ACS LINK A000100
  5800. $ RUN A000100 ! all feature tests in one procedure
  5801. ::::::::::
  5802. COMPILE.L78
  5803. ::::::::::
  5804. $   SET NOCONTROL_Y
  5805. $   SET NOVERIFY
  5806.           Batch job executed on node VAX 11/780    
  5807. $   EXIT
  5808. $! VAX VMS files to compile
  5809. $ SET VERIFY
  5810. $ SET NOON
  5811. $ SET DEF [.SIGADA.TAPE_8_31_86]
  5812. $ ACS SET LIB [.ADALIB]
  5813. %ACS-I-CL_LIBIS, Current program library is 
  5814.         USER$DISK:[.SIGADA.TAPE_8_31_86.ADALIB]
  5815. $ ADA A000001
  5816. $ ADA A000012 ! VAX Ada dependent
  5817. $ ADA A000021
  5818. $ ADA A000022
  5819. $ ADA A000031
  5820. $ ADA A000032
  5821. $ ADA A000041
  5822. $ ADA A000042
  5823. $ ADA A000051
  5824. $ ADA A000052
  5825. $ ADA A000053
  5826. $ ADA A000054
  5827. $ ADA A000055
  5828. $ ADA A000091
  5829. $ ADA A000092 ! VAX Ada dependent
  5830. $ ADA A000093
  5831. $ ADA A000094
  5832. $ ADA C000001
  5833. $ ADA C000002
  5834. $ ADA C000003
  5835. $ ADA D000001
  5836. $ ADA D000002
  5837. $ ADA D000003
  5838. $ ADA D000004
  5839. $ ADA E000001
  5840. $ ADA E000002
  5841. $ ADA E000004
  5842. $ ADA F000001
  5843. $ ADA F000002
  5844. $ ADA G000001
  5845. $ ADA G000002
  5846. $ ADA G000003
  5847. $ ADA G000004
  5848. $ ADA G000005
  5849. $ ADA G000006
  5850. $ ADA G000007
  5851. $ ADA L000001
  5852. $ ADA L000002
  5853. $ ADA L000003
  5854. $ ADA P000001
  5855. $ ADA P000002
  5856. $ ADA P000003
  5857. $ ADA P000004
  5858. $ ADA P000005
  5859. $ ADA P000006
  5860. $ ADA P000007
  5861. $ ADA P000010
  5862. $ ADA P000011
  5863. $ ADA P000012
  5864. $ ADA P000013
  5865. $ ADA T000001
  5866. $ ADA T000002
  5867. $ ADA T000003
  5868. $ ADA T000004
  5869. $ ADA T000005
  5870. $ ADA T000006
  5871. $ ADA T000007 ! execution possibly machine dependent
  5872. $ ACS LINK A000051
  5873. %ACS-I-CL_LINKING, Invoking the VAX/VMS Linker
  5874. $ ACS LINK A000052
  5875. %ACS-I-CL_LINKING, Invoking the VAX/VMS Linker
  5876. $ ACS LINK A000053
  5877. %ACS-I-CL_LINKING, Invoking the VAX/VMS Linker
  5878. $ ACS LINK A000054
  5879. %ACS-I-CL_LINKING, Invoking the VAX/VMS Linker
  5880. $ ACS LINK A000055
  5881. %ACS-I-CL_LINKING, Invoking the VAX/VMS Linker
  5882. $ ADA A000100
  5883. $ ACS LINK A000100
  5884. $ RUN A000100 ! all feature tests in one procedure
  5885.       0.8500 is time in milliseconds for one Dhrystone
  5886.  
  5887. ADA Whetstone benchmark
  5888.  
  5889. A000093 using standard internal math routines
  5890.  
  5891.  
  5892. Whetstone start time:   860.48 seconds
  5893.  
  5894. Whetstone stop time :   867.61 seconds 
  5895.  
  5896. Elapsed time for  10 cycles :     7.13 seconds
  5897.  
  5898. Whetstone rating :        1403 KWIPS
  5899.  
  5900.  
  5901. Whetstone start time:   867.64 seconds
  5902.  
  5903. Whetstone stop time :   881.90 seconds 
  5904.  
  5905. Elapsed time for  20 cycles :    14.26 seconds
  5906.  
  5907. Whetstone rating :        1403 KWIPS
  5908.  
  5909.  
  5910. Whetstone start time:   881.94 seconds
  5911.  
  5912. Whetstone stop time :   903.31 seconds 
  5913.  
  5914. Elapsed time for  30 cycles :    21.37 seconds
  5915.  
  5916. Whetstone rating :        1404 KWIPS
  5917.  
  5918.  
  5919. Whetstone start time:   903.33 seconds
  5920.  
  5921. Whetstone stop time :   931.83 seconds 
  5922.  
  5923. Elapsed time for  40 cycles :    28.50 seconds
  5924.  
  5925. Whetstone rating :        1404 KWIPS
  5926.  
  5927.  
  5928. Whetstone start time:   931.87 seconds
  5929.  
  5930. Whetstone stop time :   967.54 seconds 
  5931.  
  5932. Elapsed time for  50 cycles :    35.67 seconds
  5933.  
  5934. Whetstone rating :        1402 KWIPS
  5935.  
  5936.  
  5937. Average time per cycle :   712.85 milliseconds
  5938.  
  5939.  Average Whetstone rating :        1403 KWIPS
  5940.  
  5941.  
  5942. A000094
  5943.    Perm Towers Queens  Intmm     Mm Puzzle  Quick Bubble   Tree    FFT    Ack
  5944.    2.35   3.42   1.42   0.85   0.83   8.31   1.10   1.51   2.04   1.87  78.90
  5945.  
  5946. Test Name:   C000001                        Class Name:  Tasking
  5947. CPU Time:     6300.4  microseconds 
  5948. Wall Time:    6249.7  microseconds.         Iteration Count:   2
  5949. Test Description:
  5950.  Task create and terminate measurement 
  5951.  with one task, no entries, when task is in a procedure
  5952.  using a task type in a package, no select statement, no loop, 
  5953.  
  5954.  
  5955.  
  5956. Test Name:   C000002                        Class Name:  Tasking
  5957. CPU Time:     6400.5  microseconds 
  5958. Wall Time:    6399.8  microseconds.         Iteration Count:   2
  5959. Test Description:
  5960.  Task create and terminate time measurement. 
  5961.  with one task, no entries when task is in a procedure,
  5962.  task defined and used in procedure, no select statement, no loop 
  5963.  
  5964.  
  5965.  
  5966. Test Name:   C000003                        Class Name:  Tasking
  5967. CPU Time:     6449.9  microseconds 
  5968. Wall Time:    6449.9  microseconds.         Iteration Count:   2
  5969. Test Description:
  5970.  Task create and terminate time measurement 
  5971.  Task is in declare block of main procedure 
  5972.  one task, no entries, task is in the loop
  5973.  
  5974.  
  5975.  
  5976. Test Name:   D000001                        Class Name:  Allocation
  5977. CPU Time:       21.1  microseconds 
  5978. Wall Time:      20.3  microseconds.         Iteration Count:   128
  5979. Test Description:
  5980.  Dynamic array allocation, use and deallocation time measurement 
  5981.  Dynamic array elaboration , 1000 integers in a procedure
  5982.  get space and free it in the procedure on each call
  5983.  
  5984.  
  5985.  
  5986. Test Name:   D000002                        Class Name:  Allocation
  5987. CPU Time:     4375.0  microseconds 
  5988. Wall Time:    4349.8  microseconds.         Iteration Count:   4
  5989. Test Description:
  5990.  Dynamic array elaboration and initialization time measurement 
  5991.  allocation, initialization, use and deallocation 
  5992.  1000 integers initialized by  others=>1 
  5993.  
  5994.  
  5995.  
  5996. Test Name:   D000003                        Class Name:  Allocation
  5997. CPU Time:        3.1  microseconds 
  5998. Wall Time:       3.9  microseconds.         Iteration Count:   128
  5999. Test Description:
  6000.  Dynamic record allocation and deallocation time measurement 
  6001.  elaborating, allocating and deallocating 
  6002.  record containing a dynamic array of 1000 integers 
  6003.  
  6004.  
  6005.  
  6006. Test Name:   D000004                        Class Name:  Allocation
  6007. CPU Time:     6350.1  microseconds 
  6008. Wall Time:    6350.1  microseconds.         Iteration Count:   2
  6009. Test Description:
  6010.  Dynamic record allocation and deallocation time measurement 
  6011.  elaborating, initializing by ( DYNAMIC_SIZE,(others=>1)) 
  6012.  record containing a dynamic array of 1000 integers 
  6013.  
  6014.  
  6015.  
  6016. Test Name:   E000001                        Class Name:  Exception
  6017. CPU Time:      468.7  microseconds 
  6018. Wall Time:     468.7  microseconds.         Iteration Count:   32
  6019. Test Description:
  6020.  Time to raise and handle an exception 
  6021.  Exception defined locally and handled locally 
  6022.  
  6023.  
  6024.  
  6025.  
  6026. Test Name:   E000002                        Class Name:  Exception
  6027. CPU Time:      737.5  microseconds 
  6028. Wall Time:     768.8  microseconds.         Iteration Count:   16
  6029. Test Description:
  6030.  Exception raise and handle timing measurement
  6031.  when exception is in a procedure in a package
  6032.  
  6033.  
  6034.  
  6035.  
  6036. Test Name:   E000004                        Class Name:  Procedure
  6037. CPU Time:      525.0  microseconds 
  6038. Wall Time:     525.0  microseconds.         Iteration Count:   32
  6039. Test Description:
  6040.  Exception raise and handle timing measurement 
  6041.  when exception is in a package, 4 deep 
  6042.  
  6043.  
  6044.  
  6045.  
  6046. Test Name:   F000001                        Class Name:  Style
  6047. CPU Time:        2.7  microseconds 
  6048. Wall Time:       2.3  microseconds.         Iteration Count:   256
  6049. Test Description:
  6050.  Time to set a boolean flag using a logical equation
  6051.  a local and a global integer are compared 
  6052.  compare this test with F000002
  6053.  
  6054.  
  6055.  
  6056. Test Name:   F000002                        Class Name:  Style
  6057. CPU Time:        2.3  microseconds 
  6058. Wall Time:       2.7  microseconds.         Iteration Count:   256
  6059. Test Description:
  6060.  Time to set a boolean flag using an 'if' test
  6061.  a local and a global integer are compared 
  6062.  compare this test with F000001
  6063.  
  6064.  
  6065.  
  6066. Test Name:   G000001                        Class Name:  Input/Output
  6067. CPU Time:      950.0  microseconds 
  6068. Wall Time:    1087.5  microseconds.         Iteration Count:   16
  6069. Test Description:
  6070.  TEXT_IO.GET_LINE reading 20 characters, time measured 
  6071.  A scratch file is written, then read and reset 
  6072.  
  6073.  
  6074.  
  6075.  
  6076. Test Name:   G000002                        Class Name:  Input/Output
  6077. CPU Time:     4650.0  microseconds 
  6078. Wall Time:    4800.1  microseconds.         Iteration Count:   4
  6079. Test Description:
  6080.  TEXT_IO.GET called 20 times per line, time measured 
  6081.  a scratch file is written, then read and reset 
  6082.  Compare to G000001 for about same number of characters 
  6083.  
  6084.  
  6085.  
  6086. Test Name:   G000003                        Class Name:  Input/Output
  6087. CPU Time:     1837.5  microseconds 
  6088. Wall Time:    2737.5  microseconds.         Iteration Count:   8
  6089. Test Description:
  6090.  TEXT_IO.PUT_LINE for 20 characters, timing measurment
  6091.  a scratch file is opened, written and reset
  6092.  
  6093.  
  6094.  
  6095.  
  6096. Test Name:   G000004                        Class Name:  Input/Output
  6097. CPU Time:     3800.0  microseconds 
  6098. Wall Time:    4649.8  microseconds.         Iteration Count:   4
  6099. Test Description:
  6100.  TEXT_IO.PUT 20 times with one character, time measurement
  6101.  a scratch file is written, reset and rewritten 
  6102.  compare, approximately, to G000003
  6103.  
  6104.  
  6105.  
  6106. Test Name:   G000005                        Class Name:  Input/Output
  6107. CPU Time:      359.4  microseconds 
  6108. Wall Time:     359.4  microseconds.         Iteration Count:   32
  6109. Test Description:
  6110.  TEXT_IO.GET an integer from a local string, timing measurement
  6111.  use TEXT_IO.PUT to convert 1..100 to a string 
  6112.  then use TEXT_IO.GET to get the number back
  6113.  
  6114.  
  6115.  
  6116. Test Name:   G000006                        Class Name:  Input/Output
  6117. CPU Time:      925.1  microseconds 
  6118. Wall Time:     925.1  microseconds.         Iteration Count:   8
  6119. Test Description:
  6120.  TEXT_IO.GET getting a floating point fraction from a local string
  6121.  Timing measurement on 0.001 to 0.01 range of numbers
  6122.  compare, approximately, to G000005 for integer vs float
  6123.  
  6124.  
  6125.  
  6126. Test Name:   G000007                        Class Name:  Input/Output
  6127. CPU Time:    50900.3  microseconds 
  6128. Wall Time:   50899.7  microseconds.         Iteration Count:   1
  6129. Test Description:
  6130.  Open and close an existing file, time measurement
  6131.  A scratch file is created and closed 
  6132.  The scratch file is opened IN_FILE and closed in a loop
  6133.  
  6134.  
  6135.  
  6136. Test Name:   L000001                        Class Name:  Iteration
  6137. CPU Time:       15.5  microseconds 
  6138. Wall Time:      15.5  microseconds.         Iteration Count:   2
  6139. Test Description:
  6140. Simple "for" loop time 
  6141. for I in 1 .. 100 loop 
  6142. time reported is for once through loop 
  6143.  
  6144.  
  6145.  
  6146. Test Name:   L000002                        Class Name:  Iteration
  6147. CPU Time:        1.5  microseconds 
  6148. Wall Time:       0.0  microseconds.         Iteration Count:   4
  6149. Test Description:
  6150. Simple "while" loop time 
  6151. while I <= 100 loop 
  6152. time reported is for once through loop 
  6153.  
  6154.  
  6155.  
  6156. Test Name:   L000003                        Class Name:  Iteration
  6157. CPU Time:        2.5  microseconds 
  6158. Wall Time:       1.8  microseconds.         Iteration Count:   4
  6159. Test Description:
  6160. Simple "exit" loop time 
  6161.  loop I:=I+1; exit when I>100; end loop;
  6162. time reported is for once through loop 
  6163.  
  6164.  
  6165.  
  6166. Test Name:   P000001                        Class Name:  Procedure
  6167. CPU Time:        0.0  microseconds 
  6168. Wall Time:       0.4  microseconds.         Iteration Count:   256
  6169. Test Description:
  6170.  Procedure call and return time ( may be zero if automatic inlining ) 
  6171.  procedure is local 
  6172.  no parameters 
  6173.  
  6174.  
  6175.  
  6176. Test Name:   P000002                        Class Name:  Procedure
  6177. CPU Time:       33.6  microseconds 
  6178. Wall Time:      33.6  microseconds.         Iteration Count:   128
  6179. Test Description:
  6180.  Procedure call and return time
  6181.  Procedure is local, no parameters 
  6182.  when procedure is not inlinable
  6183.  
  6184.  
  6185.  
  6186. Test Name:   P000003                        Class Name:  Procedure
  6187. CPU Time:       27.7  microseconds 
  6188. Wall Time:      27.7  microseconds.         Iteration Count:   256
  6189. Test Description:
  6190.  Procedure call and return time measurement
  6191.  The procedure is in a separately compiled package 
  6192.  Compare to P000002 
  6193.  
  6194.  
  6195.  
  6196. Test Name:   P000004                        Class Name:  Procedure
  6197. CPU Time:        0.4  microseconds 
  6198. Wall Time:       0.0  microseconds.         Iteration Count:   256
  6199. Test Description:
  6200.  Procedure call and return time measurement
  6201.  The procedure is in a separately compiled package 
  6202.  pragma INLINE used. Compare to P000001 
  6203.  
  6204.  
  6205.  
  6206. Test Name:   P000005                        Class Name:  Procedure
  6207. CPU Time:       33.6  microseconds 
  6208. Wall Time:      33.6  microseconds.         Iteration Count:   128
  6209. Test Description:
  6210.  Procedure call and return time measurement
  6211.  The procedure is in a separately compiled package 
  6212.  One parameter, in INTEGER 
  6213.  
  6214.  
  6215.  
  6216. Test Name:   P000006                        Class Name:  Procedure
  6217. CPU Time:       35.2  microseconds 
  6218. Wall Time:      34.4  microseconds.         Iteration Count:   128
  6219. Test Description:
  6220.  Procedure call and return time measurement
  6221.  The procedure is in a separately compiled package 
  6222.  One parameter, out INTEGER 
  6223.  
  6224.  
  6225.  
  6226. Test Name:   P000007                        Class Name:  Procedure
  6227. CPU Time:       35.9  microseconds 
  6228. Wall Time:      35.2  microseconds.         Iteration Count:   128
  6229. Test Description:
  6230.  Procedure call and return time measurement
  6231.  The procedure is in a separately compiled package 
  6232.  One parameter, in out INTEGER 
  6233.  
  6234.  
  6235.  
  6236. Test Name:   P000010                        Class Name:  Procedure
  6237. CPU Time:       63.3  microseconds 
  6238. Wall Time:      63.3  microseconds.         Iteration Count:   128
  6239. Test Description:
  6240.  Procedure call and return time measurement
  6241.  Compare to P000005 
  6242.  10 parameters, in INTEGER 
  6243.  
  6244.  
  6245.  
  6246. Test Name:   P000011                        Class Name:  Procedure
  6247. CPU Time:       92.2  microseconds 
  6248. Wall Time:      93.0  microseconds.         Iteration Count:   128
  6249. Test Description:
  6250.  Procedure call and return time measurement
  6251.  Compare to P000005, P000010 
  6252.  20 parameters, in INTEGER 
  6253.  
  6254.  
  6255.  
  6256. Test Name:   P000012                        Class Name:  Procedure
  6257. CPU Time:       53.1  microseconds 
  6258. Wall Time:      53.1  microseconds.         Iteration Count:   128
  6259. Test Description:
  6260.  Procedure call and return time measurement
  6261.  Compare with P000010 ( discrete vs composite parameters ) 
  6262.  10 paramaters, in MY_RECORD  a three component record
  6263.  
  6264.  
  6265.  
  6266. Test Name:   P000013                        Class Name:  Procedure
  6267. CPU Time:       78.1  microseconds 
  6268. Wall Time:      77.3  microseconds.         Iteration Count:   128
  6269. Test Description:
  6270.  Procedure call and return time measurement
  6271.  twenty composite 'in' parameters 
  6272.  The package body is compiled after the spec is used
  6273.  
  6274.  
  6275.  
  6276. Test Name:   T000001                        Class Name:  Tasking
  6277. CPU Time:     1031.2  microseconds 
  6278. Wall Time:    1025.0  microseconds.         Iteration Count:   16
  6279. Test Description:
  6280.  Minimum rendezvous, entry call and return time 
  6281.  1 task 1 entry , task inside procedure 
  6282.  no select 
  6283.  
  6284.  
  6285.  
  6286. Test Name:   T000002                        Class Name:  Tasking
  6287. CPU Time:     1025.0  microseconds 
  6288. Wall Time:    1018.7  microseconds.         Iteration Count:   16
  6289. Test Description:
  6290.  Task entry call and return time measured
  6291.  One task active, one entry in task, task in a package 
  6292.  no select statement 
  6293.  
  6294.  
  6295.  
  6296. Test Name:   T000003                        Class Name:  Tasking
  6297. CPU Time:     1087.5  microseconds 
  6298. Wall Time:    1087.5  microseconds.         Iteration Count:   8
  6299. Test Description:
  6300.  Task entry call and return time measured
  6301.  Two tasks active, one entry per task, tasks in a package 
  6302.  no select statement 
  6303.  
  6304.  
  6305.  
  6306. Test Name:   T000004                        Class Name:  Tasking
  6307. CPU Time:     1225.0  microseconds 
  6308. Wall Time:    1225.0  microseconds.         Iteration Count:   8
  6309. Test Description:
  6310.  Task entry call and return time measured
  6311.  One tasks active, two entries, tasks in a package 
  6312.  using select statement 
  6313.  
  6314.  
  6315.  
  6316. Test Name:   T000005                        Class Name:  Tasking
  6317. CPU Time:     1119.9  microseconds 
  6318. Wall Time:    1120.0  microseconds.         Iteration Count:   1
  6319. Test Description:
  6320.  Task entry call and return time measured
  6321.  Ten tasks active, one entry per task, tasks in a package 
  6322.  no select statement 
  6323.  
  6324.  
  6325.  
  6326. Test Name:   T000006                        Class Name:  TASKING
  6327. CPU Time:     1740.1  microseconds 
  6328. Wall Time:    1750.0  microseconds.         Iteration Count:   1
  6329. Test Description:
  6330.  Task entry call and return time measurement
  6331.  One task with ten entries , task in a package 
  6332.  one select statement, compare to T000005 
  6333.  
  6334.  
  6335.          job terminated at 17-NOV-1986 04:21:36.80
  6336.   Accounting information:
  6337.   Buffered I/O count:         3879      Peak working set size:  4577
  6338.   Direct I/O count:           6714      Peak page file size:    4703
  6339.   Page faults:              148918      Mounted volumes:           0
  6340.   Charged CPU time:     0 00:20:31.42   Elapsed time:     0 00:28:42.58
  6341. ::::::::::
  6342. COMPILE.L86
  6343. ::::::::::
  6344. $   SET NOCONTROL_Y
  6345. $   SET NOVERIFY
  6346.             Batch job executed on node VAX 8650
  6347. $   EXIT
  6348. $ SET NOVERIFY
  6349. $ SET NOON
  6350. $ SET DEF [.SIGADA.TAPE_8_31_86]
  6351. $ ACS CREA LIB [.ADALIB]
  6352. %ACS-I-CL_LIBCRE, Library PUSERS:[.SIGADA.TAPE_8_31_86.ADALIB] created
  6353. $ ACS SET LIB [.ADALIB]
  6354. %ACS-I-CL_LIBIS, Current program library is 
  6355.         PUSERS:[.SIGADA.TAPE_8_31_86.ADALIB]
  6356. $ ADA A000001
  6357. $ ADA A000012 ! VAX Ada dependent
  6358. $ ADA A000021
  6359. $ ADA A000022
  6360. $ ADA A000031
  6361. $ ADA A000032
  6362. $ ADA A000041
  6363. $ ADA A000042
  6364. $ ADA A000051
  6365. $ ADA A000052
  6366. $ ADA A000053
  6367. $ ADA A000054
  6368. $ ADA A000055
  6369. $ ADA A000091
  6370. $ ADA A000092 ! VAX Ada dependent
  6371. $ ADA A000093
  6372. $ ADA A000094
  6373. $ ADA C000001
  6374. $ ADA C000002
  6375. $ ADA C000003
  6376. $ ADA D000001
  6377. $ ADA D000002
  6378. $ ADA D000003
  6379. $ ADA D000004
  6380. $ ADA E000001
  6381. $ ADA E000002
  6382. $ ADA E000004
  6383. $ ADA F000001
  6384. $ ADA F000002
  6385. $ ADA G000001
  6386. $ ADA G000002
  6387. $ ADA G000003
  6388. $ ADA G000004
  6389. $ ADA G000005
  6390. $ ADA G000006
  6391. $ ADA G000007
  6392. $ ADA L000001
  6393. $ ADA L000002
  6394. $ ADA L000003
  6395. $ ADA P000001
  6396. $ ADA P000002
  6397. $ ADA P000003
  6398. $ ADA P000004
  6399. $ ADA P000005
  6400. $ ADA P000006
  6401. $ ADA P000007
  6402. $ ADA P000010
  6403. $ ADA P000011
  6404. $ ADA P000012
  6405. $ ADA P000013
  6406. $ ADA T000001
  6407. $ ADA T000002
  6408. $ ADA T000003
  6409. $ ADA T000004
  6410. $ ADA T000005
  6411. $ ADA T000006
  6412. $ ADA T000007 ! execution possibly machine dependent
  6413. $ ACS LINK A000051 ! these are for later compilation time tests
  6414. %ACS-I-CL_LINKING, Invoking the VAX/VMS Linker
  6415. $ ACS LINK A000052
  6416. %ACS-I-CL_LINKING, Invoking the VAX/VMS Linker
  6417. $ ACS LINK A000053
  6418. %ACS-I-CL_LINKING, Invoking the VAX/VMS Linker
  6419. $ ACS LINK A000054
  6420. %ACS-I-CL_LINKING, Invoking the VAX/VMS Linker
  6421. $ ACS LINK A000055
  6422. %ACS-I-CL_LINKING, Invoking the VAX/VMS Linker
  6423. $ ADA A000100
  6424. $ ACS LINK A000100
  6425. %ACS-I-CL_LINKING, Invoking the VAX/VMS Linker
  6426. $ RUN A000100 ! all feature tests in one procedure
  6427.       0.1509 is time in milliseconds for one Dhrystone
  6428.  
  6429. ADA Whetstone benchmark
  6430.  
  6431. A000093 using standard internal math routines
  6432.  
  6433.  
  6434. Whetstone start time:   179.95 seconds
  6435.  
  6436. Whetstone stop time :   183.47 seconds 
  6437.  
  6438. Elapsed time for  10 cycles :     3.52 seconds
  6439.  
  6440. Whetstone rating :        2841 KWIPS
  6441.  
  6442.  
  6443. Whetstone start time:   183.48 seconds
  6444.  
  6445. Whetstone stop time :   190.54 seconds 
  6446.  
  6447. Elapsed time for  20 cycles :     7.06 seconds
  6448.  
  6449. Whetstone rating :        2833 KWIPS
  6450.  
  6451.  
  6452. Whetstone start time:   190.55 seconds
  6453.  
  6454. Whetstone stop time :   201.13 seconds 
  6455.  
  6456. Elapsed time for  30 cycles :    10.58 seconds
  6457.  
  6458. Whetstone rating :        2836 KWIPS
  6459.  
  6460.  
  6461. Whetstone start time:   201.14 seconds
  6462.  
  6463. Whetstone stop time :   215.12 seconds 
  6464.  
  6465. Elapsed time for  40 cycles :    13.98 seconds
  6466.  
  6467. Whetstone rating :        2861 KWIPS
  6468.  
  6469.  
  6470. Whetstone start time:   215.13 seconds
  6471.  
  6472. Whetstone stop time :   232.68 seconds 
  6473.  
  6474. Elapsed time for  50 cycles :    17.55 seconds
  6475.  
  6476. Whetstone rating :        2849 KWIPS
  6477.  
  6478.  
  6479. Average time per cycle :   351.63 milliseconds
  6480.  
  6481.  Average Whetstone rating :        2844 KWIPS
  6482.  
  6483.  
  6484. A000094
  6485.    Perm Towers Queens  Intmm     Mm Puzzle  Quick Bubble   Tree    FFT    Ack
  6486.    0.39   0.59   0.29   0.29   0.40   1.52   0.20   0.33   0.36   0.64  13.79
  6487.  
  6488. Test Name:   C000001                        Class Name:  Tasking
  6489. CPU Time:     1218.7  microseconds 
  6490. Wall Time:    1687.5  microseconds.         Iteration Count:   16
  6491. Test Description:
  6492.  Task create and terminate measurement 
  6493.  with 1 task 0 entry when task is in a procedure
  6494.  in a package, no select statement, no loop, using a task type 
  6495.  
  6496.  
  6497.  
  6498. Test Name:   C000002                        Class Name:  Tasking
  6499. CPU Time:     1274.9  microseconds 
  6500. Wall Time:    1750.0  microseconds.         Iteration Count:   8
  6501. Test Description:
  6502.  Task create and terminate time measurement. 
  6503.  with 1 task 0 entry when task is in a procedure,
  6504.  in a package, no select statement, no loop 
  6505.  
  6506.  
  6507.  
  6508. Test Name:   C000003                        Class Name:  Tasking
  6509. CPU Time:     1287.5  microseconds 
  6510. Wall Time:    2574.9  microseconds.         Iteration Count:   8
  6511. Test Description:
  6512.  Task create and terminate time measurement 
  6513.  Task is in declare block of main procedure 
  6514.  with 1 task 0 entry when task is in the loop
  6515.  
  6516.  
  6517.  
  6518. Test Name:   D000001                        Class Name:  Allocation
  6519. CPU Time:        3.9  microseconds 
  6520. Wall Time:       3.9  microseconds.         Iteration Count:   512
  6521. Test Description:
  6522.  Dynamic array allocation, use and deallocation time measurement 
  6523.  Dynamic array elaboration , 1000 integers in a procedure
  6524.  get space and free it in the procedure on each call
  6525.  
  6526.  
  6527.  
  6528. Test Name:   D000002                        Class Name:  Allocation
  6529. CPU Time:      968.8  microseconds 
  6530. Wall Time:    1093.8  microseconds.         Iteration Count:   16
  6531. Test Description:
  6532.  Dynamic array elaboration and initialization time measurement 
  6533.  allocation, initialization, use and deallocation 
  6534.  1000 integers initialized by  others=>1 
  6535.  
  6536.  
  6537.  
  6538. Test Name:   D000003                        Class Name:  Allocation
  6539. CPU Time:        4.1  microseconds 
  6540. Wall Time:       0.4  microseconds.         Iteration Count:   512
  6541. Test Description:
  6542.  Dynamic record allocation and deallocation time measurement 
  6543.  elaborating, allocating and deallocating 
  6544.  record containing a dynamic array of 1000 integers 
  6545.  
  6546.  
  6547.  
  6548. Test Name:   D000004                        Class Name:  Allocation
  6549. CPU Time:     1262.5  microseconds 
  6550. Wall Time:    1262.4  microseconds.         Iteration Count:   8
  6551. Test Description:
  6552.  Dynamic record allocation and deallocation time measurement 
  6553.  elaborating, initializing by ( DYNAMIC_SIZE,(others=>1)) 
  6554.  record containing a dynamic array of 1000 integers 
  6555.  
  6556.  
  6557.  
  6558. Test Name:   E000001                        Class Name:  Exception
  6559. CPU Time:       83.6  microseconds 
  6560. Wall Time:      83.6  microseconds.         Iteration Count:   128
  6561. Test Description:
  6562.  Time to raise and handle an exception 
  6563.  Exception defined locally and handled locally 
  6564.  
  6565.  
  6566.  
  6567.  
  6568. Test Name:   E000002                        Class Name:  Exception
  6569. CPU Time:      140.6  microseconds 
  6570. Wall Time:     142.2  microseconds.         Iteration Count:   64
  6571. Test Description:
  6572.  Exception raise and handle timing measurement
  6573.  when exception is in a procedure in a package
  6574.  
  6575.  
  6576.  
  6577.  
  6578. Test Name:   E000004                        Class Name:  Procedure
  6579. CPU Time:      102.3  microseconds 
  6580. Wall Time:     103.1  microseconds.         Iteration Count:   128
  6581. Test Description:
  6582.  Exception raise and handle timing measurement 
  6583.  when exception is in a package, 4 deep 
  6584.  
  6585.  
  6586.  
  6587.  
  6588. Test Name:   F000001                        Class Name:  Style
  6589. CPU Time:        0.4  microseconds 
  6590. Wall Time:       0.3  microseconds.         Iteration Count:   1024
  6591. Test Description:
  6592.  Time to set a boolean flag using a logical equation
  6593.  a local and a global integer are compared 
  6594.  compare this test with F000002
  6595.  
  6596.  
  6597.  
  6598. Test Name:   F000002                        Class Name:  Style
  6599. CPU Time:        0.7  microseconds 
  6600. Wall Time:       0.5  microseconds.         Iteration Count:   2048
  6601. Test Description:
  6602.  Time to set a boolean flag using an 'if' test
  6603.  a local and a global integer are compared 
  6604.  compare this test with F000001
  6605.  
  6606.  
  6607.  
  6608. Test Name:   G000001                        Class Name:  Input/Output
  6609. CPU Time:      176.6  microseconds 
  6610. Wall Time:     373.4  microseconds.         Iteration Count:   64
  6611. Test Description:
  6612.  TEXT_IO.GET_LINE reading 20 characters, time measured 
  6613.  A scratch file is written, then read and reset 
  6614.  
  6615.  
  6616.  
  6617.  
  6618. Test Name:   G000002                        Class Name:  Input/Output
  6619. CPU Time:      862.5  microseconds 
  6620. Wall Time:    1093.7  microseconds.         Iteration Count:   16
  6621. Test Description:
  6622.  TEXT_IO.GET called 20 times per line, time measured 
  6623.  a scratch file is written, then read and reset 
  6624.  Compare to G000001 for about same number of characters 
  6625.  
  6626.  
  6627.  
  6628. Test Name:   G000003                        Class Name:  Input/Output
  6629. CPU Time:      359.4  microseconds 
  6630. Wall Time:    1487.5  microseconds.         Iteration Count:   32
  6631. Test Description:
  6632.  TEXT_IO.PUT_LINE for 20 characters, timing measurment
  6633.  a scratch file is opened, written and reset
  6634.  
  6635.  
  6636.  
  6637.  
  6638. Test Name:   G000004                        Class Name:  Input/Output
  6639. CPU Time:      762.4  microseconds 
  6640. Wall Time:    1837.5  microseconds.         Iteration Count:   16
  6641. Test Description:
  6642.  TEXT_IO.PUT 20 times with one character, time measurement
  6643.  a scratch file is written, reset and rewritten 
  6644.  compare, approximately, to G000003
  6645.  
  6646.  
  6647.  
  6648. Test Name:   G000005                        Class Name:  Input/Output
  6649. CPU Time:       68.7  microseconds 
  6650. Wall Time:      67.2  microseconds.         Iteration Count:   128
  6651. Test Description:
  6652.  TEXT_IO.GET an integer from a local string, timing measurement
  6653.  use TEXT_IO.PUT to convert 1..100 to a string 
  6654.  then use TEXT_IO.GET to get the number back
  6655.  
  6656.  
  6657.  
  6658. Test Name:   G000006                        Class Name:  Input/Output
  6659. CPU Time:      190.6  microseconds 
  6660. Wall Time:     326.6  microseconds.         Iteration Count:   64
  6661. Test Description:
  6662.  TEXT_IO.GET getting a floating point fraction from a local string
  6663.  Timing measurement on 0.001 to 0.01 range of numbers
  6664.  compare, approximately, to G000005 for integer vs float
  6665.  
  6666.  
  6667.  
  6668. Test Name:   G000007                        Class Name:  Input/Output
  6669. CPU Time:    13599.9  microseconds 
  6670. Wall Time:   25300.3  microseconds.         Iteration Count:   1
  6671. Test Description:
  6672.  Open and close an existing file, time measurement
  6673.  A scratch file is created and closed 
  6674.  The scratch file is opened IN_FILE and closed in a loop
  6675.  
  6676.  
  6677.  
  6678. Test Name:   L000001                        Class Name:  Iteration
  6679. CPU Time:        0.4  microseconds 
  6680. Wall Time:       0.9  microseconds.         Iteration Count:   16
  6681. Test Description:
  6682. Simple "for" loop time 
  6683. for I in 1 .. 100 loop 
  6684. time reported is for once through loop 
  6685.  
  6686.  
  6687.  
  6688. Test Name:   L000002                        Class Name:  Iteration
  6689. CPU Time:        0.4  microseconds 
  6690. Wall Time:       0.4  microseconds.         Iteration Count:   16
  6691. Test Description:
  6692. Simple "while" loop time 
  6693. while I <= 100 loop 
  6694. time reported is for once through loop 
  6695.  
  6696.  
  6697.  
  6698. Test Name:   L000003                        Class Name:  Iteration
  6699. CPU Time:        0.4  microseconds 
  6700. Wall Time:       0.4  microseconds.         Iteration Count:   16
  6701. Test Description:
  6702. Simple "exit" loop time 
  6703.  loop I:=I+1; exit when I>100; end loop;
  6704. time reported is for once through loop 
  6705.  
  6706.  
  6707.  
  6708. Test Name:   P000001                        Class Name:  Procedure
  6709. CPU Time:        0.0  microseconds 
  6710. Wall Time:       0.0  microseconds.         Iteration Count:   2048
  6711. Test Description:
  6712.  Procedure call and return time ( may be zero if automatic inlining ) 
  6713.  procedure is local 
  6714.  no parameters 
  6715.  
  6716.  
  6717.  
  6718. Test Name:   P000002                        Class Name:  Procedure
  6719. CPU Time:        6.7  microseconds 
  6720. Wall Time:       7.1  microseconds.         Iteration Count:   1024
  6721. Test Description:
  6722.  Procedure call and return time
  6723.  Procedure is local, no parameters 
  6724.  when procedure is not inlinable
  6725.  
  6726.  
  6727.  
  6728. Test Name:   P000003                        Class Name:  Procedure
  6729. CPU Time:       10.5  microseconds 
  6730. Wall Time:      10.5  microseconds.         Iteration Count:   512
  6731. Test Description:
  6732.  Procedure call and return time measurement
  6733.  The procedure is in a separately compiled package 
  6734.  The package body is compiled after the spec is used
  6735.  
  6736.  
  6737.  
  6738. Test Name:   P000004                        Class Name:  Procedure
  6739. CPU Time:        5.4  microseconds 
  6740. Wall Time:       5.7  microseconds.         Iteration Count:   1024
  6741. Test Description:
  6742.  Procedure call and return time measurement
  6743.  The procedure is in a separately compiled package 
  6744.  The package body is compiled befor the spec is used
  6745.  
  6746.  
  6747.  
  6748. Test Name:   P000005                        Class Name:  Procedure
  6749. CPU Time:        6.2  microseconds 
  6750. Wall Time:       6.2  microseconds.         Iteration Count:   1024
  6751. Test Description:
  6752.  Procedure call and return time measurement
  6753.  The procedure is in a separately compiled package 
  6754.  The package body is compiled befor the spec is used
  6755.  
  6756.  
  6757.  
  6758. Test Name:   P000006                        Class Name:  Procedure
  6759. CPU Time:        7.0  microseconds 
  6760. Wall Time:       7.1  microseconds.         Iteration Count:   1024
  6761. Test Description:
  6762.  Procedure call and return time measurement
  6763.  The procedure is in a separately compiled package 
  6764.  The package body is compiled befor the spec is used
  6765.  
  6766.  
  6767.  
  6768. Test Name:   P000007                        Class Name:  Procedure
  6769. CPU Time:        6.9  microseconds 
  6770. Wall Time:       6.9  microseconds.         Iteration Count:   1024
  6771. Test Description:
  6772.  Procedure call and return time measurement
  6773.  The procedure is in a separately compiled package 
  6774.  The package body is compiled befor the spec is used
  6775.  
  6776.  
  6777.  
  6778. Test Name:   P000010                        Class Name:  Procedure
  6779. CPU Time:       13.3  microseconds 
  6780. Wall Time:      13.3  microseconds.         Iteration Count:   512
  6781. Test Description:
  6782.  Procedure call and return time measurement
  6783.  Ten discrete 'in' parameters 
  6784.  The package body is compiled after the spec is used
  6785.  
  6786.  
  6787.  
  6788. Test Name:   P000011                        Class Name:  Procedure
  6789. CPU Time:       18.0  microseconds 
  6790. Wall Time:      18.2  microseconds.         Iteration Count:   512
  6791. Test Description:
  6792.  Procedure call and return time measurement
  6793.  Twenty discrete 'in' parameters 
  6794.  The package body is compiled after the spec is used
  6795.  
  6796.  
  6797.  
  6798. Test Name:   P000012                        Class Name:  Procedure
  6799. CPU Time:       34.4  microseconds 
  6800. Wall Time:      34.4  microseconds.         Iteration Count:   256
  6801. Test Description:
  6802.  Procedure call and return time measurement
  6803.  Ten composite 'in' parameters 
  6804.  The package body is compiled after the spec is used
  6805.  
  6806.  
  6807.  
  6808. Test Name:   P000013                        Class Name:  Procedure
  6809. CPU Time:       62.9  microseconds 
  6810. Wall Time:      64.5  microseconds.         Iteration Count:   256
  6811. Test Description:
  6812.  Procedure call and return time measurement
  6813.  twenty composite 'in' parameters 
  6814.  The package body is compiled after the spec is used
  6815.  
  6816.  
  6817.  
  6818. Test Name:   T000001                        Class Name:  Tasking
  6819. CPU Time:      207.8  microseconds 
  6820. Wall Time:     214.1  microseconds.         Iteration Count:   64
  6821. Test Description:
  6822.  Minimum rendezvous, entry call and return time 
  6823.  1 task 1 entry 
  6824.  no select 
  6825.  
  6826.  
  6827.  
  6828. Test Name:   T000002                        Class Name:  Tasking
  6829. CPU Time:      207.8  microseconds 
  6830. Wall Time:     207.8  microseconds.         Iteration Count:   64
  6831. Test Description:
  6832.  Task entry call and return time measured
  6833.  One task active, one entry in task, task in a package 
  6834.  no select statement 
  6835.  
  6836.  
  6837.  
  6838. Test Name:   T000003                        Class Name:  Tasking
  6839. CPU Time:      210.9  microseconds 
  6840. Wall Time:     210.9  microseconds.         Iteration Count:   32
  6841. Test Description:
  6842.  Task entry call and return time measured
  6843.  Two tasks active, one entry per task, tasks in a package 
  6844.  no select statement 
  6845.  
  6846.  
  6847.  
  6848. Test Name:   T000004                        Class Name:  Tasking
  6849. CPU Time:      243.8  microseconds 
  6850. Wall Time:     248.4  microseconds.         Iteration Count:   32
  6851. Test Description:
  6852.  Task entry call and return time measured
  6853.  Two tasks active, one entry per task, tasks in a package 
  6854.  no select statement 
  6855.  
  6856.  
  6857.  
  6858. Test Name:   T000005                        Class Name:  Tasking
  6859. CPU Time:      225.0  microseconds 
  6860. Wall Time:     303.7  microseconds.         Iteration Count:   8
  6861. Test Description:
  6862.  Task entry call and return time measured
  6863.  Ten tasks active, one entry per task, tasks in a package 
  6864.  no select statement 
  6865.  
  6866.  
  6867.  
  6868. Test Name:   T000006                        Class Name:  TASKING
  6869. CPU Time:      377.5  microseconds 
  6870. Wall Time:     525.0  microseconds.         Iteration Count:   4
  6871. Test Description:
  6872.  Task entry call and return time measurement
  6873.  1 task  10 entries , task in a package 
  6874.  one select statement 
  6875.  
  6876.  
  6877. $ ADA A000101
  6878. $ ACS LINK A000101
  6879. %ACS-I-CL_LINKING, Invoking the VAX/VMS Linker
  6880. $SET DEFAULT PUSERS:[.SIGADA.TAPE_8_31_86]
  6881. $LINK := ""
  6882. $LINK-
  6883. /NOMAP-
  6884. /EXE=[]A000101-
  6885.     SYS$INPUT:/OPTIONS
  6886.  PUSERS:[.SIGADA.TAPE_8_31_86]A000101.OBJ;1
  6887. %LINK-F-OPENIN, error opening PUSERS:[.SIGADA.TAPE_8_31_86.ADALIB]A000101.OBJ;1 as input
  6888. -RMS-E-FNF, file not found
  6889.          job terminated at 16-NOV-1986 17:12:20.56
  6890.  
  6891.   Accounting information:
  6892.   Buffered I/O count:          286      Peak working set size:   796
  6893.   Direct I/O count:            131      Peak page file size:    4167
  6894.   Page faults:                1223      Mounted volumes:           0
  6895.   Charged CPU time:     0 00:00:02.56   Elapsed time:     0 00:00:06.83
  6896. %ACS-E-CL_ERRDURLIN, Error(s) during LINK
  6897. $ RUN A000101
  6898. %DCL-W-ACTIMAGE, error activating image A000101
  6899. -CLI-E-IMAGEFNF, image file not found $1$DUS230:[.SIGADA.TAPE_8_31_86]A000101.EXE;
  6900. $ ADA A000102
  6901. $ ACS LINK A000102
  6902. %ACS-I-CL_LINKING, Invoking the VAX/VMS Linker
  6903. $SET DEFAULT PUSERS:[.SIGADA.TAPE_8_31_86]
  6904. $LINK := ""
  6905. $LINK-
  6906. /NOMAP-
  6907. /EXE=[]A000102-
  6908.     SYS$INPUT:/OPTIONS
  6909.  PUSERS:[.SIGADA.TAPE_8_31_86]A000102.OBJ;1
  6910. %LINK-F-OPENIN, error opening PUSERS:[.SIGADA.TAPE_8_31_86.ADALIB]TASK_PACK_6.OBJ;1 as input
  6911. -RMS-E-FNF, file not found
  6912.          job terminated at 16-NOV-1986 17:12:39.80
  6913.  
  6914.   Accounting information:
  6915.   Buffered I/O count:          208      Peak working set size:   790
  6916.   Direct I/O count:             28      Peak page file size:    3911
  6917.   Page faults:                 806      Mounted volumes:           0
  6918.   Charged CPU time:     0 00:00:01.78   Elapsed time:     0 00:00:04.76
  6919. %ACS-E-CL_ERRDURLIN, Error(s) during LINK
  6920. $ RUN A000102
  6921. %DCL-W-ACTIMAGE, error activating image A000102
  6922. -CLI-E-IMAGEFNF, image file not found $1$DUS230:[.SIGADA.TAPE_8_31_86]A000102.EXE;
  6923. $ ADA A000103
  6924.  
  6925.     4     with A000049 ; -- must be used with A000043, PIWG_IO to disk
  6926. .............1
  6927. %ADAC-E-CL_UNINOTFOU, (1) Unit A000049 not found in library
  6928.  
  6929.    98       A000049 ; -- write out timing report
  6930. ..........1
  6931. %ADAC-E-NOTDECL, (1) A000049 is not declared [LRM 8.3]
  6932. %ADAC-E-ERRCOMPILE, Error(s) compiling procedure body A000103 in file 
  6933.         PUSERS:[.SIGADA.TAPE_8_31_86]A000103.ADA;5
  6934. %ADAC-E-ENDDIAGS, Ada compilation completed with 2 diagnostics
  6935. $ ACS LINK A000103
  6936. %ACS-E-CL_UNINOTFOU, Unit A000103 not found in library
  6937. $ RUN A000103
  6938.       0.1620 is time in milliseconds for one Dhrystone
  6939.  
  6940. ADA Whetstone benchmark
  6941.  
  6942. A000093 using standard internal math routines
  6943.  
  6944.  
  6945. Whetstone start time:   413.57 seconds
  6946.  
  6947. Whetstone stop time :   417.07 seconds 
  6948.  
  6949. Elapsed time for  10 cycles :     3.50 seconds
  6950.  
  6951. Whetstone rating :        2857 KWIPS
  6952.  
  6953.  
  6954. Whetstone start time:   417.07 seconds
  6955.  
  6956. Whetstone stop time :   424.12 seconds 
  6957.  
  6958. Elapsed time for  20 cycles :     7.05 seconds
  6959.  
  6960. Whetstone rating :        2837 KWIPS
  6961.  
  6962.  
  6963. Whetstone start time:   424.13 seconds
  6964.  
  6965. Whetstone stop time :   434.64 seconds 
  6966.  
  6967. Elapsed time for  30 cycles :    10.51 seconds
  6968.  
  6969. Whetstone rating :        2854 KWIPS
  6970.  
  6971.  
  6972. Whetstone start time:   434.65 seconds
  6973.  
  6974. Whetstone stop time :   448.65 seconds 
  6975.  
  6976. Elapsed time for  40 cycles :    14.00 seconds
  6977.  
  6978. Whetstone rating :        2857 KWIPS
  6979.  
  6980.  
  6981. Whetstone start time:   448.66 seconds
  6982.  
  6983. Whetstone stop time :   466.34 seconds 
  6984.  
  6985. Elapsed time for  50 cycles :    17.68 seconds
  6986.  
  6987. Whetstone rating :        2828 KWIPS
  6988.  
  6989.  
  6990. Average time per cycle :   351.29 milliseconds
  6991.  
  6992.  Average Whetstone rating :        2847 KWIPS
  6993.  
  6994.  
  6995. A000094
  6996.    Perm Towers Queens  Intmm     Mm Puzzle  Quick Bubble   Tree    FFT    Ack
  6997.    0.36   0.61   0.30   0.29   0.40   1.58   0.20   0.32   0.37   0.62  13.73
  6998. A000049 report beginning
  6999. %ADA-F-CONSTRAINT_ERRO, CONSTRAINT_ERROR
  7000. -ADA-I-EXCRAIPRI, Exception raised prior to PC = 0000F76F
  7001. %TRACE-F-TRACEBACK, symbolic stack dump follows
  7002. module name     routine name                     line       rel PC    abs PC
  7003.  
  7004.                                                            0002B497  0002B497
  7005. A000049         A000049                           153      00000231  0000F76F
  7006. A000103         A000103                            98      00000148  0001AE25
  7007. ADA$ELAB_A00010 ADA$ELAB_A000103                           00000009  0000AA09
  7008.                                                            0001AE7A  0001AE7A
  7009.                                                            000276EA  000276EA
  7010. ADA$ELAB_A00010 ADA$ELAB_A000103                           0000001B  0000AA1B
  7011.                                                            0001AE55  0001AE55
  7012. $ ADA A000104
  7013. %ADAC-E-OPENIN, error opening 
  7014.         PUSERS:[.SIGADA.TAPE_8_31_86.ADALIB]ADALIB.ALB; as input
  7015. -RMS-E-FNF, file not found
  7016. %ADAC-F-CL_ERROPELIB, Error opening library for compilation
  7017. %ADAC-F-ENDABORT, Ada compilation aborted
  7018. $ ACS LINK A000104
  7019. %ACS-E-OPENIN, error opening 
  7020.         PUSERS:[.SIGADA.TAPE_8_31_86.ADALIB]ADALIB.ALB; as input
  7021. -RMS-E-FNF, file not found
  7022. $ RUN A000104
  7023. %DCL-W-ACTIMAGE, error activating image A000104
  7024. -CLI-E-IMAGEFNF, image file not found $1$DUS230:[.SIGADA.TAPE_8_31_86]A000104.EXE;
  7025. $ ADA A000105
  7026. %ADAC-E-OPENIN, error opening 
  7027.         PUSERS:[.SIGADA.TAPE_8_31_86.ADALIB]ADALIB.ALB; as input
  7028. -RMS-E-FNF, file not found
  7029. %ADAC-F-CL_ERROPELIB, Error opening library for compilation
  7030. %ADAC-F-ENDABORT, Ada compilation aborted
  7031. $ ACS LINK A000105
  7032. %ACS-E-OPENIN, error opening 
  7033.         PUSERS:[.SIGADA.TAPE_8_31_86.ADALIB]ADALIB.ALB; as input
  7034. -RMS-E-FNF, file not found
  7035. $ RUN A000105
  7036. %DCL-W-ACTIMAGE, error activating image A000105
  7037. -CLI-E-IMAGEFNF, image file not found $1$DUS230:[.SIGADA.TAPE_8_31_86]A000105.EXE;
  7038. $ ADA A000106
  7039. %ADAC-E-OPENIN, error opening 
  7040.         PUSERS:[.SIGADA.TAPE_8_31_86.ADALIB]ADALIB.ALB; as input
  7041. -RMS-E-FNF, file not found
  7042. %ADAC-F-CL_ERROPELIB, Error opening library for compilation
  7043. %ADAC-F-ENDABORT, Ada compilation aborted
  7044. $ ACS LINK A000106
  7045. %ACS-E-OPENIN, error opening 
  7046.         PUSERS:[.SIGADA.TAPE_8_31_86.ADALIB]ADALIB.ALB; as input
  7047. -RMS-E-FNF, file not found
  7048. $ RUN A000106
  7049. %DCL-W-ACTIMAGE, error activating image A000106
  7050. -CLI-E-IMAGEFNF, image file not found $1$DUS230:[.SIGADA.TAPE_8_31_86]A000106.EXE;
  7051. $ ADA A000107
  7052. %ADAC-E-OPENIN, error opening 
  7053.         PUSERS:[.SIGADA.TAPE_8_31_86.ADALIB]ADALIB.ALB; as input
  7054. -RMS-E-FNF, file not found
  7055. %ADAC-F-CL_ERROPELIB, Error opening library for compilation
  7056. %ADAC-F-ENDABORT, Ada compilation aborted
  7057. $ ACS LINK A000107
  7058. %ACS-E-OPENIN, error opening 
  7059.         PUSERS:[.SIGADA.TAPE_8_31_86.ADALIB]ADALIB.ALB; as input
  7060. -RMS-E-FNF, file not found
  7061. $ RUN A000107
  7062. %DCL-W-ACTIMAGE, error activating image A000107
  7063. -CLI-E-IMAGEFNF, image file not found $1$DUS230:[.SIGADA.TAPE_8_31_86]A000107.EXE;
  7064.          job terminated at 16-NOV-1986 18:08:07.84
  7065.  
  7066.   Accounting information:
  7067.   Buffered I/O count:         8621      Peak working set size:  4062
  7068.   Direct I/O count:          12411      Peak page file size:    4741
  7069.   Page faults:              178888      Mounted volumes:           0
  7070.   Charged CPU time:     0 00:31:36.41   Elapsed time:     0 01:09:35.21
  7071. ::::::::::
  7072. COPY.COM
  7073. ::::::::::
  7074. $ INIT MUA0: PIWG
  7075. $ MOUNT MUA0: PIWG TAPE:
  7076. $ COPY/LOG A000001.ADA TAPE:*.*
  7077. $ COPY/LOG A000002.ADA TAPE:*.*
  7078. $ COPY/LOG A000011.ADA TAPE:*.*
  7079. $ COPY/LOG A000012.ADA TAPE:*.*
  7080. $ COPY/LOG A000013.ADA TAPE:*.*
  7081. $ COPY/LOG A000014.ADA TAPE:*.*
  7082. $ COPY/LOG A000015.ADA TAPE:*.*
  7083. $ COPY/LOG A000016.ADA TAPE:*.*
  7084. $ COPY/LOG A000021.ADA TAPE:*.*
  7085. $ COPY/LOG A000022.ADA TAPE:*.*
  7086. $ COPY/LOG A000031.ADA TAPE:*.*
  7087. $ COPY/LOG A000032.ADA TAPE:*.*
  7088. $ COPY/LOG A000033.ADA TAPE:*.*
  7089. $ COPY/LOG A000041.ADA TAPE:*.*
  7090. $ COPY/LOG A000042.ADA TAPE:*.*
  7091. $ COPY/LOG A000043.ADA TAPE:*.*
  7092. $ COPY/LOG A000044.ADA TAPE:*.*
  7093. $ COPY/LOG A000049.ADA TAPE:*.*
  7094. $ COPY/LOG A000051.ADA TAPE:*.*
  7095. $ COPY/LOG A000052.ADA TAPE:*.*
  7096. $ COPY/LOG A000053.ADA TAPE:*.*
  7097. $ COPY/LOG A000054.ADA TAPE:*.*
  7098. $ COPY/LOG A000055.ADA TAPE:*.*
  7099. $ COPY/LOG A000091.ADA TAPE:*.*
  7100. $ COPY/LOG A000092.ADA TAPE:*.*
  7101. $ COPY/LOG A000093.ADA TAPE:*.*
  7102. $ COPY/LOG A000094.ADA TAPE:*.*
  7103. $ COPY/LOG A000098.ADA TAPE:*.*
  7104. $ COPY/LOG A000099.ADA TAPE:*.*
  7105. $ COPY/LOG A000100.ADA TAPE:*.*
  7106. $ COPY/LOG A000101.ADA TAPE:*.*
  7107. $ COPY/LOG A000102.ADA TAPE:*.*
  7108. $ COPY/LOG A000103.ADA TAPE:*.*
  7109. $ COPY/LOG A000104.ADA TAPE:*.*
  7110. $ COPY/LOG A000105.ADA TAPE:*.*
  7111. $ COPY/LOG A000106.ADA TAPE:*.*
  7112. $ COPY/LOG A000107.ADA TAPE:*.*
  7113. $ COPY/LOG ACOMPILE.CLI TAPE:*.*
  7114. $ COPY/LOG ACOMPILE.COM TAPE:*.*
  7115. $ COPY/LOG ACOMPILE.LOGR1000 TAPE:ACOMPILE.LR1
  7116. $ COPY/LOG C000001.ADA TAPE:*.*
  7117. $ COPY/LOG C000002.ADA TAPE:*.*
  7118. $ COPY/LOG C000003.ADA TAPE:*.*
  7119. $ COPY/LOG COMPILE.CLI TAPE:*.*
  7120. $ COPY/LOG COMPILE.COM TAPE:*.*
  7121. $ COPY/LOG COMPILE.LOG780 TAPE:COMPILE.L78
  7122. $ COPY/LOG COMPILE.LOG8650 TAPE:COMPILE.L86
  7123. $ COPY/LOG COPY.COM TAPE:*.*
  7124. $ COPY/LOG COPY.R1000 TAPE:COPY.R10
  7125. $ COPY/LOG D000001.ADA TAPE:*.*
  7126. $ COPY/LOG D000002.ADA TAPE:*.*
  7127. $ COPY/LOG D000003.ADA TAPE:*.*
  7128. $ COPY/LOG D000004.ADA TAPE:*.*
  7129. $ COPY/LOG E000001.ADA TAPE:*.*
  7130. $ COPY/LOG E000002.ADA TAPE:*.*
  7131. $ COPY/LOG E000004.ADA TAPE:*.*
  7132. $ COPY/LOG F000001.ADA TAPE:*.*
  7133. $ COPY/LOG F000002.ADA TAPE:*.*
  7134. $ COPY/LOG G000001.ADA TAPE:*.*
  7135. $ COPY/LOG G000002.ADA TAPE:*.*
  7136. $ COPY/LOG G000003.ADA TAPE:*.*
  7137. $ COPY/LOG G000004.ADA TAPE:*.*
  7138. $ COPY/LOG G000005.ADA TAPE:*.*
  7139. $ COPY/LOG G000006.ADA TAPE:*.*
  7140. $ COPY/LOG G000007.ADA TAPE:*.*
  7141. $ COPY/LOG L000001.ADA TAPE:*.*
  7142. $ COPY/LOG L000002.ADA TAPE:*.*
  7143. $ COPY/LOG L000003.ADA TAPE:*.*
  7144. $ COPY/LOG P000001.ADA TAPE:*.*
  7145. $ COPY/LOG P000002.ADA TAPE:*.*
  7146. $ COPY/LOG P000003.ADA TAPE:*.*
  7147. $ COPY/LOG P000004.ADA TAPE:*.*
  7148. $ COPY/LOG P000005.ADA TAPE:*.*
  7149. $ COPY/LOG P000006.ADA TAPE:*.*
  7150. $ COPY/LOG P000007.ADA TAPE:*.*
  7151. $ COPY/LOG P000010.ADA TAPE:*.*
  7152. $ COPY/LOG P000011.ADA TAPE:*.*
  7153. $ COPY/LOG P000012.ADA TAPE:*.*
  7154. $ COPY/LOG P000013.ADA TAPE:*.*
  7155. $ COPY/LOG READ.ME TAPE:*.*
  7156. $ COPY/LOG T000001.ADA TAPE:*.*
  7157. $ COPY/LOG T000002.ADA TAPE:*.*
  7158. $ COPY/LOG T000003.ADA TAPE:*.*
  7159. $ COPY/LOG T000004.ADA TAPE:*.*
  7160. $ COPY/LOG T000005.ADA TAPE:*.*
  7161. $ COPY/LOG T000006.ADA TAPE:*.*
  7162. $ COPY/LOG T000007.ADA TAPE:*.*
  7163. $ COPY/LOG TAPE_DIST.LTR TAPE:TAPEDIST.LTR
  7164. $ COPY/LOG WCOMPILE.COM TAPE:*.*
  7165. $ COPY/LOG Z000001.ADA TAPE:*.*
  7166. $ COPY/LOG Z000002.ADA TAPE:*.*
  7167. $ COPY/LOG Z000003.ADA TAPE:*.*
  7168. $ COPY/LOG Z000004.ADA TAPE:*.*
  7169. $ COPY/LOG Z000005.ADA TAPE:*.*
  7170. $ COPY/LOG Z000006.ADA TAPE:*.*
  7171. $ COPY/LOG Z000007.ADA TAPE:*.*
  7172. $ COPY/LOG Z000008.ADA TAPE:*.*
  7173. $ COPY/LOG Z000009.ADA TAPE:*.*
  7174. $ COPY/LOG Z000010.ADA TAPE:*.*
  7175. $ COPY/LOG Z000011.ADA TAPE:*.*
  7176. $ COPY/LOG Z000012.ADA TAPE:*.*
  7177. $ COPY/LOG Z000013.ADA TAPE:*.*
  7178. $ COPY/LOG Z000014.ADA TAPE:*.*
  7179. $ COPY/LOG Z000015.ADA TAPE:*.*
  7180. $ COPY/LOG Z000016.ADA TAPE:*.*
  7181. $ COPY/LOG Z000016A.ADA TAPE:*.*
  7182. $ COPY/LOG Z000017.ADA TAPE:*.*
  7183. $ COPY/LOG Z000017A.ADA TAPE:*.*
  7184. $ COPY/LOG Z000018.ADA TAPE:*.*
  7185. $ COPY/LOG Z000020.ADA TAPE:*.*
  7186. $ COPY/LOG Z000021.ADA TAPE:*.*
  7187. $ COPY/LOG Z000022.ADA TAPE:*.*
  7188. $ COPY/LOG Z000023.ADA TAPE:*.*
  7189. $ COPY/LOG Z000110.ADA TAPE:*.*
  7190. $ COPY/LOG Z000111.ADA TAPE:*.*
  7191. $ COPY/LOG Z000111.COM TAPE:*.*
  7192. $ COPY/LOG Z000111D.CLI TAPE:*.*
  7193. $ COPY/LOG Z000111D.COM TAPE:*.*
  7194. $ COPY/LOG Z000111D.LOG8650 TAPE:Z00011D.L86
  7195. $ COPY/LOG Z000112.ADA TAPE:*.*
  7196. $ COPY/LOG Z000113.ADA TAPE:*.*
  7197. $ COPY/LOG Z000114.ADA TAPE:*.*
  7198. $ COPY/LOG Z000121.ADA TAPE:*.*
  7199. $ COPY/LOG Z000122.ADA TAPE:*.*
  7200. $ COPY/LOG Z000123.ADA TAPE:*.*
  7201. $ COPY/LOG Z000124.ADA TAPE:*.*
  7202. $ COPY/LOG Z000131.ADA TAPE:*.*
  7203. $ COPY/LOG Z000132.ADA TAPE:*.*
  7204. $ COPY/LOG Z000133.ADA TAPE:*.*
  7205. $ COPY/LOG Z000134.ADA TAPE:*.*
  7206. $ COPY/LOG Z000141.ADA TAPE:*.*
  7207. $ COPY/LOG Z000142.ADA TAPE:*.*
  7208. $ COPY/LOG Z000143.ADA TAPE:*.*
  7209. $ COPY/LOG Z000151.ADA TAPE:*.*
  7210. $ COPY/LOG Z000152.ADA TAPE:*.*
  7211. $ COPY/LOG Z000153.ADA TAPE:*.*
  7212. $ COPY/LOG Z000161.ADA TAPE:*.*
  7213. $ COPY/LOG Z000162.ADA TAPE:*.*
  7214. $ COPY/LOG Z000171.ADA TAPE:*.*
  7215. $ COPY/LOG Z000172.ADA TAPE:*.*
  7216. $ COPY/LOG Z000173.ADA TAPE:*.*
  7217. $ COPY/LOG Z000181.ADA TAPE:*.*
  7218. $ COPY/LOG Z000182.ADA TAPE:*.*
  7219. $ COPY/LOG Z000183.ADA TAPE:*.*
  7220. $ COPY/LOG Z000184.ADA TAPE:*.*
  7221. $ COPY/LOG Z000191.ADA TAPE:*.*
  7222. $ COPY/LOG Z000192.ADA TAPE:*.*
  7223. $ COPY/LOG Z000193.ADA TAPE:*.*
  7224. $ COPY/LOG Z000201.ADA TAPE:*.*
  7225. $ COPY/LOG Z000202.ADA TAPE:*.*
  7226. $ COPY/LOG Z000203.ADA TAPE:*.*
  7227. $ COPY/LOG Z000211.ADA TAPE:*.*
  7228. $ COPY/LOG Z000212.ADA TAPE:*.*
  7229. $ COPY/LOG Z000213.ADA TAPE:*.*
  7230. $ COPY/LOG Z000221.ADA TAPE:*.*
  7231. $ COPY/LOG Z000222.ADA TAPE:*.*
  7232. $ COPY/LOG Z000223.ADA TAPE:*.*
  7233. $ COPY/LOG Z000224.ADA TAPE:*.*
  7234. $ COPY/LOG Z000231.ADA TAPE:*.*
  7235. $ COPY/LOG Z000232.ADA TAPE:*.*
  7236. $ COPY/LOG Z000233.ADA TAPE:*.*
  7237. $ COPY/LOG Z000234.ADA TAPE:*.*
  7238. $ COPY/LOG Z000241.ADA TAPE:*.*
  7239. $ COPY/LOG Z000242.ADA TAPE:*.*
  7240. $ COPY/LOG Z000243.ADA TAPE:*.*
  7241. $ COPY/LOG Z000244.ADA TAPE:*.*
  7242. $ COPY/LOG Z000254.ADA TAPE:*.*
  7243. $ COPY/LOG Z000264.ADA TAPE:*.*
  7244. $ COPY/LOG Z000274.ADA TAPE:*.*
  7245. $ COPY/LOG Z000281.ADA TAPE:*.*
  7246. $ COPY/LOG Z000282.ADA TAPE:*.*
  7247. $ COPY/LOG Z000283.ADA TAPE:*.*
  7248. $ COPY/LOG Z000284.ADA TAPE:*.*
  7249. $ COPY/LOG Z000291.ADA TAPE:*.*
  7250. $ COPY/LOG Z000292.ADA TAPE:*.*
  7251. $ COPY/LOG Z000293.ADA TAPE:*.*
  7252. $ COPY/LOG Z000294.ADA TAPE:*.*
  7253. $ COPY/LOG Z000295.ADA TAPE:*.*
  7254. $ COPY/LOG Z000301.ADA TAPE:*.*
  7255. $ COPY/LOG Z000302.ADA TAPE:*.*
  7256. $ COPY/LOG Z000303.ADA TAPE:*.*
  7257. $ COPY/LOG Z000304.ADA TAPE:*.*
  7258. $ COPY/LOG Z000311.ADA TAPE:*.*
  7259. $ COPY/LOG Z000312.ADA TAPE:*.*
  7260. $ COPY/LOG Z000313.ADA TAPE:*.*
  7261. $ COPY/LOG Z000314.ADA TAPE:*.*
  7262. $ COPY/LOG Z000315.ADA TAPE:*.*
  7263. $ COPY/LOG ZCOMPILE.CLI TAPE:*.*
  7264. $ COPY/LOG ZCOMPILE.COM TAPE:*.*
  7265. $ COPY/LOG ZCOMPILE.ICC TAPE:*.*
  7266. $ COPY/LOG ZCOMPILE.LOG8650 TAPE:ZCOMPILE.L86
  7267. $ DISMOUNT MUA0: 
  7268. ::::::::::
  7269. COPY.R10
  7270. ::::::::::
  7271. These are the files that should be kept ( or copied to an Rational R1000 )
  7272. Running a COMPILATION.PARSE on all files below should work.
  7273. Running a COMPILATION.MAKE on A000100 should work
  7274.  
  7275. A000001.ADA
  7276. A000015.ADA
  7277. A000021.ADA
  7278. A000022.ADA
  7279. A000031.ADA
  7280. A000032.ADA
  7281. A000041.ADA
  7282. A000042.ADA
  7283. A000051.ADA
  7284. A000052.ADA
  7285. A000053.ADA
  7286. A000054.ADA
  7287. A000055.ADA
  7288. A000091.ADA
  7289. A000093.ADA
  7290. A000094.ADA
  7291. A000100.ADA
  7292. C000001.ADA
  7293. C000002.ADA
  7294. C000003.ADA
  7295. D000001.ADA
  7296. D000002.ADA
  7297. D000003.ADA
  7298. D000004.ADA
  7299. E000001.ADA
  7300. E000002.ADA
  7301. E000004.ADA
  7302. F000001.ADA
  7303. F000002.ADA
  7304. G000001.ADA
  7305. G000002.ADA
  7306. G000003.ADA
  7307. G000004.ADA
  7308. G000005.ADA
  7309. G000006.ADA
  7310. G000007.ADA
  7311. L000001.ADA
  7312. L000002.ADA
  7313. L000003.ADA
  7314. P000001.ADA
  7315. P000002.ADA
  7316. P000003.ADA
  7317. P000004.ADA
  7318. P000005.ADA
  7319. P000006.ADA
  7320. P000007.ADA
  7321. P000010.ADA
  7322. P000011.ADA
  7323. P000012.ADA
  7324. P000013.ADA
  7325. T000001.ADA
  7326. T000002.ADA
  7327. T000003.ADA
  7328. T000004.ADA
  7329. T000005.ADA
  7330. T000006.ADA
  7331. Z000001.ADA
  7332. Z000002.ADA
  7333. Z000003.ADA
  7334. Z000004.ADA
  7335. Z000005.ADA
  7336. Z000006.ADA
  7337. Z000007.ADA
  7338. Z000008.ADA
  7339. Z000009.ADA
  7340. Z000010.ADA
  7341. Z000011.ADA
  7342. Z000012.ADA
  7343. Z000013.ADA
  7344. Z000014.ADA
  7345. Z000015.ADA
  7346. Z000016.ADA
  7347. Z000016A.ADA
  7348. Z000017.ADA
  7349. Z000017A.ADA
  7350. Z000018.ADA
  7351. Z000020.ADA
  7352. Z000021.ADA
  7353. Z000022.ADA
  7354. Z000023.ADA
  7355. Z000110.ADA
  7356. Z000111.ADA
  7357. Z000112.ADA
  7358. Z000113.ADA
  7359. Z000114.ADA
  7360. Z000121.ADA
  7361. Z000122.ADA
  7362. Z000123.ADA
  7363. Z000124.ADA
  7364. Z000131.ADA
  7365. Z000132.ADA
  7366. Z000133.ADA
  7367. Z000134.ADA
  7368. Z000141.ADA
  7369. Z000142.ADA
  7370. Z000143.ADA
  7371. Z000151.ADA
  7372. Z000152.ADA
  7373. Z000153.ADA
  7374. Z000161.ADA
  7375. Z000162.ADA
  7376. Z000171.ADA
  7377. Z000172.ADA
  7378. Z000173.ADA
  7379. Z000181.ADA
  7380. Z000182.ADA
  7381. Z000183.ADA
  7382. Z000184.ADA
  7383. Z000191.ADA
  7384. Z000192.ADA
  7385. Z000193.ADA
  7386. Z000201.ADA
  7387. Z000202.ADA
  7388. Z000203.ADA
  7389. Z000211.ADA
  7390. Z000212.ADA
  7391. Z000213.ADA
  7392. Z000221.ADA
  7393. Z000222.ADA
  7394. Z000223.ADA
  7395. Z000224.ADA
  7396. Z000231.ADA
  7397. Z000232.ADA
  7398. Z000233.ADA
  7399. Z000234.ADA
  7400. Z000241.ADA
  7401. Z000242.ADA
  7402. Z000243.ADA
  7403. Z000244.ADA
  7404. Z000254.ADA
  7405. Z000264.ADA
  7406. Z000274.ADA
  7407. Z000281.ADA
  7408. Z000282.ADA
  7409. Z000283.ADA
  7410. Z000284.ADA
  7411. Z000291.ADA
  7412. Z000292.ADA
  7413. Z000293.ADA
  7414. Z000294.ADA
  7415. Z000295.ADA
  7416. Z000301.ADA
  7417. Z000302.ADA
  7418. Z000303.ADA
  7419. Z000304.ADA
  7420. Z000311.ADA
  7421. Z000312.ADA
  7422. Z000313.ADA
  7423. Z000314.ADA
  7424. Z000315.ADA
  7425.