PROGRAM FM256 C C C C THIS ROUTINE IS A TEST OF THE DO STATEMENT. THE DO IS TESTED C BOTH OUTSIDE AND INSIDE THE BLOCK-IF STRUCTURE. TESTS ARE MADE OF C THE DO-VARIABLE WHEN THE DO BECOMES INACTIVE. OTHER TESTS CHECK C LOOP AND INCREMENTATION PROCESSING. THE DO-LOOP EXECUTION C IS TESTED FOR THOSE CONDITIONS WHICH MAKE THE DO-LOOP INACTIVE. C C AMERICAN NATIONAL STANDARD PROGRAMMING LANGUAGE FORTRAN, C X3.9-1978 C SECTION 11.10, DO STATEMENT C SECTION 11.10.1, RANGE OF A DO-LOOP C SECTION 11.10.2, ACTIVE AND INACTIVE DO-LOOPS C SECTION 11.10.3, EXECUTING A DO STATEMENT C SECTION 11.10.4, LOOP CONTROL PROCESSING C SECTION 11.10.5, EXECUTION OF THE RANGE C SECTION 11.10.6, TERMINAL STATEMENT EXECUTION C SECTION 11.10.7, INCREMENTATION PROCESSING C C FM012 - TESTS THE DO STATEMENT WITH THE FORTRAN 66 CONCEPTS OF C EXTENDED RANGE OF A DO STATEMENT. C C C C ****************************************************************** C A COMPILER VALIDATION SYSTEM FOR THE FORTRAN LANGUAGE C BASED ON SPECIFICATIONS AS DEFINED IN AMERICAN STANDARD FORTRAN C X3.9-1978, HAS BEEN DEVELOPED BY THE DEPARTMENT OF THE NAVY. THE C FORTRAN COMPILER VALIDATION SYSTEM (FCVS) CONSISTS OF AUDIT C ROUTINES, THEIR RELATED DATA, AND AN EXECUTIVE SYSTEM. EACH AUDIT C ROUTINE IS A FORTRAN PROGRAM OR SUBPROGRAM WHICH INCLUDES TESTS C OF SPECIFIC LANGUAGE ELEMENTS AND SUPPORTING PROCEDURES INDICATING C THE RESULT OF EXECUTING THESE TESTS. C C THIS PARTICULAR PROGRAM OR SUBPROGRAM CONTAINS ONLY FEATURES C FOUND IN THE SUBSET LEVEL OF THE STANDARD. C C SUGGESTIONS AND COMMENTS SHOULD BE FORWARDED TO C DEPARTMENT OF THE NAVY C FEDERAL COBOL COMPILER TESTING SERVICE C WASHINGTON, D.C. 20376 C C ****************************************************************** C C IMPLICIT LOGICAL (L) IMPLICIT CHARACTER*14 (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 PEPLACED 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 PEPLACED 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 OUT PAGE HEADERS C WRITE (I02,90002) WRITE (I02,90006) WRITE (I02,90008) WRITE (I02,90004) WRITE (I02,90010) WRITE (I02,90004) WRITE (I02,90016) WRITE (I02,90001) WRITE (I02,90004) WRITE (I02,90012) WRITE (I02,90014) WRITE (I02,90004) C C C **** FCVS PROGRAM 256 - TEST 001 **** C C TEST 001 CHECKS THE SIMPLE DO STATEMENT WITH THE OPTIONAL C COMMAS AND ALL DO PARAMETERS SPECIFIED. THE LOOP IS ACTIVE FOR C TEN COUNTS. THE FINAL VALUE OF THE INTEGER COUNTER SHOULD BE C EQUAL TO TEN (10). THE FORM OF THE DO STATEMENT USED IN THIS TEST C IS SHOWN BELOW - C C DO S, I = E1, E2, E3 C C IVTNUM = 1 IF (ICZERO) 30010, 0010, 30010 0010 CONTINUE IVCOMP = 0 DO 0012, IVON01 = 1, 10, 1 IVCOMP = IVCOMP + 1 0012 CONTINUE IVCORR = 10 40010 IF ( IVCOMP - 10 ) 20010, 10010, 20010 30010 IVDELE = IVDELE + 1 WRITE (I02,80000) IVTNUM IF (ICZERO) 10010, 0021, 20010 10010 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0021 20010 IVFAIL = IVFAIL + 1 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 0021 CONTINUE C C **** FCVS PROGRAM 256 - TEST 002 **** C C TEST 002 IS SIMILAR TO THE PREVIOUS TEST EXCEPT THAT THE COMMAS C THAT ARE OPTIONAL HAVE BEEN DELETED AS A SYNTAX CHECK. C C THE INCREMENTATION PARAMETER IS OPTIONAL AND NOT PRESENT IN C THIS TEST. ACCORDING TO SECTION 11.10.3, IF E3 DOES NOT APPEAR C THEN M3 HAS A VALUE OF ONE. THE DO STATEMENT FOR THIS TEST IS OF C THE FORM SHOWN BELOW - C C DO S I = E1, E2 C C IVTNUM = 2 IF (ICZERO) 30020, 0020, 30020 0020 CONTINUE IVCOMP = 0 DO 0022 IVON01 = 1, 10 IVCOMP = IVCOMP + 1 0022 CONTINUE IVCORR = 10 40020 IF ( IVCOMP - 10 ) 20020, 10020, 20020 30020 IVDELE = IVDELE + 1 WRITE (I02,80000) IVTNUM IF (ICZERO) 10020, 0031, 20020 10020 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0031 20020 IVFAIL = IVFAIL + 1 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 0031 CONTINUE C C **** FCVS PROGRAM 256 - TEST 003 **** C C TEST 003 HAS A DO STATEMENT INSIDE A BLOCKED IF STRUCTURE. C THE LOGICAL EXPRESSION IS TRUE SO THE DO-LOOP SHOULD BE EXECUTED C A TOTAL OF TEN TIMES. C C IVTNUM = 3 IF (ICZERO) 30030, 0030, 30030 0030 CONTINUE IVCOMP = 0 LVON01 = .TRUE. IF ( LVON01 ) THEN DO 0032, IVON01 = 1, 10, 1 IVCOMP = IVCOMP + 1 0032 CONTINUE END IF IVCORR = 10 40030 IF ( IVCOMP - 10 ) 20030, 10030, 20030 30030 IVDELE = IVDELE + 1 WRITE (I02,80000) IVTNUM IF (ICZERO) 10030, 0041, 20030 10030 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0041 20030 IVFAIL = IVFAIL + 1 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 0041 CONTINUE C C **** FCVS PROGRAM 256 - TEST 004 **** C C TEST 004 IS SIMILAR TO THE PREVIOUS TEST EXCEPT THAT THE DO C STATEMENT IS LOCATED IN AN ELSE IF-BLOCK. THE DO-LOOP SHOULD BE C EXECUTED FIVE (5) TIMES. C C IVTNUM = 4 IF (ICZERO) 30040, 0040, 30040 0040 CONTINUE IVCOMP = 0 LVON01 = .FALSE. LVON02 = .TRUE. IF ( LVON01 ) THEN IVCOMP = 32000 ELSE IF ( LVON02 ) THEN DO 0042 IVON01 = 1, 5 IVCOMP = IVCOMP + 1 0042 CONTINUE END IF IVCORR = 5 40040 IF ( IVCOMP - 5 ) 20040, 10040, 20040 30040 IVDELE = IVDELE + 1 WRITE (I02,80000) IVTNUM IF (ICZERO) 10040, 0051, 20040 10040 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0051 20040 IVFAIL = IVFAIL + 1 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 0051 CONTINUE C C **** FCVS PROGRAM 256 - TEST 005 **** C C TEST 005 IS SIMILAR TO THE PREVIOUS TWO TESTS EXCEPT THAT THE C DO STATEMENT IS CONTAINED IN AN ELSE-BLOCK. THE DO-LOOP SHOULD BE C EXECUTED A TOTAL OF 3 TIMES. C C IVTNUM = 5 IF (ICZERO) 30050, 0050, 30050 0050 CONTINUE IVCOMP = 0 LVON01 = .FALSE. LVON02 = .FALSE. IF ( LVON01 ) THEN IVCOMP = 100 ELSE IF ( LVON02 ) THEN IVCOMP = 1000 ELSE DO 0052, IVON01 = 1, 3 IVCOMP = IVCOMP + 1 0052 CONTINUE END IF IVCORR = 3 40050 IF ( IVCOMP - 3 ) 20050, 10050, 20050 30050 IVDELE = IVDELE + 1 WRITE (I02,80000) IVTNUM IF (ICZERO) 10050, 0061, 20050 10050 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0061 20050 IVFAIL = IVFAIL + 1 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 0061 CONTINUE C C **** FCVS PROGRAM 256 - TEST 006 **** C C TEST 006 HAS A BLOCKED IF STRUCTURE INSIDE A DO-LOOP. C THE LOOP IS EXECUTED THREE (3) TIMES. ALL THREE PARTS OF THE C BLOCK-IF STRUCTURE SHOULD BE EXECUTED. C C IVTNUM = 6 IF (ICZERO) 30060, 0060, 30060 0060 CONTINUE IVCOMP = 1 DO 0062, IVON01 = 3, 5, 1 IF ( IVON01 .LE. 3 ) THEN IVCOMP = IVCOMP * 2 ELSE IF ( IVON01 .GT. 3 .AND. IVON01 .LT. 5 ) THEN IVCOMP = IVCOMP * 3 ELSE IVCOMP = IVCOMP * 5 END IF 0062 CONTINUE C C **** IVCOMP IS DETERMINED BY IVCOMP = 30 = 1 * 2 * 3 * 5 **** C IVCORR = 30 40060 IF ( IVCOMP - 30 ) 20060, 10060, 20060 30060 IVDELE = IVDELE + 1 WRITE (I02,80000) IVTNUM IF (ICZERO) 10060, 0071, 20060 10060 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0071 20060 IVFAIL = IVFAIL + 1 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 0071 CONTINUE C C C THE FOLLOWING SERIES OF TESTS CHECK THE DO-VARIABLE WHEN THE C DO-LOOP BECOMES INACTIVE. ACCORDING TO SECTION 11.10.2, WHEN A C DO-LOOP BECOMES INACTIVE, THE DO-VARIABLE OF THE DO-LOOP RETAINS C ITS LAST DEFINED VALUE. C C C C **** FCVS PROGRAM 256 - TEST 007 **** C C TEST 007 CHECKS THAT THE DO-VARIABLE CONTAINS ITS LAST DEFINED C VALUE WHEN THE ITERATION COUNT IS ZERO. C C IVTNUM = 7 IF (ICZERO) 30070, 0070, 30070 0070 CONTINUE IVCOMP = 0 IVON02 = 0 DO 0072 IVON01 = 100, 105, 2 IVON02 = IVON02 + 1 0072 CONTINUE IVCOMP = IVON01 IVCORR = 106 40070 IF ( IVCOMP - 106 ) 20070, 10070, 20070 30070 IVDELE = IVDELE + 1 WRITE (I02,80000) IVTNUM IF (ICZERO) 10070, 0081, 20070 10070 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0081 20070 IVFAIL = IVFAIL + 1 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 0081 CONTINUE C C **** FCVS PROGRAM 256 - TEST 008 **** C C TEST 008 CHECKS THAT THE LOOP COUNTER IN THE PREVIOUS TEST HAD C A VALUE OF THREE TO SHOW THAT THE DO-LOOP WAS EXECUTED THREE TIMES C BEFORE TERMINATING ( BECOMMING INACTIVE ). C C IVTNUM = 8 IF (ICZERO) 30080, 0080, 30080 0080 CONTINUE IVCOMP = 0 IVCOMP = IVON02 IVCORR = 3 40080 IF ( IVCOMP - 3 ) 20080, 10080, 20080 30080 IVDELE = IVDELE + 1 WRITE (I02,80000) IVTNUM IF (ICZERO) 10080, 0091, 20080 10080 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0091 20080 IVFAIL = IVFAIL + 1 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 0091 CONTINUE C C **** FCVS PROGRAM 256 - TEST 009 **** C C TEST 009 CHECKS THAT A DO-LOOP BECOMES INACTIVE IF THERE IS A C TRANSFER OF CONTROL OUTSIDE THE RANGE OF THE DO-LOOP. THE TRANS- C FER MUST BE INSIDE OF THE SAME PROGRAM UNIT - NOT A CALL OR C FUNCTION REFERENCE TO A SUBPROGRAM. C C THIS IS A SIGNIFICANT DIFFERENCE BETWEEN FORTRAN 66 AND FORTRAN C 77. FORTRAN 66 HAD AN EXTENDED RANGE OF THE DO FEATURE WHICH C ALLOWED FOR A TRANSFER OUTSIDE THE RANGE OF A DO-LOOP WITHOUT C MAKING THE DO-LOOP INACTIVE. C C IVTNUM = 9 IF (ICZERO) 30090, 0090, 30090 0090 CONTINUE IVCOMP = 0 DO 0092 IVON01 = 1, 7 IF ( IVON01 .GE. 3 ) GO TO 0093 0092 CONTINUE 0093 IVCOMP = IVON01 IVCORR = 3 40090 IF ( IVCOMP - 3 ) 20090, 10090, 20090 30090 IVDELE = IVDELE + 1 WRITE (I02,80000) IVTNUM IF (ICZERO) 10090, 0101, 20090 10090 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0101 20090 IVFAIL = IVFAIL + 1 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 0101 CONTINUE C C **** FCVS PROGRAM 256 - TEST 010 **** C C TEST 010 CHECKS FOR AN INITIAL COUNT EQUAL TO ZERO BECAUSE C M1 IS GREATER THAN M2 AND M3 IS GREATER THAN ZERO - SEE SECTION C 11.10.3 FOR CONDITIONS WHICH MAKE THE ITERATION COUNT ZERO. C THE LOOP SHOULD NOT BE EXECUTED AT ALL. C C IVTNUM = 10 IF (ICZERO) 30100, 0100, 30100 0100 CONTINUE IVCOMP = 0 DO 0102, IVON01 = 100, 10, 3 IVCOMP = IVCOMP + 1 0102 CONTINUE IVCORR = 0 40100 IF ( IVCOMP ) 20100, 10100, 20100 30100 IVDELE = IVDELE + 1 WRITE (I02,80000) IVTNUM IF (ICZERO) 10100, 0111, 20100 10100 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0111 20100 IVFAIL = IVFAIL + 1 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 0111 CONTINUE C C **** FCVS PROGRAM 256 - TEST 011 **** C C TEST 011 CHECKS FOR THE PROPER EXECUTION OF THE STEPS AS SHOWN C IN SECTION 11.10.3 - EXECUTING A DO STATEMENT. THE VARIABLE IVON0 C SHOULD HAVE BEEN SET TO 100. THE ITERATION COUNT IS ZERO BY THE C FORMULA IN 11.10.3(3). AS DESCRIBED IN SECTION 11.10.4 - THE C ITERATION COUNT IS TESTED. IF IT IS NOT ZERO, EXECUTION OF THE C FIRST STATEMENT IN THE RANGE OF THE DO-LOOP BEGINS. IF THE C ITERATION COUNT IS ZERO, THE DO-LOOP BECOMES INACTIVE. C C IVTNUM = 11 IF (ICZERO) 30110, 0110, 30110 0110 CONTINUE IVCOMP = 0 IVCOMP = IVON01 IVCORR = 100 40110 IF ( IVCOMP - 100 ) 20110, 10110, 20110 30110 IVDELE = IVDELE + 1 WRITE (I02,80000) IVTNUM IF (ICZERO) 10110, 0121, 20110 10110 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0121 20110 IVFAIL = IVFAIL + 1 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 0121 CONTINUE C C C THE FOLLOWING TWO TESTS ARE SIMILAR TO THE PREVIOUS TWO TESTS C IN THAT THE PARAMETERS OF THE DO STATEMENT MAKE THE ITERATION C COUNT ZERO WHEN THE DO STATEMENT IS EXECUTED. C C C C **** FCVS PROGRAM 256 - TEST 012 **** C C TEST 012 HAS M1 LESS THAN M2, BUT M3 IS NEGATIVE. THE LOOP C SHOULD NOT BE EXECUTED AT ALL. C C IVTNUM = 12 IF (ICZERO) 30120, 0120, 30120 0120 CONTINUE IVCOMP = 0 DO 0122 IVON01 = 10, 100, -3 IVCOMP = IVCOMP + 1 0122 CONTINUE IVCORR = 0 40120 IF ( IVCOMP ) 20120, 10120, 20120 30120 IVDELE = IVDELE + 1 WRITE (I02,80000) IVTNUM IF (ICZERO) 10120, 0131, 20120 10120 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0131 20120 IVFAIL = IVFAIL + 1 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 0131 CONTINUE C C **** FCVS PROGRAM 256 - TEST 013 **** C C TEST 013 CHECKS THAT THE VALUE RETAINED FOR THE DO-VARIABLE C IN THE PREVIOUS TEST IS EQUAL TO THE INITIAL PARAMETER VALUE - M3. C C IVTNUM = 13 IF (ICZERO) 30130, 0130, 30130 0130 CONTINUE IVCOMP = 0 IVCOMP = IVON01 IVCORR = 10 40130 IF ( IVCOMP - 10 ) 20130, 10130, 20130 30130 IVDELE = IVDELE + 1 WRITE (I02,80000) IVTNUM IF (ICZERO) 10130, 0141, 20130 10130 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0141 20130 IVFAIL = IVFAIL + 1 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 0141 CONTINUE C C **** FCVS PROGRAM 256 - TEST 014 **** C C TEST 014 CHECKS FOR ONE EXECUTION OF THE RANGE OF A DO-LOOP C ACCORDING TO THE FORMULA SHOWN IN 11.10.3(3) WITH M1 = M2. C C THE DO-LOOPS IN THIS TEST ARE A NEST OF THREE EACH WITH ITS C OWN TERMINAL STATEMENT. C C IVTNUM = 14 IF (ICZERO) 30140, 0140, 30140 0140 CONTINUE IVCOMP = 1 DO 0144 IVON01 = 1, 1, 1 IVCOMP = IVCOMP * 2 DO 0143 IVON02 = 10,10,10 IVCOMP = IVCOMP * 3 DO 0142, IVON03 = 100, 100, -2 IVCOMP = IVCOMP * 5 0142 CONTINUE 0143 CONTINUE 0144 CONTINUE C C **** IVCOMP IS DETERMINED BY IVCOMP = 30 = 1 * 2 * 3 * 5 *** C IVCORR = 30 40140 IF ( IVCOMP - 30 ) 20140, 10140, 20140 30140 IVDELE = IVDELE + 1 WRITE (I02,80000) IVTNUM IF (ICZERO) 10140, 0151, 20140 10140 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0151 20140 IVFAIL = IVFAIL + 1 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 0151 CONTINUE C C **** FCVS PROGRAM 256 - TEST 015 **** C C TEST 015 IS A CHECK ON THE FIRST EXAMPLE SHOWN IN SECTION C 11.10.7. THIS IS A TEST OF INCREMENTATION PROCESSING OF TWO NEST C DO-LOOPS HAVING THE SAME TERMINAL STATEMENT. C C THIS IS A TEST OF A DO-LOOP THAT BECOMES ACTIVE INSIDE AN C ALREADY ACTIVE DO-LOOP. C C IVTNUM = 15 IF (ICZERO) 30150, 0150, 30150 0150 CONTINUE IVCOMP = 0 IVON01 = 0 DO 0152 IVON02 = 1, 10 IVON03 = IVON02 DO 0152 IVON04 = 1, 5 IVON05 = IVON04 0152 IVON01 = IVON01 + 1 0153 CONTINUE IVCOMP = IVON02 C THIS IS THE VALUE FOR I IN THE EXAMPLE. IVCORR = 11 40150 IF ( IVCOMP - 11 ) 20150, 10150, 20150 30150 IVDELE = IVDELE + 1 WRITE (I02,80000) IVTNUM IF (ICZERO) 10150, 0161, 20150 10150 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0161 20150 IVFAIL = IVFAIL + 1 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 0161 CONTINUE C C **** FCVS PROGRAM 256 - TEST 016 **** C C TEST 016 CHECKS THE VALUE OF J (IVON03) IN THE FIRST EXAMPLE. C C IVTNUM = 16 IF (ICZERO) 30160, 0160, 30160 0160 CONTINUE IVCOMP = 0 IVCOMP = IVON03 IVCORR = 10 40160 IF ( IVCOMP - 10 ) 20160, 10160, 20160 30160 IVDELE = IVDELE + 1 WRITE (I02,80000) IVTNUM IF (ICZERO) 10160, 0171, 20160 10160 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0171 20160 IVFAIL = IVFAIL + 1 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 0171 CONTINUE C C **** FCVS PROGRAM 256 - TEST 017 **** C C TEST 017 CHECKS THE VALUE OF K (IVON04) IN THE FIRST EXAMPLE. C C IVTNUM = 17 IF (ICZERO) 30170, 0170, 30170 0170 CONTINUE IVCOMP = 0 IVCOMP = IVON04 IVCORR = 6 40170 IF ( IVCOMP - 6 ) 20170, 10170, 20170 30170 IVDELE = IVDELE + 1 WRITE (I02,80000) IVTNUM IF (ICZERO) 10170, 0181, 20170 10170 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0181 20170 IVFAIL = IVFAIL + 1 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 0181 CONTINUE C C **** FCVS PROGRAM 256 - TEST 018 **** C C TEST 018 CHECKS THE VALUE OF L (IVON05) IN THE FIRST EXAMPLE. C C IVTNUM = 18 IF (ICZERO) 30180, 0180, 30180 0180 CONTINUE IVCOMP = 0 IVCOMP = IVON05 IVCORR = 5 40180 IF ( IVCOMP - 5 ) 20180, 10180, 20180 30180 IVDELE = IVDELE + 1 WRITE (I02,80000) IVTNUM IF (ICZERO) 10180, 0191, 20180 10180 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0191 20180 IVFAIL = IVFAIL + 1 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 0191 CONTINUE C C **** FCVS PROGRAM 256 - TEST 019 **** C C TEST 019 CHECKS THE VALUE OF N (IVON01) IN THE FIRST EXAMPLE. C C IVTNUM = 19 IF (ICZERO) 30190, 0190, 30190 0190 CONTINUE IVCOMP = 0 IVCOMP = IVON01 IVCORR = 50 40190 IF ( IVCOMP - 50 ) 20190, 10190, 20190 30190 IVDELE = IVDELE + 1 WRITE (I02,80000) IVTNUM IF (ICZERO) 10190, 0201, 20190 10190 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0201 20190 IVFAIL = IVFAIL + 1 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 0201 CONTINUE C C **** FCVS PROGRAM 256 - TEST 020 **** C C TEST 020 IS A CHECK ON THE SECOND EXAMPLE IN SECTION 11.10.7. C IN THIS EXAMPLE, THE INNER DO-LOOP BECOMES ACTIVE AND THEN C IMMEDIATELY INACTIVE INSIDE AN ALREADY ACTIVE OUTER DO-LOOP. C C ALTHOUGH IN SOME WAYS SIMILAR TO THE FIRST EXAMPLE, THE SECOND C EXAMPLE SHOULD HAVE DIFFERENT FINAL VALUES ON THE INTEGER COUNTERS C AND THE VALUE OF L (IVON10) WILL NOT BE TESTED BECAUSE IT IS NOT C DEFINED DURING THE RANGE OF THE DO-LOOP INVOLVED. C C IVTNUM = 20 IF (ICZERO) 30200, 0200, 30200 0200 CONTINUE IVCOMP = 0 IVON06 = 0 DO 0202 IVON07 = 1, 10 IVON08 = IVON07 DO 0202 IVON09 = 5, 1 IVON10 = IVON09 0202 IVON06 = IVON06 + 1 0203 CONTINUE IVCOMP = IVON07 C THIS IS THE VALUE FOR I IN THE SECOND EXAMPLE. IVCORR = 11 40200 IF ( IVCOMP - 11 ) 20200, 10200, 20200 30200 IVDELE = IVDELE + 1 WRITE (I02,80000) IVTNUM IF (ICZERO) 10200, 0211, 20200 10200 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0211 20200 IVFAIL = IVFAIL + 1 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 0211 CONTINUE C C **** FCVS PROGRAM 256 - TEST 021 **** C C TEST 021 CHECKS THE VALUE OF J (IVON08) IN THE SECOND EXAMPLE. C C IVTNUM = 21 IF (ICZERO) 30210, 0210, 30210 0210 CONTINUE IVCOMP = 0 IVCOMP = IVON08 IVCORR = 10 40210 IF ( IVCOMP - 10 ) 20210, 10210, 20210 30210 IVDELE = IVDELE + 1 WRITE (I02,80000) IVTNUM IF (ICZERO) 10210, 0221, 20210 10210 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0221 20210 IVFAIL = IVFAIL + 1 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 0221 CONTINUE C C **** FCVS PROGRAM 256 - TEST 022 **** C C TEST 022 CHECKS THE VALUE OF K (IVON09) IN THE SECOND EXAMPLE. C C IVTNUM = 22 IF (ICZERO) 30220, 0220, 30220 0220 CONTINUE IVCOMP = 0 IVCOMP = IVON09 IVCORR = 5 40220 IF ( IVCOMP - 5 ) 20220, 10220, 20220 30220 IVDELE = IVDELE + 1 WRITE (I02,80000) IVTNUM IF (ICZERO) 10220, 0231, 20220 10220 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0231 20220 IVFAIL = IVFAIL + 1 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 0231 CONTINUE C C **** FCVS PROGRAM 256 - TEST 023 **** C C TEST 023 CHECKS THE VALUE OF N (IVON06) IN THE SECOND EXAMPLE. C C IVTNUM = 23 IF (ICZERO) 30230, 0230, 30230 0230 CONTINUE IVCOMP = 0 IVCOMP = IVON06 IVCORR = 0 40230 IF ( IVCOMP - 0 ) 20230, 10230, 20230 30230 IVDELE = IVDELE + 1 WRITE (I02,80000) IVTNUM IF (ICZERO) 10230, 0241, 20230 10230 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0241 20230 IVFAIL = IVFAIL + 1 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 0241 CONTINUE C C **** FCVS PROGRAM 256 - TEST 024 **** C C TEST 024 IS A CHECK ON USING A LOGICAL IF STATEMENT AS THE C TERMINAL STATEMENT IN THE RANGE OF A DO-LOOP. THE LOGICAL IF C STATEMENT HAS AN UNCONDITIONAL GO TO STATEMENT AS ITS EXECUTABLE C STATEMENT AS ALLOWED IN SECTION 11.10. C C IVTNUM = 24 IF (ICZERO) 30240, 0240, 30240 0240 CONTINUE IVCOMP = 0 DO 0242 IVON01 = 1, 10 IVCOMP = IVCOMP + 1 0242 IF ( IVON01 .GE. 5 ) GO TO 0243 C C C IF THE LOGIC DOES NOT BRANCH OUT OF THE RANGE OF THE DO-LOOP WHEN C THE DO-VARIABLE (IVON01) IS EQUAL TO FIVE (5), THEN IVCOMP WILL BE C SET BACK TO THE VALUE OF ZERO. C IVCOMP = 0 C C 0243 IVCORR = 5 40240 IF ( IVCOMP - 5 ) 20240, 10240, 20240 30240 IVDELE = IVDELE + 1 WRITE (I02,80000) IVTNUM IF (ICZERO) 10240, 0251, 20240 10240 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0251 20240 IVFAIL = IVFAIL + 1 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 0251 CONTINUE C C C WRITE OUT TEST SUMMARY C WRITE (I02,90004) WRITE (I02,90014) WRITE (I02,90004) WRITE (I02,90000) WRITE (I02,90004) WRITE (I02,90020) IVFAIL WRITE (I02,90022) IVPASS WRITE (I02,90024) IVDELE STOP 90001 FORMAT (1H ,24X,5HFM256) 90000 FORMAT (1H ,20X,20HEND OF PROGRAM FM256) C C FORMATS FOR TEST DETAIL LINES C 80000 FORMAT (1H ,4X,I5,6X,7HDELETED) 80002 FORMAT (1H ,4X,I5,7X,4HPASS) 80010 FORMAT (1H ,4X,I5,7X,4HFAIL,10X,I6,9X,I6) 80012 FORMAT (1H ,4X,I5,7X,4HFAIL,4X,E12.5,3X,E12.5) 80018 FORMAT (1H ,4X,I5,7X,4HFAIL,2X,A14,1X,A14) C C FORMAT STATEMENTS FOR PAGE HEADERS C 90002 FORMAT (1H1) 90004 FORMAT (1H ) 90006 FORMAT (1H ,10X,34HFORTRAN COMPILER VALIDATION SYSTEM) 90008 FORMAT (1H ,21X,11HVERSION 1.0) 90010 FORMAT (1H ,8X,38HFOR OFFICIAL USE ONLY - COPYRIGHT 1978) 90012 FORMAT (1H ,5X,4HTEST,5X,9HPASS/FAIL,5X,8HCOMPUTED,8X,7HCORRECT) 90014 FORMAT (1H ,5X,46H----------------------------------------------) 90016 FORMAT (1H ,18X,17HSUBSET LEVEL TEST) C C FORMAT STATEMENTS FOR RUN SUMMARY C 90020 FORMAT (1H ,19X,I5,13H TESTS FAILED) 90022 FORMAT (1H ,19X,I5,13H TESTS PASSED) 90024 FORMAT (1H ,19X,I5,14H TESTS DELETED) END