C COMMENT SECTION C C FM004 C C THIS ROUTINE CONTAINS BASIC ARITHMETIC IF STATEMENT TESTS. C THE STATEMENT FORMAT IS C IF (E) K1, K2, K3 C WHERE E IS A SIMPLE INTEGER EXPRESSION OF FORM C VARIABLE - CONSTANT C VARIABLE + CONSTANT C AND K1, K2 AND K3 ARE STATEMENT LABELS. ONLY THE STATEMENTS IN C THE BASIC ASSUMPTIONS ARE INCLUDED IN THESE TESTS. C EXECUTION OF AN IF STATEMENT CAUSES EVALUATION OF THE C EXPRESSION E FOLLOWING WHICH THE STATEMENT LABEL K1, K2 OR K3 C IS EXECUTED NEXT AS THE VALUE OF E IS LESS THAN ZERO, ZERO, OR C GREATER THAN ZERO, RESPECTIVELY. C C THE BASIC UNCONDITIONAL GO TO STATEMENT IS TESTED IN THIS C ROUTINE. THE STATEMENT IS OF THE FORM C GO TO K C WHERE K IS A STATEMENT LABEL. C EXECUTION OF AN UNCONDITIONAL GO TO STATEMENT CAUSES THE C STATEMENT IDENTIFIED BY STATEMENT LABEL K TO BE EXECUTED NEXT. C C REFERENCES C AMERICAN NATIONAL STANDARD PROGRAMMING LANGUAGE FORTRAN, C X3.9-1978 C C SECTION 3.6, NORMAL EXECUTION SEQUENCE AND TRANSFER OF CONTROL C SECTION 11.1, GO TO STATEMENT C SECTION 11.4, ARITHMETIC IF STATEMENT C C ********************************************************** C C A COMPILER VALIDATION SYSTEM FOR THE FORTRAN LANGUAGE C BASED ON SPECIFICATIONS AS DEFINED IN AMERICAN NATIONAL STANDARD C PROGRAMMING LANGUAGE FORTRAN X3.9-1978, HAS BEEN DEVELOPED BY THE C FEDERAL COBOL COMPILER TESTING SERVICE. THE FORTRAN COMPILER C VALIDATION SYSTEM (FCVS) CONSISTS OF AUDIT ROUTINES, THEIR RELATED C DATA, AND AN EXECUTIVE SYSTEM. EACH AUDIT ROUTINE IS A FORTRAN C PROGRAM, SUBPROGRAM OR FUNCTION WHICH INCLUDES TESTS OF SPECIFIC C LANGUAGE ELEMENTS AND SUPPORTING PROCEDURES INDICATING THE RESULT C OF EXECUTING THESE TESTS. C C THIS PARTICULAR PROGRAM/SUBPROGRAM/FUNCTION CONTAINS FEATURES C FOUND ONLY IN THE SUBSET AS DEFINED IN X3.9-1978. C C SUGGESTIONS AND COMMENTS SHOULD BE FORWARDED TO - C C DEPARTMENT OF THE NAVY C FEDERAL COBOL COMPILER TESTING SERVICE C WASHINGTON, D.C. 20376 C C ********************************************************** C C C C INITIALIZATION SECTION C C INITIALIZE CONSTANTS C ************** C I01 CONTAINS THE LOGICAL UNIT NUMBER FOR THE CARD READER. I01 = 5 C I02 CONTAINS THE LOGICAL UNIT NUMBER FOR THE PRINTER. I02 = 6 C SYSTEM ENVIRONMENT SECTION C CX010 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-010 CONTROL CARD. C THE CX010 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I01 = 5 C (UNIT NUMBER FOR CARD READER). CX011 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-011 CONTROL CARD. C THE CX011 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL C FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX010 ABOVE. C CX020 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-020 CONTROL CARD. C THE CX020 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I02 = 6 C (UNIT NUMBER FOR PRINTER). CX021 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-021 CONTROL CARD. C THE CX021 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL C FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX020 ABOVE. C IVPASS=0 IVFAIL=0 IVDELE=0 ICZERO=0 C C WRITE PAGE HEADERS WRITE (I02,90000) WRITE (I02,90001) WRITE (I02,90002) WRITE (I02, 90002) WRITE (I02,90003) WRITE (I02,90002) WRITE (I02,90004) WRITE (I02,90002) WRITE (I02,90011) WRITE (I02,90002) WRITE (I02,90002) WRITE (I02,90005) WRITE (I02,90006) WRITE (I02,90002) C TEST SECTION C C TESTS 21, 22, AND 23 CONTAIN THE SAME IF STATEMENT BUT THE C EXPECTED BRANCH IS TO THE FIRST, SECOND OR THIRD STATEMENT LABEL C AS THE INTEGER EXPRESSION IS LESS THAN ZERO, EQUAL TO ZERO, OR C GREATER THAN ZERO RESPECTIVELY. C 211 CONTINUE IVTNUM = 21 C C **** TEST 021 **** C TEST 21 - ARITHMETIC IF STATEMENT TEST C LESS THAN ZERO BRANCH EXPECTED. C IF (ICZERO) 30210, 210, 30210 210 CONTINUE IVON01=2 IF (IVON01 - 3) 212,213,214 212 IVON02 = -1 GO TO 40210 213 IVON02 = 0 GO TO 40210 214 IVON02 = 1 GO TO 40210 30210 IVDELE = IVDELE + 1 WRITE (I02,80003) IVTNUM IF (ICZERO) 40210, 221, 40210 40210 IF (IVON02) 10210, 20210, 20210 10210 IVPASS = IVPASS + 1 WRITE (I02,80001) IVTNUM GO TO 221 20210 IVFAIL = IVFAIL + 1 IVCOMP=IVON02 IVCORR=-1 WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 221 CONTINUE IVTNUM = 22 C C **** TEST 022 **** C TEST 22 - ARITHMETIC IF STATEMENT TEST C EQUAL TO ZERO BRANCH EXPECTED C IF (ICZERO) 30220, 220, 30220 220 CONTINUE IVON01 = 3 IF (IVON01 - 3) 222,223,224 222 IVON02 = -1 GO TO 40220 223 IVON02 = 0 GO TO 40220 224 IVON02 = 1 GO TO 40220 30220 IVDELE = IVDELE + 1 WRITE (I02,80003) IVTNUM IF (ICZERO) 40220, 231, 40220 40220 IF (IVON02) 20220, 10220, 20220 10220 IVPASS = IVPASS + 1 WRITE (I02,80001) IVTNUM GO TO 231 20220 IVFAIL = IVFAIL + 1 IVCOMP=IVON02 IVCORR= 0 WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 231 CONTINUE IVTNUM = 23 C C **** TEST 023 **** C TEST 23 - ARITHMETIC IF STATEMENT TEST C GREATER THAN ZERO BRANCH EXPECTED C IF (ICZERO) 30230, 230, 30230 230 CONTINUE IVON01 = 4 IF (IVON01 - 3) 232,233,234 232 IVON02 = -1 GO TO 40230 233 IVON02 = 0 GO TO 40230 234 IVON02 = 1 GO TO 40230 30230 IVDELE = IVDELE + 1 WRITE (I02,80003) IVTNUM IF (ICZERO) 40230, 241, 40230 40230 IF (IVON02) 20230, 20230, 10230 10230 IVPASS = IVPASS + 1 WRITE (I02,80001) IVTNUM GO TO 241 20230 IVFAIL = IVFAIL + 1 IVCOMP=IVON02 IVCORR = 1 WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR C C TESTS 24 THROUGH 29 CONTAIN AN IF STATEMENT WITH TWO OF THE C THREE BRANCH STATEMENT LABELS EQUAL. C 241 CONTINUE IVTNUM = 24 C C **** TEST 024 **** C TEST 24 - ARITHMETIC IF STATEMENT TEST C LESS THAN ZERO BRANCH EXPECTED C IF (ICZERO) 30240, 240, 30240 240 CONTINUE IVON01=2 IF (IVON01 - 3) 242,243,242 242 IVON02=-1 GO TO 40240 243 IVON02=0 GO TO 40240 30240 IVDELE = IVDELE + 1 WRITE (I02,80003) IVTNUM IF (ICZERO) 40240, 251, 40240 40240 IF (IVON02) 10240, 20240, 20240 10240 IVPASS = IVPASS + 1 WRITE (I02,80001) IVTNUM GO TO 251 20240 IVFAIL = IVFAIL + 1 IVCOMP=IVON02 IVCORR=-1 WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 251 CONTINUE IVTNUM = 25 C C **** TEST 025 **** C TEST 25 - ARITHMETIC IF STATEMENT TEST C EQUAL TO ZERO BRANCH EXPECTED C IF (ICZERO) 30250, 250, 30250 250 CONTINUE IVON01=3 IF (IVON01 - 3) 252,253,252 252 IVON02= -1 GO TO 40250 253 IVON02 = 0 GO TO 40250 30250 IVDELE = IVDELE + 1 WRITE (I02,80003) IVTNUM IF (ICZERO) 40250, 261, 40250 40250 IF (IVON02) 20250,10250,20250 10250 IVPASS = IVPASS + 1 WRITE (I02,80001) IVTNUM GO TO 261 20250 IVFAIL = IVFAIL + 1 IVCOMP=IVON02 IVCORR=0 WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 261 CONTINUE IVTNUM = 26 C C **** TEST 026 **** C TEST 26 - ARITHMETIC IF STATEMENT TEST C GREATER THAN ZERO BRANCH EXPECTED C IF (ICZERO) 30260, 260, 30260 260 CONTINUE IVON01=4 IF (IVON01-3) 262, 263, 262 262 IVON02= 1 GO TO 40260 263 IVON02 = 0 GO TO 40260 30260 IVDELE = IVDELE + 1 WRITE (I02,80003) IVTNUM IF (ICZERO) 40260, 271, 40260 40260 IF (IVON02) 20260, 20260, 10260 10260 IVPASS = IVPASS + 1 WRITE (I02,80001) IVTNUM GO TO 271 20260 IVFAIL = IVFAIL + 1 IVCOMP=IVON02 IVCORR = 1 WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 271 CONTINUE IVTNUM = 27 C C **** TEST 027 **** C TEST 27 - ARITHMETIC IF STATEMENT TEST C LESS THAN ZERO BRANCH EXPECTED C IF (ICZERO) 30270, 270, 30270 270 CONTINUE IVON01 = -4 IF (IVON01 + 3) 272, 272, 273 272 IVON02= -1 GO TO 40270 273 IVON02 = 1 GO TO 40270 30270 IVDELE = IVDELE + 1 WRITE (I02,80003) IVTNUM IF (ICZERO) 40270, 281, 40270 40270 IF (IVON02) 10270, 20270, 20270 10270 IVPASS = IVPASS + 1 WRITE (I02,80001) IVTNUM GO TO 281 20270 IVFAIL = IVFAIL + 1 IVCOMP=IVON02 IVCORR= -1 WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 281 CONTINUE IVTNUM = 28 C C **** TEST 028 **** C TEST 28 - ARITHMETIC IF STATEMENT TEST C EQUAL TO ZERO BRANCH EXPECTED C IF (ICZERO) 30280, 280, 30280 280 CONTINUE IVON01 = -3 IF (IVON01 + 3) 282, 282, 283 282 IVON02 = 0 GO TO 40280 283 IVON02 = 1 GO TO 40280 30280 IVDELE = IVDELE + 1 WRITE (I02,80003) IVTNUM IF (ICZERO) 40280, 291, 40280 40280 IF (IVON02) 20280, 10280, 20280 10280 IVPASS = IVPASS + 1 WRITE (I02,80001) IVTNUM GO TO 291 20280 IVFAIL = IVFAIL + 1 IVCOMP=IVON02 IVCORR= 0 WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 291 CONTINUE IVTNUM = 29 C C **** TEST 029 **** C TEST 29 - ARITHMETIC IF STATEMENT TEST C GREATER THAN ZERO BRANCH EXPECTED C IF (ICZERO) 30290, 290, 30290 290 CONTINUE IVON01 = -2 IF (IVON01 + 3) 292,292,293 292 IVON02 = -1 GO TO 40290 293 IVON02 = 1 GO TO 40290 30290 IVDELE = IVDELE + 1 WRITE (I02,80003) IVTNUM IF (ICZERO) 40290, 301, 40290 40290 IF (IVON02) 20290, 20290, 10290 10290 IVPASS = IVPASS + 1 WRITE (I02,80001) IVTNUM GO TO 301 20290 IVFAIL = IVFAIL + 1 IVCOMP= IVON02 IVCORR = 1 WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR C C TESTS 30 AND 31 CONTAIN THE BASIC GO TO STATEMENT TESTS. C 301 CONTINUE IVTNUM = 30 C C **** TEST 030 **** C TEST 30 - UNCONDITIONAL GO TO STATEMENT TEST C IF (ICZERO) 30300, 300, 30300 300 CONTINUE IVON01 = 1 GO TO 302 303 IVON01 = 2 GO TO 304 302 IVON01 = 3 GO TO 303 304 GO TO 40300 30300 IVDELE = IVDELE + 1 WRITE (I02,80003) IVTNUM IF (ICZERO) 40300, 311, 40300 40300 IF (IVON01 - 2) 20300,10300,20300 10300 IVPASS = IVPASS + 1 WRITE (I02,80001) IVTNUM GO TO 311 20300 IVFAIL = IVFAIL + 1 IVCOMP = IVON01 IVCORR = 2 WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 311 CONTINUE IVTNUM = 31 C C **** TEST 031 **** C TEST 31 - UNCONDITIONAL GO TO STATEMENT TEST C IF (ICZERO) 30310, 310, 30310 310 CONTINUE IVON01 = 1 GO TO 316 313 GO TO 317 314 IVON01 = 3 GO TO 40310 315 GO TO 313 316 GO TO 315 317 GO TO 314 30310 IVDELE = IVDELE + 1 WRITE (I02,80003) IVTNUM IF (ICZERO) 40310, 321, 40310 40310 IF (IVON01 - 3) 20310, 10310, 20310 10310 IVPASS = IVPASS + 1 WRITE (I02,80001) IVTNUM GO TO 321 20310 IVFAIL = IVFAIL + 1 IVCOMP=IVON01 IVCORR = 3 WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 321 CONTINUE IVTNUM = 32 C C **** TEST 032 **** C TEST 32 - ARITHMETIC IF STATEMENT AND UNCONDITIONAL GO TO C STATEMENT C THIS TEST COMBINES THE BASIC ARITHMETIC IF STATEMENTS AND C UNCONDITIONAL GO TO STATEMENTS IN ONE TEST. C IF (ICZERO) 30320, 320, 30320 320 CONTINUE IVON01 = 1 GO TO 322 324 IVON01 = 2 IF (IVON01 -1) 323, 323, 325 327 IVON01 = 5 GO TO 328 326 IVON01 = -4 IF (IVON01 + 4) 323, 327, 323 322 IF (IVON01 - 1) 323, 324, 323 323 GO TO 20320 325 IVON01 = 3 IF (IVON01 -4) 326,323,323 328 GO TO 40320 30320 IVDELE = IVDELE + 1 WRITE (I02,80003) IVTNUM IF (ICZERO) 40320, 331, 40320 40320 IF (IVON01 - 5) 20320, 10320, 20320 10320 IVPASS = IVPASS + 1 WRITE (I02,80001) IVTNUM GO TO 331 20320 IVFAIL = IVFAIL + 1 IVCOMP=IVON01 IVCORR=5 WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 331 CONTINUE C C WRITE PAGE FOOTINGS AND RUN SUMMARIES 99999 CONTINUE WRITE (I02,90002) WRITE (I02,90006) WRITE (I02,90002) WRITE (I02,90002) WRITE (I02,90007) WRITE (I02,90002) WRITE (I02,90008) IVFAIL WRITE (I02,90009) IVPASS WRITE (I02,90010) IVDELE C C C TERMINATE ROUTINE EXECUTION STOP C C FORMAT STATEMENTS FOR PAGE HEADERS 90000 FORMAT (1H1) 90002 FORMAT (1H ) 90001 FORMAT (1H ,10X,34HFORTRAN COMPILER VALIDATION SYSTEM) 90003 FORMAT (1H ,21X,11HVERSION 1.0) 90004 FORMAT (1H ,10X,38HFOR OFFICIAL USE ONLY - COPYRIGHT 1978) 90005 FORMAT (1H ,5X,4HTEST,5X,9HPASS/FAIL, 5X,8HCOMPUTED,8X,7HCORRECT) 90006 FORMAT (1H ,5X,46H----------------------------------------------) 90011 FORMAT (1H ,18X,17HSUBSET LEVEL TEST) C C FORMAT STATEMENTS FOR RUN SUMMARIES 90008 FORMAT (1H ,15X,I5,19H ERRORS ENCOUNTERED) 90009 FORMAT (1H ,15X,I5,13H TESTS PASSED) 90010 FORMAT (1H ,15X,I5,14H TESTS DELETED) C C FORMAT STATEMENTS FOR TEST RESULTS 80001 FORMAT (1H ,4X,I5,7X,4HPASS) 80002 FORMAT (1H ,4X,I5,7X,4HFAIL) 80003 FORMAT (1H ,4X,I5,7X,7HDELETED) 80004 FORMAT (1H ,4X,I5,7X,4HFAIL,10X,I6,9X,I6) 80005 FORMAT (1H ,4X,I5,7X,4HFAIL,4X,E12.5,3X,E12.5) C 90007 FORMAT (1H ,20X,20HEND OF PROGRAM FM004) END