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