|
|
1.1 root 1: c comment section
2: c
3: c fm004
4: c
5: c this routine contains basic arithmetic if statement tests.
6: c the statement format is
7: c if (e) k1, k2, k3
8: c where e is a simple integer expression of form
9: c variable - constant
10: c variable + constant
11: c and k1, k2 and k3 are statement labels. only the statements in
12: c the basic assumptions are included in these tests.
13: c execution of an if statement causes evaluation of the
14: c expression e following which the statement label k1, k2 or k3
15: c is executed next as the value of e is less than zero, zero, or
16: c greater than zero, respectively.
17: c
18: c the basic unconditional go to statement is tested in this
19: c routine. the statement is of the form
20: c go to k
21: c where k is a statement label.
22: c execution of an unconditional go to statement causes the
23: c statement identified by statement label k to be executed next.
24: c
25: c references
26: c american national standard programming language fortran,
27: c x3.9-1978
28: c
29: c section 3.6, normal execution sequence and transfer of control
30: c section 11.1, go to statement
31: c section 11.4, arithmetic if statement
32: c
33: c **********************************************************
34: c
35: c a compiler validation system for the fortran language
36: c based on specifications as defined in american national standard
37: c programming language fortran x3.9-1978, has been developed by the
38: c federal cobol compiler testing service. the fortran compiler
39: c validation system (fcvs) consists of audit routines, their related
40: c data, and an executive system. each audit routine is a fortran
41: c program, subprogram or function which includes tests of specific
42: c language elements and supporting procedures indicating the result
43: c of executing these tests.
44: c
45: c this particular program/subprogram/function contains features
46: c found only in the subset as defined in x3.9-1978.
47: c
48: c suggestions and comments should be forwarded to -
49: c
50: c department of the navy
51: c federal cobol compiler testing service
52: c washington, d.c. 20376
53: c
54: c **********************************************************
55: c
56: c
57: c
58: c initialization section
59: c
60: c initialize constants
61: c **************
62: c i01 contains the logical unit number for the card reader.
63: i01 = 5
64: c i02 contains the logical unit number for the printer.
65: i02 = 6
66: c system environment section
67: c
68: cx010 this card is replaced by contents of fexec x-010 control card.
69: c the cx010 card is for overriding the program default i01 = 5
70: c (unit number for card reader).
71: cx011 this card is replaced by contents of fexec x-011 control card.
72: c the cx011 card is for systems which require additional
73: c fortran statements for files associated with cx010 above.
74: c
75: cx020 this card is replaced by contents of fexec x-020 control card.
76: c the cx020 card is for overriding the program default i02 = 6
77: c (unit number for printer).
78: cx021 this card is replaced by contents of fexec x-021 control card.
79: c the cx021 card is for systems which require additional
80: c fortran statements for files associated with cx020 above.
81: c
82: ivpass=0
83: ivfail=0
84: ivdele=0
85: iczero=0
86: c
87: c write page headers
88: write (i02,90000)
89: write (i02,90001)
90: write (i02,90002)
91: write (i02, 90002)
92: write (i02,90003)
93: write (i02,90002)
94: write (i02,90004)
95: write (i02,90002)
96: write (i02,90011)
97: write (i02,90002)
98: write (i02,90002)
99: write (i02,90005)
100: write (i02,90006)
101: write (i02,90002)
102: c test section
103: c
104: c tests 21, 22, and 23 contain the same if statement but the
105: c expected branch is to the first, second or third statement label
106: c as the integer expression is less than zero, equal to zero, or
107: c greater than zero respectively.
108: c
109: 211 continue
110: ivtnum = 21
111: c
112: c **** test 021 ****
113: c test 21 - arithmetic if statement test
114: c less than zero branch expected.
115: c
116: if (iczero) 30210, 210, 30210
117: 210 continue
118: ivon01=2
119: if (ivon01 - 3) 212,213,214
120: 212 ivon02 = -1
121: go to 40210
122: 213 ivon02 = 0
123: go to 40210
124: 214 ivon02 = 1
125: go to 40210
126: 30210 ivdele = ivdele + 1
127: write (i02,80003) ivtnum
128: if (iczero) 40210, 221, 40210
129: 40210 if (ivon02) 10210, 20210, 20210
130: 10210 ivpass = ivpass + 1
131: write (i02,80001) ivtnum
132: go to 221
133: 20210 ivfail = ivfail + 1
134: ivcomp=ivon02
135: ivcorr=-1
136: write (i02,80004) ivtnum, ivcomp ,ivcorr
137: 221 continue
138: ivtnum = 22
139: c
140: c **** test 022 ****
141: c test 22 - arithmetic if statement test
142: c equal to zero branch expected
143: c
144: if (iczero) 30220, 220, 30220
145: 220 continue
146: ivon01 = 3
147: if (ivon01 - 3) 222,223,224
148: 222 ivon02 = -1
149: go to 40220
150: 223 ivon02 = 0
151: go to 40220
152: 224 ivon02 = 1
153: go to 40220
154: 30220 ivdele = ivdele + 1
155: write (i02,80003) ivtnum
156: if (iczero) 40220, 231, 40220
157: 40220 if (ivon02) 20220, 10220, 20220
158: 10220 ivpass = ivpass + 1
159: write (i02,80001) ivtnum
160: go to 231
161: 20220 ivfail = ivfail + 1
162: ivcomp=ivon02
163: ivcorr= 0
164: write (i02,80004) ivtnum, ivcomp ,ivcorr
165: 231 continue
166: ivtnum = 23
167: c
168: c **** test 023 ****
169: c test 23 - arithmetic if statement test
170: c greater than zero branch expected
171: c
172: if (iczero) 30230, 230, 30230
173: 230 continue
174: ivon01 = 4
175: if (ivon01 - 3) 232,233,234
176: 232 ivon02 = -1
177: go to 40230
178: 233 ivon02 = 0
179: go to 40230
180: 234 ivon02 = 1
181: go to 40230
182: 30230 ivdele = ivdele + 1
183: write (i02,80003) ivtnum
184: if (iczero) 40230, 241, 40230
185: 40230 if (ivon02) 20230, 20230, 10230
186: 10230 ivpass = ivpass + 1
187: write (i02,80001) ivtnum
188: go to 241
189: 20230 ivfail = ivfail + 1
190: ivcomp=ivon02
191: ivcorr = 1
192: write (i02,80004) ivtnum, ivcomp ,ivcorr
193: c
194: c tests 24 through 29 contain an if statement with two of the
195: c three branch statement labels equal.
196: c
197: 241 continue
198: ivtnum = 24
199: c
200: c **** test 024 ****
201: c test 24 - arithmetic if statement test
202: c less than zero branch expected
203: c
204: if (iczero) 30240, 240, 30240
205: 240 continue
206: ivon01=2
207: if (ivon01 - 3) 242,243,242
208: 242 ivon02=-1
209: go to 40240
210: 243 ivon02=0
211: go to 40240
212: 30240 ivdele = ivdele + 1
213: write (i02,80003) ivtnum
214: if (iczero) 40240, 251, 40240
215: 40240 if (ivon02) 10240, 20240, 20240
216: 10240 ivpass = ivpass + 1
217: write (i02,80001) ivtnum
218: go to 251
219: 20240 ivfail = ivfail + 1
220: ivcomp=ivon02
221: ivcorr=-1
222: write (i02,80004) ivtnum, ivcomp ,ivcorr
223: 251 continue
224: ivtnum = 25
225: c
226: c **** test 025 ****
227: c test 25 - arithmetic if statement test
228: c equal to zero branch expected
229: c
230: if (iczero) 30250, 250, 30250
231: 250 continue
232: ivon01=3
233: if (ivon01 - 3) 252,253,252
234: 252 ivon02= -1
235: go to 40250
236: 253 ivon02 = 0
237: go to 40250
238: 30250 ivdele = ivdele + 1
239: write (i02,80003) ivtnum
240: if (iczero) 40250, 261, 40250
241: 40250 if (ivon02) 20250,10250,20250
242: 10250 ivpass = ivpass + 1
243: write (i02,80001) ivtnum
244: go to 261
245: 20250 ivfail = ivfail + 1
246: ivcomp=ivon02
247: ivcorr=0
248: write (i02,80004) ivtnum, ivcomp ,ivcorr
249: 261 continue
250: ivtnum = 26
251: c
252: c **** test 026 ****
253: c test 26 - arithmetic if statement test
254: c greater than zero branch expected
255: c
256: if (iczero) 30260, 260, 30260
257: 260 continue
258: ivon01=4
259: if (ivon01-3) 262, 263, 262
260: 262 ivon02= 1
261: go to 40260
262: 263 ivon02 = 0
263: go to 40260
264: 30260 ivdele = ivdele + 1
265: write (i02,80003) ivtnum
266: if (iczero) 40260, 271, 40260
267: 40260 if (ivon02) 20260, 20260, 10260
268: 10260 ivpass = ivpass + 1
269: write (i02,80001) ivtnum
270: go to 271
271: 20260 ivfail = ivfail + 1
272: ivcomp=ivon02
273: ivcorr = 1
274: write (i02,80004) ivtnum, ivcomp ,ivcorr
275: 271 continue
276: ivtnum = 27
277: c
278: c **** test 027 ****
279: c test 27 - arithmetic if statement test
280: c less than zero branch expected
281: c
282: if (iczero) 30270, 270, 30270
283: 270 continue
284: ivon01 = -4
285: if (ivon01 + 3) 272, 272, 273
286: 272 ivon02= -1
287: go to 40270
288: 273 ivon02 = 1
289: go to 40270
290: 30270 ivdele = ivdele + 1
291: write (i02,80003) ivtnum
292: if (iczero) 40270, 281, 40270
293: 40270 if (ivon02) 10270, 20270, 20270
294: 10270 ivpass = ivpass + 1
295: write (i02,80001) ivtnum
296: go to 281
297: 20270 ivfail = ivfail + 1
298: ivcomp=ivon02
299: ivcorr= -1
300: write (i02,80004) ivtnum, ivcomp ,ivcorr
301: 281 continue
302: ivtnum = 28
303: c
304: c **** test 028 ****
305: c test 28 - arithmetic if statement test
306: c equal to zero branch expected
307: c
308: if (iczero) 30280, 280, 30280
309: 280 continue
310: ivon01 = -3
311: if (ivon01 + 3) 282, 282, 283
312: 282 ivon02 = 0
313: go to 40280
314: 283 ivon02 = 1
315: go to 40280
316: 30280 ivdele = ivdele + 1
317: write (i02,80003) ivtnum
318: if (iczero) 40280, 291, 40280
319: 40280 if (ivon02) 20280, 10280, 20280
320: 10280 ivpass = ivpass + 1
321: write (i02,80001) ivtnum
322: go to 291
323: 20280 ivfail = ivfail + 1
324: ivcomp=ivon02
325: ivcorr= 0
326: write (i02,80004) ivtnum, ivcomp ,ivcorr
327: 291 continue
328: ivtnum = 29
329: c
330: c **** test 029 ****
331: c test 29 - arithmetic if statement test
332: c greater than zero branch expected
333: c
334: if (iczero) 30290, 290, 30290
335: 290 continue
336: ivon01 = -2
337: if (ivon01 + 3) 292,292,293
338: 292 ivon02 = -1
339: go to 40290
340: 293 ivon02 = 1
341: go to 40290
342: 30290 ivdele = ivdele + 1
343: write (i02,80003) ivtnum
344: if (iczero) 40290, 301, 40290
345: 40290 if (ivon02) 20290, 20290, 10290
346: 10290 ivpass = ivpass + 1
347: write (i02,80001) ivtnum
348: go to 301
349: 20290 ivfail = ivfail + 1
350: ivcomp= ivon02
351: ivcorr = 1
352: write (i02,80004) ivtnum, ivcomp ,ivcorr
353: c
354: c tests 30 and 31 contain the basic go to statement tests.
355: c
356: 301 continue
357: ivtnum = 30
358: c
359: c **** test 030 ****
360: c test 30 - unconditional go to statement test
361: c
362: if (iczero) 30300, 300, 30300
363: 300 continue
364: ivon01 = 1
365: go to 302
366: 303 ivon01 = 2
367: go to 304
368: 302 ivon01 = 3
369: go to 303
370: 304 go to 40300
371: 30300 ivdele = ivdele + 1
372: write (i02,80003) ivtnum
373: if (iczero) 40300, 311, 40300
374: 40300 if (ivon01 - 2) 20300,10300,20300
375: 10300 ivpass = ivpass + 1
376: write (i02,80001) ivtnum
377: go to 311
378: 20300 ivfail = ivfail + 1
379: ivcomp = ivon01
380: ivcorr = 2
381: write (i02,80004) ivtnum, ivcomp ,ivcorr
382: 311 continue
383: ivtnum = 31
384: c
385: c **** test 031 ****
386: c test 31 - unconditional go to statement test
387: c
388: if (iczero) 30310, 310, 30310
389: 310 continue
390: ivon01 = 1
391: go to 316
392: 313 go to 317
393: 314 ivon01 = 3
394: go to 40310
395: 315 go to 313
396: 316 go to 315
397: 317 go to 314
398: 30310 ivdele = ivdele + 1
399: write (i02,80003) ivtnum
400: if (iczero) 40310, 321, 40310
401: 40310 if (ivon01 - 3) 20310, 10310, 20310
402: 10310 ivpass = ivpass + 1
403: write (i02,80001) ivtnum
404: go to 321
405: 20310 ivfail = ivfail + 1
406: ivcomp=ivon01
407: ivcorr = 3
408: write (i02,80004) ivtnum, ivcomp ,ivcorr
409: 321 continue
410: ivtnum = 32
411: c
412: c **** test 032 ****
413: c test 32 - arithmetic if statement and unconditional go to
414: c statement
415: c this test combines the basic arithmetic if statements and
416: c unconditional go to statements in one test.
417: c
418: if (iczero) 30320, 320, 30320
419: 320 continue
420: ivon01 = 1
421: go to 322
422: 324 ivon01 = 2
423: if (ivon01 -1) 323, 323, 325
424: 327 ivon01 = 5
425: go to 328
426: 326 ivon01 = -4
427: if (ivon01 + 4) 323, 327, 323
428: 322 if (ivon01 - 1) 323, 324, 323
429: 323 go to 20320
430: 325 ivon01 = 3
431: if (ivon01 -4) 326,323,323
432: 328 go to 40320
433: 30320 ivdele = ivdele + 1
434: write (i02,80003) ivtnum
435: if (iczero) 40320, 331, 40320
436: 40320 if (ivon01 - 5) 20320, 10320, 20320
437: 10320 ivpass = ivpass + 1
438: write (i02,80001) ivtnum
439: go to 331
440: 20320 ivfail = ivfail + 1
441: ivcomp=ivon01
442: ivcorr=5
443: write (i02,80004) ivtnum, ivcomp ,ivcorr
444: 331 continue
445: c
446: c write page footings and run summaries
447: 99999 continue
448: write (i02,90002)
449: write (i02,90006)
450: write (i02,90002)
451: write (i02,90002)
452: write (i02,90007)
453: write (i02,90002)
454: write (i02,90008) ivfail
455: write (i02,90009) ivpass
456: write (i02,90010) ivdele
457: c
458: c
459: c terminate routine execution
460: stop
461: c
462: c format statements for page headers
463: 90000 format (1h1)
464: 90002 format (1h )
465: 90001 format (1h ,10x,34hfortran compiler validation system)
466: 90003 format (1h ,21x,11hversion 1.0)
467: 90004 format (1h ,10x,38hfor official use only - copyright 1978)
468: 90005 format (1h ,5x,4htest,5x,9hpass/fail, 5x,8hcomputed,8x,7hcorrect)
469: 90006 format (1h ,5x,46h----------------------------------------------)
470: 90011 format (1h ,18x,17hsubset level test)
471: c
472: c format statements for run summaries
473: 90008 format (1h ,15x,i5,19h errors encountered)
474: 90009 format (1h ,15x,i5,13h tests passed)
475: 90010 format (1h ,15x,i5,14h tests deleted)
476: c
477: c format statements for test results
478: 80001 format (1h ,4x,i5,7x,4hpass)
479: 80002 format (1h ,4x,i5,7x,4hfail)
480: 80003 format (1h ,4x,i5,7x,7hdeleted)
481: 80004 format (1h ,4x,i5,7x,4hfail,10x,i6,9x,i6)
482: 80005 format (1h ,4x,i5,7x,4hfail,4x,e12.5,3x,e12.5)
483: c
484: 90007 format (1h ,20x,20hend of program fm004)
485: end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.