blob: a147a04529a151d13b5b4b824ca6367221d6a539 [file] [log] [blame]
PROGRAM FM254 00010254
C 00020254
C 00030254
C 00040254
C THIS ROUTINE IS A TEST OF THE ELSE IF-BLOCK. TESTS WITHIN THIS00050254
C ROUTINE ARE FOR THE SYNTAX OF THE BASIC ELSE IF STATEMENT AND 00060254
C ELSE IF-BLOCK STRUCTURE. 00070254
C 00080254
C REFERENCES 00090254
C AMERICAN NATIONAL STANDARD PROGRAMMING LANGUAGE FORTRAN, 00100254
C X3.9-1977 00110254
C SECTION 11.7, ELSE IF STATEMENT 00120254
C SECTION 11.7.1, ELSE IF-BLOCK 00130254
C SECTION 11.7.2, EXECUTION OF THE ELSE IF STATEMENT 00140254
C 00150254
C 00160254
C 00170254
C 00180254
C ******************************************************************00190254
C A COMPILER VALIDATION SYSTEM FOR THE FORTRAN LANGUAGE 00200254
C BASED ON SPECIFICATIONS AS DEFINED IN AMERICAN STANDARD FORTRAN 00210254
C X3.9-1978, HAS BEEN DEVELOPED BY THE DEPARTMENT OF THE NAVY. THE 00220254
C FORTRAN COMPILER VALIDATION SYSTEM (FCVS) CONSISTS OF AUDIT 00230254
C ROUTINES, THEIR RELATED DATA, AND AN EXECUTIVE SYSTEM. EACH AUDIT00240254
C ROUTINE IS A FORTRAN PROGRAM OR SUBPROGRAM WHICH INCLUDES TESTS 00250254
C OF SPECIFIC LANGUAGE ELEMENTS AND SUPPORTING PROCEDURES INDICATING00260254
C THE RESULT OF EXECUTING THESE TESTS. 00270254
C 00280254
C THIS PARTICULAR PROGRAM OR SUBPROGRAM CONTAINS ONLY FEATURES 00290254
C FOUND IN THE SUBSET LEVEL OF THE STANDARD. 00300254
C 00310254
C SUGGESTIONS AND COMMENTS SHOULD BE FORWARDED TO 00320254
C NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY 00330254
C SOFTWARE STANDARDS VALIDATION GROUP 00340254
C BUILDING 225 RM A266 00350254
C GAITHERSBURG, MD 20899 00360254
C ******************************************************************00370254
C 00380254
C 00390254
IMPLICIT LOGICAL (L) 00400254
IMPLICIT CHARACTER*14 (C) 00410254
C 00420254
DIMENSION LADN11(2) 00430254
LOGICAL LVTN01, LVTN02, LATN11(2), LADN11 00440254
DATA LADN11/.TRUE., .FALSE./ 00450254
C 00460254
C 00470254
C **** LOGICAL STATEMENT FUNCTION REFERENCED IN TEST 4 **** 00480254
C 00490254
LFIS01 ( L ) = L .AND. L 00500254
C 00510254
C 00520254
C 00530254
C 00540254
C 00550254
C INITIALIZATION SECTION. 00560254
C 00570254
C INITIALIZE CONSTANTS 00580254
C ******************** 00590254
C I01 CONTAINS THE LOGICAL UNIT NUMBER FOR THE CARD READER 00600254
I01 = 5 00610254
C I02 CONTAINS THE LOGICAL UNIT NUMBER FOR THE PRINTER 00620254
I02 = 6 00630254
C SYSTEM ENVIRONMENT SECTION 00640254
C 00650254
CX010 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-010 CONTROL CARD.00660254
C THE CX010 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I01 = 5 00670254
C (UNIT NUMBER FOR CARD READER). 00680254
CX011 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-011 CONTROL CARD00690254
C THE CX011 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL 00700254
C FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX010 ABOVE. 00710254
C 00720254
CX020 THIS CARD IS PEPLACED BY CONTENTS OF FEXEC X-020 CONTROL CARD.00730254
C THE CX020 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I02 = 6 00740254
C (UNIT NUMBER FOR PRINTER). 00750254
CX021 THIS CARD IS PEPLACED BY CONTENTS OF FEXEC X-021 CONTROL CARD.00760254
C THE CX021 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL 00770254
C FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX020 ABOVE. 00780254
C 00790254
IVPASS = 0 00800254
IVFAIL = 0 00810254
IVDELE = 0 00820254
ICZERO = 0 00830254
C 00840254
C WRITE OUT PAGE HEADERS 00850254
C 00860254
WRITE (I02,90002) 00870254
WRITE (I02,90006) 00880254
WRITE (I02,90008) 00890254
WRITE (I02,90004) 00900254
WRITE (I02,90010) 00910254
WRITE (I02,90004) 00920254
WRITE (I02,90016) 00930254
WRITE (I02,90001) 00940254
WRITE (I02,90004) 00950254
WRITE (I02,90012) 00960254
WRITE (I02,90014) 00970254
WRITE (I02,90004) 00980254
C 00990254
C 01000254
C 01010254
C THE SYNTAX OF THE ELSE IF STATEMENTS IN THE TESTS TO FOLLOW IS 01020254
C 01030254
C IF ( E1 ) THEN 01040254
C IF-BLOCK 01050254
C ELSE IF ( E2 ) THEN 01060254
C ELSE IF-BLOCK 01070254
C END IF 01080254
C 01090254
C THE NEXT FOUR TESTS WILL USE THE FOLLOWING COMBINATIONS OF TRUE 01100254
C AND FALSE FOR E1 AND E2 AS SHOWN BELOW - 01110254
C TEST NUMBER 1 2 3 4 01120254
C E1 F F T T 01130254
C E2 T F T F 01140254
C 01150254
C 01160254
C 01170254
C 01180254
C **** FCVS PROGRAM 254 - TEST 001 **** 01190254
C 01200254
C TEST 001 USES A VERY SIMPLE ELSE IF STATEMENT. THE EXPRESSION 01210254
C WITHIN THE PARENTHESES IS THE LOGICAL CONSTANT .TRUE. AND THE 01220254
C EXECUTABLE STATEMENT WITHIN THE ELSE IF-BLOCK OF LEVEL ONE IS AN 01230254
C INTEGER ARITHMETIC ASSIGNMENT STATEMENT. IN THIS TEST THE LOGICAL01240254
C EXPRESSION E1 IS .FALSE. SO THE IF-BLOCK SHOULD NOT BE EXECUTED. 01250254
C THE LOGICAL EXPRESSION E2 IS .TRUE. SO THE ELSE IF-BLOCK SHOULD 01260254
C BE EXECUTED. 01270254
C 01280254
C 01290254
IVTNUM = 1 01300254
IF (ICZERO) 30010, 0010, 30010 01310254
0010 CONTINUE 01320254
IVCOMP = 1 01330254
IF ( .FALSE. ) THEN 01340254
IVCOMP = IVCOMP * 2 01350254
ELSE IF ( .TRUE. ) THEN 01360254
IVCOMP = IVCOMP * 3 01370254
END IF 01380254
C 01390254
C **** IVCOMP IS DETERMINED BY IVCOMP = 3 = 1 * 3 01400254
C 01410254
IVCORR = 3 01420254
40010 IF ( IVCOMP - 3 ) 20010, 10010, 20010 01430254
30010 IVDELE = IVDELE + 1 01440254
WRITE (I02,80000) IVTNUM 01450254
IF (ICZERO) 10010, 0021, 20010 01460254
10010 IVPASS = IVPASS + 1 01470254
WRITE (I02,80002) IVTNUM 01480254
GO TO 0021 01490254
20010 IVFAIL = IVFAIL + 1 01500254
WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 01510254
0021 CONTINUE 01520254
C 01530254
C **** FCVS PROGRAM 254 - TEST 002 **** 01540254
C 01550254
C TEST 002 HAS E1 .FALSE. AND E2 .FALSE.. NEITHER THE IF-BLOCK 01560254
C NOR THE ELSE IF-BLOCK SHOULD BE EXECUTED. 01570254
C 01580254
C 01590254
IVTNUM = 2 01600254
IF (ICZERO) 30020, 0020, 30020 01610254
0020 CONTINUE 01620254
IVCOMP = 1 01630254
LVON01 = .FALSE. 01640254
LVON02 = .FALSE. 01650254
IF ( LVON01 ) THEN 01660254
IVCOMP = IVCOMP * 2 01670254
ELSE IF ( LVON02 ) THEN 01680254
IVCOMP = IVCOMP * 3 01690254
END IF 01700254
IVCORR = 1 01710254
40020 IF ( IVCOMP - 1 ) 20020, 10020, 20020 01720254
30020 IVDELE = IVDELE + 1 01730254
WRITE (I02,80000) IVTNUM 01740254
IF (ICZERO) 10020, 0031, 20020 01750254
10020 IVPASS = IVPASS + 1 01760254
WRITE (I02,80002) IVTNUM 01770254
GO TO 0031 01780254
20020 IVFAIL = IVFAIL + 1 01790254
WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 01800254
0031 CONTINUE 01810254
C 01820254
C **** FCVS PROGRAM 254 - TEST 003 **** 01830254
C 01840254
C TEST 003 HAS E1 AS .TRUE. AND E2 AS .TRUE.. ONLY THE IF-BLOCK 01850254
C SHOULD BE EXECUTED. THE ELSE IF-BLOCK SHOULD NOT BE EXECUTED. 01860254
C 01870254
C 01880254
IVTNUM = 3 01890254
IF (ICZERO) 30030, 0030, 30030 01900254
0030 CONTINUE 01910254
IVCOMP = 1 01920254
LVON01 = .TRUE. 01930254
LVON02 = .TRUE. 01940254
LVTN01 = LVON01 01950254
LVTN02 = LVON02 01960254
IF ( LVTN01 ) THEN 01970254
IVCOMP = IVCOMP * 2 01980254
ELSE IF ( LVTN02 ) THEN 01990254
IVCOMP = IVCOMP * 3 02000254
END IF 02010254
C 02020254
C **** IVCOMP IS DETERMINED BY IVCOMP = 2 = 1 * 2 ****02030254
C 02040254
IVCORR = 2 02050254
40030 IF ( IVCOMP - 2 ) 20030, 10030, 20030 02060254
30030 IVDELE = IVDELE + 1 02070254
WRITE (I02,80000) IVTNUM 02080254
IF (ICZERO) 10030, 0041, 20030 02090254
10030 IVPASS = IVPASS + 1 02100254
WRITE (I02,80002) IVTNUM 02110254
GO TO 0041 02120254
20030 IVFAIL = IVFAIL + 1 02130254
WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 02140254
0041 CONTINUE 02150254
C 02160254
C **** FCVS PROGRAM 254 - TEST 004 **** 02170254
C 02180254
C TEST 004 HAS E1 AS .TRUE. AND E2 AS .FALSE.. ONLY THE IF-BLOCK02190254
C SHOULD BE EXECUTED. THE ELSE IF-BLOCK SHOULD NOT BE EXECUTED. 02200254
C 02210254
C 02220254
IVTNUM = 4 02230254
IF (ICZERO) 30040, 0040, 30040 02240254
0040 CONTINUE 02250254
IVCOMP = 1 02260254
LVON01 = .TRUE. 02270254
LVTN01 = LFIS01 ( LVON01 ) 02280254
LVON02 = .FALSE. 02290254
IF ( LVTN01 ) THEN 02300254
IVCOMP = IVCOMP * 2 02310254
ELSE IF ( LFIS01 ( LVON02 ) ) THEN 02320254
IVCOMP = IVCOMP * 3 02330254
END IF 02340254
C 02350254
C **** IVCOMP IS DETERMINED BY IVCOMP = 2 = 1 * 2 ****02360254
C 02370254
IVCORR = 2 02380254
40040 IF ( IVCOMP - 2 ) 20040, 10040, 20040 02390254
30040 IVDELE = IVDELE + 1 02400254
WRITE (I02,80000) IVTNUM 02410254
IF (ICZERO) 10040, 0051, 20040 02420254
10040 IVPASS = IVPASS + 1 02430254
WRITE (I02,80002) IVTNUM 02440254
GO TO 0051 02450254
20040 IVFAIL = IVFAIL + 1 02460254
WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 02470254
0051 CONTINUE 02480254
C 02490254
C 02500254
C THE SYNTAX OF THE ELSE IF STATEMENTS IN THE TESTS TO FOLLOW IS 02510254
C 02520254
C IF ( E1 ) THEN 02530254
C IF-BLOCK 1 02540254
C ELSE IF ( E2 ) THEN 02550254
C ELSE IF-BLOCK 1 02560254
C ELSE IF ( E3 ) THEN 02570254
C ELSE IF-BLOCK 2 02580254
C END IF 02590254
C 02600254
C 02610254
C 02620254
C **** FCVS PROGRAM 254 - TEST 005 **** 02630254
C 02640254
C TEST 005 HAS E1 AS TRUE. E2 AND E3 ARE FALSE. ONLY IF-BLOCK 102650254
C SHOULD BE EXECUTED. ELSE IF-BLOCKS 1 AND 2 SHOULD NOT EXECUTE. 02660254
C 02670254
C 02680254
IVTNUM = 5 02690254
IF (ICZERO) 30050, 0050, 30050 02700254
0050 CONTINUE 02710254
IVCOMP = 1 02720254
C LADN11(1) IS SET TO .TRUE. IN A DATA STATEMENT. 02730254
LVON02 = .FALSE. 02740254
LVON03 = .FALSE. 02750254
IF ( LADN11(1) ) THEN 02760254
IVCOMP = IVCOMP * 2 02770254
ELSE IF ( LVON02 ) THEN 02780254
IVCOMP = IVCOMP * 3 02790254
ELSE IF ( LVON03 ) THEN 02800254
IVCOMP = IVCOMP * 5 02810254
END IF 02820254
C 02830254
C **** IVCOMP IS DETERMINED BY IVCOMP = 2 = 1 * 2 ****02840254
C 02850254
IVCORR = 2 02860254
40050 IF ( IVCOMP - 2 ) 20050, 10050, 20050 02870254
30050 IVDELE = IVDELE + 1 02880254
WRITE (I02,80000) IVTNUM 02890254
IF (ICZERO) 10050, 0061, 20050 02900254
10050 IVPASS = IVPASS + 1 02910254
WRITE (I02,80002) IVTNUM 02920254
GO TO 0061 02930254
20050 IVFAIL = IVFAIL + 1 02940254
WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 02950254
0061 CONTINUE 02960254
C 02970254
C **** FCVS PROGRAM 254 - TEST 006 **** 02980254
C 02990254
C TEST 006 HAS E1 AS FALSE, E2 AS TRUE, AND E3 AS FALSE. ONLY 03000254
C ELSE IF-BLOCK 1 SHOULD EXECUTE. IF-BLOCK 1 AND ELSE IF-BLOCK 2 03010254
C SHOULD NOT EXECUTE. 03020254
C 03030254
C 03040254
IVTNUM = 6 03050254
IF (ICZERO) 30060, 0060, 30060 03060254
0060 CONTINUE 03070254
IVCOMP = 1 03080254
LVON01 = .FALSE. 03090254
LATN11(2) = .TRUE. 03100254
LVON03 = .FALSE. 03110254
IF ( LVON01 ) THEN 03120254
IVCOMP = IVCOMP * 2 03130254
ELSE IF ( LATN11(2) ) THEN 03140254
IVCOMP = IVCOMP * 3 03150254
ELSE IF ( LVON03 ) THEN 03160254
IVCOMP = IVCOMP * 5 03170254
END IF 03180254
C 03190254
C **** IVCOMP IS DETERMINED BY IVCOMP = 3 = 1 * 3 ****03200254
C 03210254
IVCORR = 3 03220254
40060 IF ( IVCOMP - 3 ) 20060, 10060, 20060 03230254
30060 IVDELE = IVDELE + 1 03240254
WRITE (I02,80000) IVTNUM 03250254
IF (ICZERO) 10060, 0071, 20060 03260254
10060 IVPASS = IVPASS + 1 03270254
WRITE (I02,80002) IVTNUM 03280254
GO TO 0071 03290254
20060 IVFAIL = IVFAIL + 1 03300254
WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 03310254
0071 CONTINUE 03320254
C 03330254
C **** FCVS PROGRAM 254 - TEST 007 **** 03340254
C 03350254
C TEST 007 HAS E1 AS FALSE, E2 AS FALSE, AND E3 AS TRUE. ONLY 03360254
C ELSE IF-BLOCK 2 SHOULD BE EXECUTED. IF-BLOCK 1 AND ELSE IF-BLOCK 03370254
C 1 SHOULD NOT EXECUTE. 03380254
C 03390254
C 03400254
IVTNUM = 7 03410254
IF (ICZERO) 30070, 0070, 30070 03420254
0070 CONTINUE 03430254
IVCOMP = 1 03440254
LVON01 = .FALSE. 03450254
LVON02 = .FALSE. 03460254
LVON03 = .TRUE. 03470254
IF ( LVON01 ) THEN 03480254
IVCOMP = IVCOMP * 2 03490254
ELSE IF ( LVON02 ) THEN 03500254
IVCOMP = IVCOMP * 3 03510254
ELSE IF ( LVON03 ) THEN 03520254
IVCOMP = IVCOMP * 5 03530254
END IF 03540254
C 03550254
C **** IVCOMP IS DETERMINED BY IVCOMP = 5 = 1 * 5 ****03560254
C 03570254
IVCORR = 5 03580254
40070 IF ( IVCOMP - 5 ) 20070, 10070, 20070 03590254
30070 IVDELE = IVDELE + 1 03600254
WRITE (I02,80000) IVTNUM 03610254
IF (ICZERO) 10070, 0081, 20070 03620254
10070 IVPASS = IVPASS + 1 03630254
WRITE (I02,80002) IVTNUM 03640254
GO TO 0081 03650254
20070 IVFAIL = IVFAIL + 1 03660254
WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 03670254
0081 CONTINUE 03680254
C 03690254
C **** FCVS PROGRAM 254 - TEST 008 **** 03700254
C 03710254
C TEST 008 HAS E1 AS FALSE. BOTH E2 AND E3 ARE TRUE. ONLY ELSE 03720254
C IF-BLOCK 1 SHOULD EXECUTE. IF-BLOCK 1 AND ELSE IF-BLOCK 2 SHOULD 03730254
C NOT EXECUTE. THIS IS A TEST OF THE LOGIC FLOW WHEN ONE OF THE 03740254
C EXPRESSIONS IN A STRING OF ELSE IF BLOCK STRUCTURES IS TRUE. ONLY03750254
C THAT PARTICULAR ELSE IF-BLOCK SHOULD BE EXECUTED. THE REST OF THE03760254
C STRING SHOULD BE SKIPPED. 03770254
C 03780254
C 03790254
IVTNUM = 8 03800254
IF (ICZERO) 30080, 0080, 30080 03810254
0080 CONTINUE 03820254
IVCOMP = 1 03830254
LVON01 = .FALSE. 03840254
LVON02 = .TRUE. 03850254
LVON03 = .TRUE. 03860254
IF ( LVON01 ) THEN 03870254
IVCOMP = IVCOMP * 2 03880254
ELSE IF ( LVON02 ) THEN 03890254
IVCOMP = IVCOMP * 3 03900254
ELSE IF ( LVON03 ) THEN 03910254
IVCOMP = IVCOMP * 5 03920254
END IF 03930254
C 03940254
C **** IVCOMP IS DETERMINED BY IVCOMP = 3 = 1 * 3 ****03950254
C 03960254
IVCORR = 3 03970254
40080 IF ( IVCOMP - 3 ) 20080, 10080, 20080 03980254
30080 IVDELE = IVDELE + 1 03990254
WRITE (I02,80000) IVTNUM 04000254
IF (ICZERO) 10080, 0091, 20080 04010254
10080 IVPASS = IVPASS + 1 04020254
WRITE (I02,80002) IVTNUM 04030254
GO TO 0091 04040254
20080 IVFAIL = IVFAIL + 1 04050254
WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 04060254
0091 CONTINUE 04070254
C 04080254
C 04090254
C THE FOLLOWING TWO TESTS ARE TO CHECK THE EXECUTION OF AN ELSE 04100254
C IF STATEMENT WITH AN EMPTY ELSE IF-BLOCK. THE SYNTAX FOR THE TWO 04110254
C TESTS IS AS FOLLOWS - 04120254
C 04130254
C IF ( E1 ) THEN 04140254
C IF-BLOCK 1 04150254
C ELSE IF ( E2 ) THEN 04160254
C ELSE IF ( E3 ) THEN 04170254
C ELSE IF-BLOCK 1 04180254
C END IF 04190254
C 04200254
C 04210254
C 04220254
C **** FCVS PROGRAM 254 - TEST 009 **** 04230254
C 04240254
C TEST 009 HAS E1 FALSE, E2 TRUE, AND E3 AS TRUE. THE STRUCTURE 04250254
C ELSE IF ( E2 ) THEN 04260254
C IS FOLLOWED BY AN EMPTY ELSE IF-BLOCK ALLOWED IN SECTION 11.7.1. 04270254
C IN SECTION 11.7.2, IF THE VALUE OF THE EXPRESSION IS TRUE AND THE04280254
C ELSE IF-BLOCK IS EMPTY, CONTROL IS TRANSFERRED TO THE NEXT END IF 04290254
C STATEMENT THAT HAS THE SAME IF-LEVEL AS THE ELSE IF STATEMENT. 04300254
C NEITHER IF-BLOCK 1 NOR ELSE IF-BLOCK 1 SHOULD BE EXECUTED. 04310254
C 04320254
C 04330254
IVTNUM = 9 04340254
IF (ICZERO) 30090, 0090, 30090 04350254
0090 CONTINUE 04360254
IVCOMP = 1 04370254
LVON01 = .FALSE. 04380254
LVON02 = .TRUE. 04390254
LVON03 = .TRUE. 04400254
IF ( LVON01 ) THEN 04410254
IVCOMP = IVCOMP * 2 04420254
ELSE IF ( LVON02 ) THEN 04430254
ELSE IF ( LVON03 ) THEN 04440254
IVCOMP = IVCOMP * 3 04450254
END IF 04460254
IVCORR = 1 04470254
40090 IF ( IVCOMP - 1 ) 20090, 10090, 20090 04480254
30090 IVDELE = IVDELE + 1 04490254
WRITE (I02,80000) IVTNUM 04500254
IF (ICZERO) 10090, 0101, 20090 04510254
10090 IVPASS = IVPASS + 1 04520254
WRITE (I02,80002) IVTNUM 04530254
GO TO 0101 04540254
20090 IVFAIL = IVFAIL + 1 04550254
WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 04560254
0101 CONTINUE 04570254
C 04580254
C **** FCVS PROGRAM 254 - TEST 010 **** 04590254
C 04600254
C TEST 010 ALSO HAS AN EMPTY ELSE IF-BLOCK. E1 AND E2 ARE FALSE.04610254
C E3 IS TRUE. ONLY ELSE IF-BLOCK 1 SHOULD BE EXECUTED. IF-BLOCK 1 04620254
C SHOULD NOT BE EXECUTED. IN SECTION 11.7.2, IF THE VALUE OF THE 04630254
C EXPRESSION IS FALSE, CONTROL IS TRANSFERRED TO THE NEXT ELSE IF, 04640254
C ELSE, OR END IF STATEMENT THAT HAS THE SAME IF-LEVEL AS THE ELSE 04650254
C IF STATEMENT. 04660254
C 04670254
C 04680254
IVTNUM = 10 04690254
IF (ICZERO) 30100, 0100, 30100 04700254
0100 CONTINUE 04710254
IVCOMP = 1 04720254
LVON01 = .FALSE. 04730254
LVON02 = .FALSE. 04740254
LVON03 = .TRUE. 04750254
IF ( LVON01 ) THEN 04760254
IVCOMP = IVCOMP * 2 04770254
ELSE IF ( LVON02 ) THEN 04780254
ELSE IF ( LVON03 ) THEN 04790254
IVCOMP = IVCOMP * 3 04800254
END IF 04810254
C 04820254
C **** IVCOMP IS DETERMINED BY IVCOMP = 3 = 1 * 3 ****04830254
C 04840254
IVCORR = 3 04850254
40100 IF ( IVCOMP - 3 ) 20100, 10100, 20100 04860254
30100 IVDELE = IVDELE + 1 04870254
WRITE (I02,80000) IVTNUM 04880254
IF (ICZERO) 10100, 0111, 20100 04890254
10100 IVPASS = IVPASS + 1 04900254
WRITE (I02,80002) IVTNUM 04910254
GO TO 0111 04920254
20100 IVFAIL = IVFAIL + 1 04930254
WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 04940254
0111 CONTINUE 04950254
C 04960254
C 04970254
C THE NEXT TWO TESTS USE THE ELSE IF STRUCTURE INSIDE A BLOCKED 04980254
C IF STRUCTURE OF LEVEL 2 AS FOLLOWS - 04990254
C 05000254
C IF ( E1 ) THEN 05010254
C IF-BLOCK 1 05020254
C IF ( E2 ) THEN 05030254
C IF-BLOCK 2 05040254
C ELSE IF ( E3 ) THEN 05050254
C ELSE IF-BLOCK 1 05060254
C ELSE IF ( E4 ) THEN 05070254
C ELSE IF-BLOCK 2 05080254
C END IF 05090254
C ELSE IF ( E5 ) THEN 05100254
C ELSE IF-BLOCK 3 05110254
C ELSE IF ( E6 ) THEN 05120254
C ELSE IF-BLOCK 4 05130254
C END IF 05140254
C 05150254
C 05160254
C 05170254
C **** FCVS PROGRAM 254 - TEST 011 **** 05180254
C 05190254
C TEST 011 HAS E1 TRUE, E2 AND E3 AS FALSE, E4, E5, AND ALSO 05200254
C E6 AS TRUE. IF-BLOCK 1, AND ELSE IF-BLOCK 2 SHOULD BE EXECUTED. 05210254
C IF-BLOCK 2, ELSE IF-BLOCK 1, 3, AND 4 SHOULD NOT BE EXECUTED. 05220254
C 05230254
C 05240254
IVTNUM = 11 05250254
IF (ICZERO) 30110, 0110, 30110 05260254
0110 CONTINUE 05270254
IVCOMP = 1 05280254
LVON01 = .TRUE. 05290254
LVON02 = .FALSE. 05300254
LVON03 = .FALSE. 05310254
LVON04 = .TRUE. 05320254
LVON05 = .TRUE. 05330254
LVON06 = .TRUE. 05340254
IF ( LVON01 ) THEN 05350254
IVCOMP = IVCOMP * 2 05360254
IF ( LVON02 ) THEN 05370254
IVCOMP = IVCOMP * 3 05380254
ELSE IF ( LVON03 ) THEN 05390254
IVCOMP = IVCOMP * 5 05400254
ELSE IF ( LVON04 ) THEN 05410254
IVCOMP = IVCOMP * 7 05420254
END IF 05430254
ELSE IF ( LVON05 ) THEN 05440254
IVCOMP = IVCOMP * 11 05450254
ELSE IF ( LVON06 ) THEN 05460254
IVCOMP = IVCOMP * 13 05470254
END IF 05480254
C 05490254
C **** IVCOMP IS DETERMINED BY IVCOMP = 14 = 1 * 2 * 7 ****05500254
C 05510254
IVCORR = 14 05520254
40110 IF ( IVCOMP - 14 ) 20110, 10110, 20110 05530254
30110 IVDELE = IVDELE + 1 05540254
WRITE (I02,80000) IVTNUM 05550254
IF (ICZERO) 10110, 0121, 20110 05560254
10110 IVPASS = IVPASS + 1 05570254
WRITE (I02,80002) IVTNUM 05580254
GO TO 0121 05590254
20110 IVFAIL = IVFAIL + 1 05600254
WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 05610254
0121 CONTINUE 05620254
C 05630254
C **** FCVS PROGRAM 254 - TEST 012 **** 05640254
C 05650254
C TEST 012 HAS E1 AS FALSE, E2, E3, AND E4 ARE TRUE, E5 AS FALSE,05660254
C AND E6 IS TRUE. ONLY ELSE IF-BLOCK 4 SHOULD BE EXECUTED. NO 05670254
C OTHER IF-BLOCK OR ELSE IF-BLOCK SHOULD BE EXECUTED. 05680254
C 05690254
C 05700254
IVTNUM = 12 05710254
IF (ICZERO) 30120, 0120, 30120 05720254
0120 CONTINUE 05730254
IVCOMP = 1 05740254
LVON01 = .FALSE. 05750254
LVON02 = .TRUE. 05760254
LVON03 = .TRUE. 05770254
LVON04 = .TRUE. 05780254
LVON05 = .FALSE. 05790254
LVON06 = .TRUE. 05800254
IF ( LVON01 ) THEN 05810254
IVCOMP = IVCOMP * 2 05820254
IF ( LVON02 ) THEN 05830254
IVCOMP = IVCOMP * 3 05840254
ELSE IF ( LVON03 ) THEN 05850254
IVCOMP = IVCOMP * 5 05860254
ELSE IF ( LVON04 ) THEN 05870254
IVCOMP = IVCOMP * 7 05880254
END IF 05890254
ELSE IF ( LVON05 ) THEN 05900254
IVCOMP = IVCOMP * 11 05910254
ELSE IF ( LVON06 ) THEN 05920254
IVCOMP = IVCOMP * 13 05930254
END IF 05940254
C 05950254
C **** IVCOMP IS DETERMINED BY IVCOMP = 13 = 1 * 13 ****05960254
C 05970254
IVCORR = 13 05980254
40120 IF ( IVCOMP - 13 ) 20120, 10120, 20120 05990254
30120 IVDELE = IVDELE + 1 06000254
WRITE (I02,80000) IVTNUM 06010254
IF (ICZERO) 10120, 0131, 20120 06020254
10120 IVPASS = IVPASS + 1 06030254
WRITE (I02,80002) IVTNUM 06040254
GO TO 0131 06050254
20120 IVFAIL = IVFAIL + 1 06060254
WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 06070254
0131 CONTINUE 06080254
C 06090254
C 06100254
C WRITE OUT TEST SUMMARY 06110254
C 06120254
WRITE (I02,90004) 06130254
WRITE (I02,90014) 06140254
WRITE (I02,90004) 06150254
WRITE (I02,90000) 06160254
WRITE (I02,90004) 06170254
WRITE (I02,90020) IVFAIL 06180254
WRITE (I02,90022) IVPASS 06190254
WRITE (I02,90024) IVDELE 06200254
STOP 06210254
90001 FORMAT (" ",24X,"FM254") 06220254
90000 FORMAT (" ",20X,"END OF PROGRAM FM254" ) 06230254
C 06240254
C FORMATS FOR TEST DETAIL LINES 06250254
C 06260254
80000 FORMAT (" ",4X,I5,6X,"DELETED") 06270254
80002 FORMAT (" ",4X,I5,7X,"PASS") 06280254
80010 FORMAT (" ",4X,I5,7X,"FAIL",10X,I6,9X,I6) 06290254
80012 FORMAT (" ",4X,I5,7X,"FAIL",4X,E12.5,3X,E12.5) 06300254
80018 FORMAT (" ",4X,I5,7X,"FAIL",2X,A14,1X,A14) 06310254
C 06320254
C FORMAT STATEMENTS FOR PAGE HEADERS 06330254
C 06340254
90002 FORMAT ("1") 06350254
90004 FORMAT (" ") 06360254
90006 FORMAT (" ",10X,"FORTRAN COMPILER VALIDATION SYSTEM" ) 06370254
90008 FORMAT (" ",21X,"VERSION 2.1" ) 06380254
90010 FORMAT (" ",8X,"FOR OFFICIAL USE ONLY - COPYRIGHT 1978" ) 06390254
90012 FORMAT (" ",5X,"TEST",5X,"PASS/FAIL",5X,"COMPUTED",8X,"CORRECT") 06400254
90014 FORMAT (" ",5X,"----------------------------------------------" ) 06410254
90016 FORMAT (" ",18X,"SUBSET LEVEL TEST" ) 06420254
C 06430254
C FORMAT STATEMENTS FOR RUN SUMMARY 06440254
C 06450254
90020 FORMAT (" ",19X,I5," TESTS FAILED" ) 06460254
90022 FORMAT (" ",19X,I5," TESTS PASSED" ) 06470254
90024 FORMAT (" ",19X,I5," TESTS DELETED" ) 06480254
END 06490254