provide a package startup script for curl, which sets CURL_CA_BUNDLE to the common...
[AROS-Contrib.git] / regina / demo / rexxcps.rexx
blob3634d79ae480116f585936a013104783dbb3fb23
1 /* ReXX */
2 /* Take a measure of REXX clauses-per-second (CPS) */
3 /* Mike Cowlishaw (mfc@ibm.com). Multi-platform. */
4 /* 1.0 17 Jan 89 Original version */
5 /* 2.0 3 Jun 89 Remove attempt to simulate commands */
6 /* 2.1 7 Oct 89 Remove use of not symbols, and correct commentary */
7 /* 2.2 31 Mar 00 Allow measures/iterations/tracevar to be passed on*/
8 /* command line. mhes */
9 rexxcps=2.2 /* REXXCPS version; quotable only if code unchanged */
11 /* This measure of REXX execution speed is based on an analysis of */
12 /* the dynamic mix of clauses found in a (subjectively chosen) */
13 /* collection of REXX programs (including commands, macros, and */
14 /* personal programs). Approximately 2,500,000 lines of trace */
15 /* output were analysed, and the program below recreates the */
16 /* dynamic mix of constructs found in that analysis. */
17 /* In view of the dramatic differences between systems in their */
18 /* efficiency of issuing commands, the timed loop does not issue */
19 /* commands (an 'RC=expression; PARSE' sequence is used instead). */
20 /* This program therefore measures the performance of a REXX */
21 /* implementation, exclusive of command execution overhead. */
22 /* Elapsed (user-perceived) time is used, rather than any form of */
23 /* virtual time. */
25 Parse Arg averaging count tracevar
26 if averaging = '' Then averaging = 10 /* Averaging-over count */
27 if count = '' Then count = 30 /* Repetition count */
28 if tracevar = '' then tracevar = 'Off' /* Trace setting (for development use) */
29 signal on novalue
30 parse source source 1 system .
31 parse version version
34 say '----- REXXCPS' rexxcps '-- Measuring REXX clauses/second -----'
35 say ' REXX version is:' version
36 say ' System is:' system
37 say ' Averaging:' averaging 'measures of' count 'iterations'
39 /* ----- Calibrate for the empty do-loop (average of 5) ----- */
40 empty=0
41 do i=1 to averaging
42 call time 'R'
43 do count; end
44 empty=time('R')+empty
45 end
46 empty=empty/averaging
48 noterm=(system='CMS'); if pos('O',tracevar)=1 then noterm=0
49 if noterm then do
50 say 'Calibration (empty DO):' empty 'secs (average of' averaging')'
51 say 'Spooling trace NOTERM'
52 'CP SPOOL CON * START NOTERM'; 'CP CLOSE CON PUR'
53 end
55 /* Now the true timer loop .. average timing again */
56 full=0
57 do i=1 to averaging
58 trace value tracevar
59 call time 'R'
60 do count;
61 /* ----- This is first of the 1000 clauses ----- */
62 flag=0; p0='b'
63 do loop=1 to 14
64 /* This is the "block" comment in loop */
65 key1='Key Bee'
66 acompound.key1.loop=substr(1234"5678",6,2)
67 if flag=acompound.key1.loop then say 'Failed1'
68 do j=1.1 to 2.2 by 1.1 /* executed 28 times */
69 if j>acompound.key1.loop then say 'Failed2'
70 if 17<length(j)-1 then say 'Failed3'
71 if j='foobar' then say 'Failed4'
72 if substr(1234,1,1)=9 then say 'Failed5'
73 if word(key1,1)='?' then say 'Failed6'
74 if j<5 then do /* This path taken */
75 acompound.key1.loop=acompound.key1.loop+1
76 if j=2 then leave
77 end
78 iterate
79 end /* j */
80 avar.=1.0''loop
81 select
82 when flag='string' then say 'FailedS1'
83 when avar.flag.2=0 then say 'FailedS2'
84 when flag=5+99.7 then say 'FailedS3'
85 when flag then avar.1.2=avar.1.2*1.1
86 when flag==0 then flag=0
87 end
88 if 1 then flag=1
89 select
90 when flag=='ring' then say 'FailedT1'
91 when avar.flag.3=0 then say 'FailedT2'
92 when flag then avar.1.2=avar.1.2*1.1
93 when flag==0 then flag=1
94 end
95 parse value 'Foo Bar' with v1 +5 v2 .
96 trace value trace(); address value address()
97 call subroutine 'with' 2 'args', '(This is the second)'1''1
98 rc='This is an awfully boring program'; parse var rc p1 (p0) p5
99 rc='is an awfully boring program This'; parse var rc p2 (p0) p6
100 rc='an awfully boring program This is'; parse var rc p3 (p0) p7
101 rc='awfully boring program This is an'; parse var rc p4 (p0) p8
102 end loop
103 /* ----- This is last of the 1000 clauses ----- */
105 full=time('R')+full
106 trace off
108 full=full/averaging
109 if noterm then do
110 'CP CLOSE CON'; 'CP SPOOL CON * START TERM'
111 say 'Spooling now back on TERM'
112 end
114 /* Now display the statistics */
115 looptime=(full-empty)/count
117 /* Developer's statistics: */
118 if left(tracevar,1)='O' then nop; else do
120 say 'Total (full DO):' full-empty 'secs (average of' averaging ,
121 'measures of' count 'iterations)'
122 say 'Time for one iteration (1000 clauses) was:' looptime 'seconds'
124 /* And finally, the Result... */
126 if looptime = 0 Then do
127 say ' The granularity of the system clock appears to be too coarse to'
128 say ' obtain an effective result. Re-run this progam and increase the'
129 say ' number of iterations or the repeat count.'
131 else do
133 say' Performance:' format(1000/looptime,,0) 'REXX clauses per second'
137 exit
140 /* Target routine for the timed CALL - called 14 times */
141 subroutine:
142 parse upper arg a1 a2 a3 ., a4
143 parse var a3 b1 b2 b3 .
144 do 1; rc=a1 a2 a3; parse var rc c1 c2 c3; end
145 return
147 novalue: if noterm then 'CP SP CON STOP TERM'
148 say 'novalue triggered'
149 /* -- end of program -- */