blob: e22d0c5e318d6705579a5c016baeac327cd41abc [file] [log] [blame]
PROGRAM FM004
C COMMENT SECTION 00010004
C 00020004
C FM004 00030004
C 00040004
C THIS ROUTINE CONTAINS BASIC ARITHMETIC IF STATEMENT TESTS. 00050004
C THE STATEMENT FORMAT IS 00060004
C IF (E) K1, K2, K3 00070004
C WHERE E IS A SIMPLE INTEGER EXPRESSION OF FORM 00080004
C VARIABLE - CONSTANT 00090004
C VARIABLE + CONSTANT 00100004
C AND K1, K2 AND K3 ARE STATEMENT LABELS. ONLY THE STATEMENTS IN 00110004
C THE BASIC ASSUMPTIONS ARE INCLUDED IN THESE TESTS. 00120004
C EXECUTION OF AN IF STATEMENT CAUSES EVALUATION OF THE 00130004
C EXPRESSION E FOLLOWING WHICH THE STATEMENT LABEL K1, K2 OR K3 00140004
C IS EXECUTED NEXT AS THE VALUE OF E IS LESS THAN ZERO, ZERO, OR 00150004
C GREATER THAN ZERO, RESPECTIVELY. 00160004
C 00170004
C THE BASIC UNCONDITIONAL GO TO STATEMENT IS TESTED IN THIS 00180004
C ROUTINE. THE STATEMENT IS OF THE FORM 00190004
C GO TO K 00200004
C WHERE K IS A STATEMENT LABEL. 00210004
C EXECUTION OF AN UNCONDITIONAL GO TO STATEMENT CAUSES THE 00220004
C STATEMENT IDENTIFIED BY STATEMENT LABEL K TO BE EXECUTED NEXT. 00230004
C 00240004
C REFERENCES 00250004
C AMERICAN NATIONAL STANDARD PROGRAMMING LANGUAGE FORTRAN, 00260004
C X3.9-1978 00270004
C 00280004
C SECTION 3.6, NORMAL EXECUTION SEQUENCE AND TRANSFER OF CONTROL 00290004
C SECTION 11.1, GO TO STATEMENT 00300004
C SECTION 11.4, ARITHMETIC IF STATEMENT 00310004
C 00320004
C ********************************************************** 00330004
C 00340004
C A COMPILER VALIDATION SYSTEM FOR THE FORTRAN LANGUAGE 00350004
C BASED ON SPECIFICATIONS AS DEFINED IN AMERICAN NATIONAL STANDARD 00360004
C PROGRAMMING LANGUAGE FORTRAN X3.9-1978, HAS BEEN DEVELOPED BY THE 00370004
C FEDERAL COBOL COMPILER TESTING SERVICE. THE FORTRAN COMPILER 00380004
C VALIDATION SYSTEM (FCVS) CONSISTS OF AUDIT ROUTINES, THEIR RELATED00390004
C DATA, AND AN EXECUTIVE SYSTEM. EACH AUDIT ROUTINE IS A FORTRAN 00400004
C PROGRAM, SUBPROGRAM OR FUNCTION WHICH INCLUDES TESTS OF SPECIFIC 00410004
C LANGUAGE ELEMENTS AND SUPPORTING PROCEDURES INDICATING THE RESULT 00420004
C OF EXECUTING THESE TESTS. 00430004
C 00440004
C THIS PARTICULAR PROGRAM/SUBPROGRAM/FUNCTION CONTAINS FEATURES 00450004
C FOUND ONLY IN THE SUBSET AS DEFINED IN X3.9-1978. 00460004
C 00470004
C SUGGESTIONS AND COMMENTS SHOULD BE FORWARDED TO - 00480004
C 00490004
C NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY 00500004
C SOFTWARE STANDARDS VALIDATION GROUP 00510004
C BUILDING 225 RM A266 00520004
C GAITHERSBURG, MD 20899 00530004
C ********************************************************** 00540004
C 00550004
C 00560004
C 00570004
C INITIALIZATION SECTION 00580004
C 00590004
C INITIALIZE CONSTANTS 00600004
C ************** 00610004
C I01 CONTAINS THE LOGICAL UNIT NUMBER FOR THE CARD READER. 00620004
I01 = 5 00630004
C I02 CONTAINS THE LOGICAL UNIT NUMBER FOR THE PRINTER. 00640004
I02 = 6 00650004
C SYSTEM ENVIRONMENT SECTION 00660004
C 00670004
CX010 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-010 CONTROL CARD. 00680004
C THE CX010 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I01 = 5 00690004
C (UNIT NUMBER FOR CARD READER). 00700004
CX011 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-011 CONTROL CARD. 00710004
C THE CX011 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL 00720004
C FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX010 ABOVE. 00730004
C 00740004
CX020 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-020 CONTROL CARD. 00750004
C THE CX020 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I02 = 6 00760004
C (UNIT NUMBER FOR PRINTER). 00770004
CX021 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-021 CONTROL CARD. 00780004
C THE CX021 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL 00790004
C FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX020 ABOVE. 00800004
C 00810004
IVPASS=0 00820004
IVFAIL=0 00830004
IVDELE=0 00840004
ICZERO=0 00850004
C 00860004
C WRITE PAGE HEADERS 00870004
WRITE (I02,90000) 00880004
WRITE (I02,90001) 00890004
WRITE (I02,90002) 00900004
WRITE (I02, 90002) 00910004
WRITE (I02,90003) 00920004
WRITE (I02,90002) 00930004
WRITE (I02,90004) 00940004
WRITE (I02,90002) 00950004
WRITE (I02,90011) 00960004
WRITE (I02,90002) 00970004
WRITE (I02,90002) 00980004
WRITE (I02,90005) 00990004
WRITE (I02,90006) 01000004
WRITE (I02,90002) 01010004
C TEST SECTION 01020004
C 01030004
C TESTS 21, 22, AND 23 CONTAIN THE SAME IF STATEMENT BUT THE 01040004
C EXPECTED BRANCH IS TO THE FIRST, SECOND OR THIRD STATEMENT LABEL 01050004
C AS THE INTEGER EXPRESSION IS LESS THAN ZERO, EQUAL TO ZERO, OR 01060004
C GREATER THAN ZERO RESPECTIVELY. 01070004
C 01080004
211 CONTINUE 01090004
IVTNUM = 21 01100004
C 01110004
C **** TEST 021 **** 01120004
C TEST 21 - ARITHMETIC IF STATEMENT TEST 01130004
C LESS THAN ZERO BRANCH EXPECTED. 01140004
C 01150004
IF (ICZERO) 30210, 210, 30210 01160004
210 CONTINUE 01170004
IVON01=2 01180004
IF (IVON01 - 3) 212,213,214 01190004
212 IVON02 = -1 01200004
GO TO 40210 01210004
213 IVON02 = 0 01220004
GO TO 40210 01230004
214 IVON02 = 1 01240004
GO TO 40210 01250004
30210 IVDELE = IVDELE + 1 01260004
WRITE (I02,80003) IVTNUM 01270004
IF (ICZERO) 40210, 221, 40210 01280004
40210 IF (IVON02) 10210, 20210, 20210 01290004
10210 IVPASS = IVPASS + 1 01300004
WRITE (I02,80001) IVTNUM 01310004
GO TO 221 01320004
20210 IVFAIL = IVFAIL + 1 01330004
IVCOMP=IVON02 01340004
IVCORR=-1 01350004
WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 01360004
221 CONTINUE 01370004
IVTNUM = 22 01380004
C 01390004
C **** TEST 022 **** 01400004
C TEST 22 - ARITHMETIC IF STATEMENT TEST 01410004
C EQUAL TO ZERO BRANCH EXPECTED 01420004
C 01430004
IF (ICZERO) 30220, 220, 30220 01440004
220 CONTINUE 01450004
IVON01 = 3 01460004
IF (IVON01 - 3) 222,223,224 01470004
222 IVON02 = -1 01480004
GO TO 40220 01490004
223 IVON02 = 0 01500004
GO TO 40220 01510004
224 IVON02 = 1 01520004
GO TO 40220 01530004
30220 IVDELE = IVDELE + 1 01540004
WRITE (I02,80003) IVTNUM 01550004
IF (ICZERO) 40220, 231, 40220 01560004
40220 IF (IVON02) 20220, 10220, 20220 01570004
10220 IVPASS = IVPASS + 1 01580004
WRITE (I02,80001) IVTNUM 01590004
GO TO 231 01600004
20220 IVFAIL = IVFAIL + 1 01610004
IVCOMP=IVON02 01620004
IVCORR= 0 01630004
WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 01640004
231 CONTINUE 01650004
IVTNUM = 23 01660004
C 01670004
C **** TEST 023 **** 01680004
C TEST 23 - ARITHMETIC IF STATEMENT TEST 01690004
C GREATER THAN ZERO BRANCH EXPECTED 01700004
C 01710004
IF (ICZERO) 30230, 230, 30230 01720004
230 CONTINUE 01730004
IVON01 = 4 01740004
IF (IVON01 - 3) 232,233,234 01750004
232 IVON02 = -1 01760004
GO TO 40230 01770004
233 IVON02 = 0 01780004
GO TO 40230 01790004
234 IVON02 = 1 01800004
GO TO 40230 01810004
30230 IVDELE = IVDELE + 1 01820004
WRITE (I02,80003) IVTNUM 01830004
IF (ICZERO) 40230, 241, 40230 01840004
40230 IF (IVON02) 20230, 20230, 10230 01850004
10230 IVPASS = IVPASS + 1 01860004
WRITE (I02,80001) IVTNUM 01870004
GO TO 241 01880004
20230 IVFAIL = IVFAIL + 1 01890004
IVCOMP=IVON02 01900004
IVCORR = 1 01910004
WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 01920004
C 01930004
C TESTS 24 THROUGH 29 CONTAIN AN IF STATEMENT WITH TWO OF THE 01940004
C THREE BRANCH STATEMENT LABELS EQUAL. 01950004
C 01960004
241 CONTINUE 01970004
IVTNUM = 24 01980004
C 01990004
C **** TEST 024 **** 02000004
C TEST 24 - ARITHMETIC IF STATEMENT TEST 02010004
C LESS THAN ZERO BRANCH EXPECTED 02020004
C 02030004
IF (ICZERO) 30240, 240, 30240 02040004
240 CONTINUE 02050004
IVON01=2 02060004
IF (IVON01 - 3) 242,243,242 02070004
242 IVON02=-1 02080004
GO TO 40240 02090004
243 IVON02=0 02100004
GO TO 40240 02110004
30240 IVDELE = IVDELE + 1 02120004
WRITE (I02,80003) IVTNUM 02130004
IF (ICZERO) 40240, 251, 40240 02140004
40240 IF (IVON02) 10240, 20240, 20240 02150004
10240 IVPASS = IVPASS + 1 02160004
WRITE (I02,80001) IVTNUM 02170004
GO TO 251 02180004
20240 IVFAIL = IVFAIL + 1 02190004
IVCOMP=IVON02 02200004
IVCORR=-1 02210004
WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 02220004
251 CONTINUE 02230004
IVTNUM = 25 02240004
C 02250004
C **** TEST 025 **** 02260004
C TEST 25 - ARITHMETIC IF STATEMENT TEST 02270004
C EQUAL TO ZERO BRANCH EXPECTED 02280004
C 02290004
IF (ICZERO) 30250, 250, 30250 02300004
250 CONTINUE 02310004
IVON01=3 02320004
IF (IVON01 - 3) 252,253,252 02330004
252 IVON02= -1 02340004
GO TO 40250 02350004
253 IVON02 = 0 02360004
GO TO 40250 02370004
30250 IVDELE = IVDELE + 1 02380004
WRITE (I02,80003) IVTNUM 02390004
IF (ICZERO) 40250, 261, 40250 02400004
40250 IF (IVON02) 20250,10250,20250 02410004
10250 IVPASS = IVPASS + 1 02420004
WRITE (I02,80001) IVTNUM 02430004
GO TO 261 02440004
20250 IVFAIL = IVFAIL + 1 02450004
IVCOMP=IVON02 02460004
IVCORR=0 02470004
WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 02480004
261 CONTINUE 02490004
IVTNUM = 26 02500004
C 02510004
C **** TEST 026 **** 02520004
C TEST 26 - ARITHMETIC IF STATEMENT TEST 02530004
C GREATER THAN ZERO BRANCH EXPECTED 02540004
C 02550004
IF (ICZERO) 30260, 260, 30260 02560004
260 CONTINUE 02570004
IVON01=4 02580004
IF (IVON01-3) 262, 263, 262 02590004
262 IVON02= 1 02600004
GO TO 40260 02610004
263 IVON02 = 0 02620004
GO TO 40260 02630004
30260 IVDELE = IVDELE + 1 02640004
WRITE (I02,80003) IVTNUM 02650004
IF (ICZERO) 40260, 271, 40260 02660004
40260 IF (IVON02) 20260, 20260, 10260 02670004
10260 IVPASS = IVPASS + 1 02680004
WRITE (I02,80001) IVTNUM 02690004
GO TO 271 02700004
20260 IVFAIL = IVFAIL + 1 02710004
IVCOMP=IVON02 02720004
IVCORR = 1 02730004
WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 02740004
271 CONTINUE 02750004
IVTNUM = 27 02760004
C 02770004
C **** TEST 027 **** 02780004
C TEST 27 - ARITHMETIC IF STATEMENT TEST 02790004
C LESS THAN ZERO BRANCH EXPECTED 02800004
C 02810004
IF (ICZERO) 30270, 270, 30270 02820004
270 CONTINUE 02830004
IVON01 = -4 02840004
IF (IVON01 + 3) 272, 272, 273 02850004
272 IVON02= -1 02860004
GO TO 40270 02870004
273 IVON02 = 1 02880004
GO TO 40270 02890004
30270 IVDELE = IVDELE + 1 02900004
WRITE (I02,80003) IVTNUM 02910004
IF (ICZERO) 40270, 281, 40270 02920004
40270 IF (IVON02) 10270, 20270, 20270 02930004
10270 IVPASS = IVPASS + 1 02940004
WRITE (I02,80001) IVTNUM 02950004
GO TO 281 02960004
20270 IVFAIL = IVFAIL + 1 02970004
IVCOMP=IVON02 02980004
IVCORR= -1 02990004
WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 03000004
281 CONTINUE 03010004
IVTNUM = 28 03020004
C 03030004
C **** TEST 028 **** 03040004
C TEST 28 - ARITHMETIC IF STATEMENT TEST 03050004
C EQUAL TO ZERO BRANCH EXPECTED 03060004
C 03070004
IF (ICZERO) 30280, 280, 30280 03080004
280 CONTINUE 03090004
IVON01 = -3 03100004
IF (IVON01 + 3) 282, 282, 283 03110004
282 IVON02 = 0 03120004
GO TO 40280 03130004
283 IVON02 = 1 03140004
GO TO 40280 03150004
30280 IVDELE = IVDELE + 1 03160004
WRITE (I02,80003) IVTNUM 03170004
IF (ICZERO) 40280, 291, 40280 03180004
40280 IF (IVON02) 20280, 10280, 20280 03190004
10280 IVPASS = IVPASS + 1 03200004
WRITE (I02,80001) IVTNUM 03210004
GO TO 291 03220004
20280 IVFAIL = IVFAIL + 1 03230004
IVCOMP=IVON02 03240004
IVCORR= 0 03250004
WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 03260004
291 CONTINUE 03270004
IVTNUM = 29 03280004
C 03290004
C **** TEST 029 **** 03300004
C TEST 29 - ARITHMETIC IF STATEMENT TEST 03310004
C GREATER THAN ZERO BRANCH EXPECTED 03320004
C 03330004
IF (ICZERO) 30290, 290, 30290 03340004
290 CONTINUE 03350004
IVON01 = -2 03360004
IF (IVON01 + 3) 292,292,293 03370004
292 IVON02 = -1 03380004
GO TO 40290 03390004
293 IVON02 = 1 03400004
GO TO 40290 03410004
30290 IVDELE = IVDELE + 1 03420004
WRITE (I02,80003) IVTNUM 03430004
IF (ICZERO) 40290, 301, 40290 03440004
40290 IF (IVON02) 20290, 20290, 10290 03450004
10290 IVPASS = IVPASS + 1 03460004
WRITE (I02,80001) IVTNUM 03470004
GO TO 301 03480004
20290 IVFAIL = IVFAIL + 1 03490004
IVCOMP= IVON02 03500004
IVCORR = 1 03510004
WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 03520004
C 03530004
C TESTS 30 AND 31 CONTAIN THE BASIC GO TO STATEMENT TESTS. 03540004
C 03550004
301 CONTINUE 03560004
IVTNUM = 30 03570004
C 03580004
C **** TEST 030 **** 03590004
C TEST 30 - UNCONDITIONAL GO TO STATEMENT TEST 03600004
C 03610004
IF (ICZERO) 30300, 300, 30300 03620004
300 CONTINUE 03630004
IVON01 = 1 03640004
GO TO 302 03650004
303 IVON01 = 2 03660004
GO TO 304 03670004
302 IVON01 = 3 03680004
GO TO 303 03690004
304 GO TO 40300 03700004
30300 IVDELE = IVDELE + 1 03710004
WRITE (I02,80003) IVTNUM 03720004
IF (ICZERO) 40300, 311, 40300 03730004
40300 IF (IVON01 - 2) 20300,10300,20300 03740004
10300 IVPASS = IVPASS + 1 03750004
WRITE (I02,80001) IVTNUM 03760004
GO TO 311 03770004
20300 IVFAIL = IVFAIL + 1 03780004
IVCOMP = IVON01 03790004
IVCORR = 2 03800004
WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 03810004
311 CONTINUE 03820004
IVTNUM = 31 03830004
C 03840004
C **** TEST 031 **** 03850004
C TEST 31 - UNCONDITIONAL GO TO STATEMENT TEST 03860004
C 03870004
IF (ICZERO) 30310, 310, 30310 03880004
310 CONTINUE 03890004
IVON01 = 1 03900004
GO TO 316 03910004
313 GO TO 317 03920004
314 IVON01 = 3 03930004
GO TO 40310 03940004
315 GO TO 313 03950004
316 GO TO 315 03960004
317 GO TO 314 03970004
30310 IVDELE = IVDELE + 1 03980004
WRITE (I02,80003) IVTNUM 03990004
IF (ICZERO) 40310, 321, 40310 04000004
40310 IF (IVON01 - 3) 20310, 10310, 20310 04010004
10310 IVPASS = IVPASS + 1 04020004
WRITE (I02,80001) IVTNUM 04030004
GO TO 321 04040004
20310 IVFAIL = IVFAIL + 1 04050004
IVCOMP=IVON01 04060004
IVCORR = 3 04070004
WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 04080004
321 CONTINUE 04090004
IVTNUM = 32 04100004
C 04110004
C **** TEST 032 **** 04120004
C TEST 32 - ARITHMETIC IF STATEMENT AND UNCONDITIONAL GO TO 04130004
C STATEMENT 04140004
C THIS TEST COMBINES THE BASIC ARITHMETIC IF STATEMENTS AND 04150004
C UNCONDITIONAL GO TO STATEMENTS IN ONE TEST. 04160004
C 04170004
IF (ICZERO) 30320, 320, 30320 04180004
320 CONTINUE 04190004
IVON01 = 1 04200004
GO TO 322 04210004
324 IVON01 = 2 04220004
IF (IVON01 -1) 323, 323, 325 04230004
327 IVON01 = 5 04240004
GO TO 328 04250004
326 IVON01 = -4 04260004
IF (IVON01 + 4) 323, 327, 323 04270004
322 IF (IVON01 - 1) 323, 324, 323 04280004
323 GO TO 20320 04290004
325 IVON01 = 3 04300004
IF (IVON01 -4) 326,323,323 04310004
328 GO TO 40320 04320004
30320 IVDELE = IVDELE + 1 04330004
WRITE (I02,80003) IVTNUM 04340004
IF (ICZERO) 40320, 331, 40320 04350004
40320 IF (IVON01 - 5) 20320, 10320, 20320 04360004
10320 IVPASS = IVPASS + 1 04370004
WRITE (I02,80001) IVTNUM 04380004
GO TO 331 04390004
20320 IVFAIL = IVFAIL + 1 04400004
IVCOMP=IVON01 04410004
IVCORR=5 04420004
WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 04430004
331 CONTINUE 04440004
C 04450004
C WRITE PAGE FOOTINGS AND RUN SUMMARIES 04460004
99999 CONTINUE 04470004
WRITE (I02,90002) 04480004
WRITE (I02,90006) 04490004
WRITE (I02,90002) 04500004
WRITE (I02,90002) 04510004
WRITE (I02,90007) 04520004
WRITE (I02,90002) 04530004
WRITE (I02,90008) IVFAIL 04540004
WRITE (I02,90009) IVPASS 04550004
WRITE (I02,90010) IVDELE 04560004
C 04570004
C 04580004
C TERMINATE ROUTINE EXECUTION 04590004
STOP 04600004
C 04610004
C FORMAT STATEMENTS FOR PAGE HEADERS 04620004
90000 FORMAT ("1") 04630004
90002 FORMAT (" ") 04640004
90001 FORMAT (" ",10X,"FORTRAN COMPILER VALIDATION SYSTEM" ) 04650004
90003 FORMAT (" ",21X,"VERSION 2.1" ) 04660004
90004 FORMAT (" ",10X,"FOR OFFICIAL USE ONLY - COPYRIGHT 1978" ) 04670004
90005 FORMAT (" ",5X,"TEST",5X,"PASS/FAIL", 5X,"COMPUTED",8X,"CORRECT") 04680004
90006 FORMAT (" ",5X,"----------------------------------------------" ) 04690004
90011 FORMAT (" ",18X,"SUBSET LEVEL TEST" ) 04700004
C 04710004
C FORMAT STATEMENTS FOR RUN SUMMARIES 04720004
90008 FORMAT (" ",15X,I5," ERRORS ENCOUNTERED" ) 04730004
90009 FORMAT (" ",15X,I5," TESTS PASSED" ) 04740004
90010 FORMAT (" ",15X,I5," TESTS DELETED" ) 04750004
C 04760004
C FORMAT STATEMENTS FOR TEST RESULTS 04770004
80001 FORMAT (" ",4X,I5,7X,"PASS") 04780004
80002 FORMAT (" ",4X,I5,7X,"FAIL") 04790004
80003 FORMAT (" ",4X,I5,7X,"DELETED") 04800004
80004 FORMAT (" ",4X,I5,7X,"FAIL",10X,I6,9X,I6) 04810004
80005 FORMAT (" ",4X,I5,7X,"FAIL",4X,E12.5,3X,E12.5) 04820004
C 04830004
90007 FORMAT (" ",20X,"END OF PROGRAM FM004" ) 04840004
END 04850004