PROGRAM FM012 C 00010012 C COMMENT SECTION. 00020012 C 00030012 C FM012 00040012 C 00050012 C THIS ROUTINE TESTS THE FORTRAN DO - STATEMENT FROM ITS 00060012 C SIMPLIST FORMAT TO THE MORE ABBREVIATED FORMS. VARIOUS INCREMENTS00070012 C ARE USED AND BRANCHING BY VARIOUS METHODS IS TESTED FOR PASSING 00080012 C CONTROL OUT OF THE DO RANGE AND RETURNING (EXTENDED RANGE). 00090012 C NESTED DO STATEMENTS USING VARIOUS TERMINATING STATEMENTS ARE ALSO00100012 C TESTED BY THIS ROUTINE. 00110012 C 00120012 C REFERENCES 00130012 C AMERICAN NATIONAL STANDARD PROGRAMMING LANGUAGE FORTRAN, 00140012 C X3.9-1978 00150012 C 00160012 C SECTION 11.10, DO STATEMENT 00170012 C SECTION 11.10.3, EXECUTES A DO LOOP 00180012 C SECTION 11.11, CONTINUE STATEMENT 00190012 C 00200012 C 00210012 C ********************************************************** 00220012 C 00230012 C A COMPILER VALIDATION SYSTEM FOR THE FORTRAN LANGUAGE 00240012 C BASED ON SPECIFICATIONS AS DEFINED IN AMERICAN NATIONAL STANDARD 00250012 C PROGRAMMING LANGUAGE FORTRAN X3.9-1978, HAS BEEN DEVELOPED BY THE 00260012 C FEDERAL COBOL COMPILER TESTING SERVICE. THE FORTRAN COMPILER 00270012 C VALIDATION SYSTEM (FCVS) CONSISTS OF AUDIT ROUTINES, THEIR RELATED00280012 C DATA, AND AN EXECUTIVE SYSTEM. EACH AUDIT ROUTINE IS A FORTRAN 00290012 C PROGRAM, SUBPROGRAM OR FUNCTION WHICH INCLUDES TESTS OF SPECIFIC 00300012 C LANGUAGE ELEMENTS AND SUPPORTING PROCEDURES INDICATING THE RESULT 00310012 C OF EXECUTING THESE TESTS. 00320012 C 00330012 C THIS PARTICULAR PROGRAM/SUBPROGRAM/FUNCTION CONTAINS FEATURES 00340012 C FOUND ONLY IN THE SUBSET AS DEFINED IN X3.9-1978. 00350012 C 00360012 C SUGGESTIONS AND COMMENTS SHOULD BE FORWARDED TO - 00370012 C 00380012 C NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY 00390012 C SOFTWARE STANDARDS VALIDATION GROUP 00400012 C BUILDING 225 RM A266 00410012 C GAITHERSBURG, MD 20899 00420012 C ********************************************************** 00430012 C 00440012 C 00450012 C 00460012 C INITIALIZATION SECTION 00470012 C 00480012 C INITIALIZE CONSTANTS 00490012 C ************** 00500012 C I01 CONTAINS THE LOGICAL UNIT NUMBER FOR THE CARD READER. 00510012 I01 = 5 00520012 C I02 CONTAINS THE LOGICAL UNIT NUMBER FOR THE PRINTER. 00530012 I02 = 6 00540012 C SYSTEM ENVIRONMENT SECTION 00550012 C 00560012 CX010 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-010 CONTROL CARD. 00570012 C THE CX010 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I01 = 5 00580012 C (UNIT NUMBER FOR CARD READER). 00590012 CX011 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-011 CONTROL CARD. 00600012 C THE CX011 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL 00610012 C FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX010 ABOVE. 00620012 C 00630012 CX020 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-020 CONTROL CARD. 00640012 C THE CX020 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I02 = 6 00650012 C (UNIT NUMBER FOR PRINTER). 00660012 CX021 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-021 CONTROL CARD. 00670012 C THE CX021 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL 00680012 C FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX020 ABOVE. 00690012 C 00700012 IVPASS=0 00710012 IVFAIL=0 00720012 IVDELE=0 00730012 ICZERO=0 00740012 C 00750012 C WRITE PAGE HEADERS 00760012 WRITE (I02,90000) 00770012 WRITE (I02,90001) 00780012 WRITE (I02,90002) 00790012 WRITE (I02, 90002) 00800012 WRITE (I02,90003) 00810012 WRITE (I02,90002) 00820012 WRITE (I02,90004) 00830012 WRITE (I02,90002) 00840012 WRITE (I02,90011) 00850012 WRITE (I02,90002) 00860012 WRITE (I02,90002) 00870012 WRITE (I02,90005) 00880012 WRITE (I02,90006) 00890012 WRITE (I02,90002) 00900012 IVTNUM = 110 00910012 C 00920012 C TEST 110 - DO STATEMENT WITH THE COMPLETE FORMAT, INCREMENT OF 100930012 C THE LOOP SHOULD BE EXECUTED TEN (10) TIMES THUS THE LOOP 00940012 C COUNTER SHOULD HAVE A VALUE OF TEN AT THE COMPLETION OF THE 00950012 C DO-LOOP. 00960012 C 00970012 C 00980012 IF (ICZERO) 31100, 1100, 31100 00990012 1100 CONTINUE 01000012 IVON01=0 01010012 DO 1102 I=1,10,1 01020012 IVON01=IVON01+1 01030012 1102 CONTINUE 01040012 GO TO 41100 01050012 31100 IVDELE = IVDELE + 1 01060012 WRITE (I02,80003) IVTNUM 01070012 IF (ICZERO) 41100, 1111, 41100 01080012 41100 IF(IVON01-10) 21100,11100,21100 01090012 11100 IVPASS = IVPASS + 1 01100012 WRITE (I02,80001) IVTNUM 01110012 GO TO 1111 01120012 21100 IVFAIL = IVFAIL + 1 01130012 IVCOMP=IVON01 01140012 IVCORR=10 01150012 WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 01160012 1111 CONTINUE 01170012 IVTNUM = 111 01180012 C 01190012 C TEST 111 - SAME DO TEST AS IN TEST 110 EXCEPT THAT NO INCREMENT 01200012 C IS GIVEN. THE INCREMENT SHOULD BE 1 AND THE LOOP PERFORMED 01210012 C TEN (10) TIMES AS BEFORE. 01220012 C 01230012 C 01240012 IF (ICZERO) 31110, 1110, 31110 01250012 1110 CONTINUE 01260012 IVON01=0 01270012 DO 1112 J=1,10 01280012 IVON01=IVON01+1 01290012 1112 CONTINUE 01300012 GO TO 41110 01310012 31110 IVDELE = IVDELE + 1 01320012 WRITE (I02,80003) IVTNUM 01330012 IF (ICZERO) 41110, 1121, 41110 01340012 41110 IF(IVON01-10) 21110, 11110, 21110 01350012 11110 IVPASS = IVPASS + 1 01360012 WRITE (I02,80001) IVTNUM 01370012 GO TO 1121 01380012 21110 IVFAIL = IVFAIL + 1 01390012 IVCOMP=IVON01 01400012 IVCORR=10 01410012 WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 01420012 1121 CONTINUE 01430012 IVTNUM = 112 01440012 C 01450012 C TEST 112 - DO STATEMENT WITH AN INCREMENT OTHER THAN ONE (1). 01460012 C THE DO - LOOP SHOULD BE EXECUTED FIVE (5) TIMES THUS 01470012 C THE VALUE OF THE LOOP COUNTER SHOULD BE FIVE (5) AT THE 01480012 C END OF THE DO - LOOP. 01490012 C 01500012 C 01510012 IF (ICZERO) 31120, 1120, 31120 01520012 1120 CONTINUE 01530012 IVON01=0 01540012 DO 1122 K = 1, 10, 2 01550012 IVON01=IVON01+1 01560012 1122 CONTINUE 01570012 GO TO 41120 01580012 31120 IVDELE = IVDELE + 1 01590012 WRITE (I02,80003) IVTNUM 01600012 IF (ICZERO) 41120, 1131, 41120 01610012 41120 IF (IVON01 - 5 ) 21120, 11120, 21120 01620012 11120 IVPASS = IVPASS + 1 01630012 WRITE (I02,80001) IVTNUM 01640012 GO TO 1131 01650012 21120 IVFAIL = IVFAIL + 1 01660012 IVCOMP=IVON01 01670012 IVCORR=5 01680012 WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 01690012 1131 CONTINUE 01700012 IVTNUM = 113 01710012 C 01720012 C TEST 113 - DO STATEMENT WITH THE INITIAL VALUE EQUAL TO THE 01730012 C TERMINAL VALUE. THE DO - LOOP SHOULD BE EXECUTED ONE (1) 01740012 C TIME THUS THE VALUE OF THE LOOP COUNTER SHOULD BE ONE (1). 01750012 C 01760012 C 01770012 IF (ICZERO) 31130, 1130, 31130 01780012 1130 CONTINUE 01790012 IVON01=0 01800012 DO 1132 L = 2, 2 01810012 IVON01=IVON01+1 01820012 1132 CONTINUE 01830012 GO TO 41130 01840012 31130 IVDELE = IVDELE + 1 01850012 WRITE (I02,80003) IVTNUM 01860012 IF (ICZERO) 41130, 1141, 41130 01870012 41130 IF ( IVON01 - 1 ) 21130, 11130, 21130 01880012 11130 IVPASS = IVPASS + 1 01890012 WRITE (I02,80001) IVTNUM 01900012 GO TO 1141 01910012 21130 IVFAIL = IVFAIL + 1 01920012 IVCOMP=IVON01 01930012 IVCORR=1 01940012 WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 01950012 1141 CONTINUE 01960012 IVTNUM = 114 01970012 C 01980012 C TEST 114 - THIS TESTS THE UNCONDITIONAL BRANCH OUT OF THE 01990012 C RANGE OF THE DO USING THE GO TO STATEMENT. THE DO INDEX 02000012 C SHOULD RETAIN THE VALUE IT HAD WHEN THE UNCONDITIONAL BRANCH02010012 C WAS MADE. SINCE THE DO LOOP ONLY CONTAINS AN UNCONDITIONAL 02020012 C BRANCH, THE VALUE OF THE DO INDEX SHOULD BE ITS INITIAL 02030012 C VALUE. IN THIS CASE THE VALUE SHOULD BE ONE (1). 02040012 C SEE SECTION 11.10. 02050012 C 02060012 C 02070012 IF (ICZERO) 31140, 1140, 31140 02080012 1140 CONTINUE 02090012 DO 1142 M=1,10 02100012 GO TO 1143 02110012 1142 CONTINUE 02120012 1143 CONTINUE 02130012 GO TO 41140 02140012 31140 IVDELE = IVDELE + 1 02150012 WRITE (I02,80003) IVTNUM 02160012 IF (ICZERO) 41140, 1151, 41140 02170012 41140 IF ( M - 1 ) 21140, 11140, 21140 02180012 11140 IVPASS = IVPASS + 1 02190012 WRITE (I02,80001) IVTNUM 02200012 GO TO 1151 02210012 21140 IVFAIL = IVFAIL + 1 02220012 IVCOMP=M 02230012 IVCORR=1 02240012 WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 02250012 1151 CONTINUE 02260012 IVTNUM = 115 02270012 C 02280012 C TEST 115 - THIS TEST IS SIMILAR TO TEST 114 IN THAT THE DO 02290012 C RANGE HAS ONLY AN UNCONDITIONAL BRANCH OUTSIDE OF THE RANGE.02300012 C THE DO INDEX SHOULD AGAIN RETAIN ITS VALUE, IN THIS CASE 02310012 C ITS INITIAL VALUE OF ONE (1). 02320012 C SEE SECTION 11.10. 02330012 C 02340012 C 02350012 IF (ICZERO) 31150, 1150, 31150 02360012 1150 CONTINUE 02370012 DO 1152 N = 1, 10 02380012 IF ( N - 1 ) 1152, 1153, 1152 02390012 1152 CONTINUE 02400012 1153 CONTINUE 02410012 GO TO 41150 02420012 31150 IVDELE = IVDELE + 1 02430012 WRITE (I02,80003) IVTNUM 02440012 IF (ICZERO) 41150, 1161, 41150 02450012 41150 IF (N - 1 ) 21150, 11150, 21150 02460012 11150 IVPASS = IVPASS + 1 02470012 WRITE (I02,80001) IVTNUM 02480012 GO TO 1161 02490012 21150 IVFAIL = IVFAIL + 1 02500012 IVCOMP=N 02510012 IVCORR=1 02520012 WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 02530012 1161 CONTINUE 02540012 IVTNUM = 116 02550012 C 02560012 C TEST 116 - THIS IS A TEST OF A NEST OF TWO DO RANGES. TWO 02570012 C SEPARATE CONTINUE STATEMENTS ARE USED AS TERMINAL STATEMENTS02580012 C FOR THE TWO RESPECTIVE DO RANGES. THE OUTER LOOP SHOULD BE 02590012 C PERFORMED TEN (10) TIMES AND THE INNER LOOP SHOULD BE 02600012 C PERFORMED TWICE FOR EACH EXECUTION OF THE OUTER LOOP. THE 02610012 C LOOP COUNTER SHOULD HAVE A VALUE OF TWENTY (20) SINCE IT 02620012 C IS INCREMENTED IN THE INNER DO - LOOP. 02630012 C SEE SECTION 11.10.3. 02640012 C 02650012 C 02660012 IF (ICZERO) 31160, 1160, 31160 02670012 1160 CONTINUE 02680012 IVON01=0 02690012 DO 1163 I=1,10,1 02700012 DO 1162 J=1,2,1 02710012 IVON01=IVON01+1 02720012 1162 CONTINUE 02730012 1163 CONTINUE 02740012 GO TO 41160 02750012 31160 IVDELE = IVDELE + 1 02760012 WRITE (I02,80003) IVTNUM 02770012 IF (ICZERO) 41160, 1171, 41160 02780012 41160 IF ( IVON01 - 20 ) 21160, 11160, 21160 02790012 11160 IVPASS = IVPASS + 1 02800012 WRITE (I02,80001) IVTNUM 02810012 GO TO 1171 02820012 21160 IVFAIL = IVFAIL + 1 02830012 IVCOMP=IVON01 02840012 IVCORR=20 02850012 WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 02860012 1171 CONTINUE 02870012 IVTNUM = 117 02880012 C 02890012 C TEST 117 - THIS IS BASICALLY THE SAME AS TEST 116 EXCEPT THAT 02900012 C ONLY ONE CONTINUE STATEMENT IS USED AS THE TERMINATING 02910012 C STATEMENT FOR BOTH OF THE DO RANGES. THE VALUE OF THE 02920012 C LOOP COUNTER SHOULD AGAIN BE TWENTY (20). 02930012 C 02940012 C 02950012 IF (ICZERO) 31170, 1170, 31170 02960012 1170 CONTINUE 02970012 IVON01=0 02980012 DO 1172 K=1,10,1 02990012 DO 1172 L=1,2,1 03000012 IVON01=IVON01+1 03010012 1172 CONTINUE 03020012 GO TO 41170 03030012 31170 IVDELE = IVDELE + 1 03040012 WRITE (I02,80003) IVTNUM 03050012 IF (ICZERO) 41170, 1181, 41170 03060012 41170 IF (IVON01 - 20 ) 21170, 11170, 21170 03070012 11170 IVPASS = IVPASS + 1 03080012 WRITE (I02,80001) IVTNUM 03090012 GO TO 1181 03100012 21170 IVFAIL = IVFAIL + 1 03110012 IVCOMP=IVON01 03120012 IVCORR=20 03130012 WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 03140012 1181 CONTINUE 03150012 IVTNUM = 118 03160012 C 03170012 C TEST 118 - THIS IS BASICALLY THE SAME TEST AS 116 EXCEPT 03180012 C THAT THE LOOP COUNTER INCREMENT IS THE TERMINATING STATEMENT03190012 C OF BOTH OF THE DO RANGES. THE VALUE OF THE LOOP COUNTER 03200012 C SHOULD BE TWENTY (20), BUT THE NUMBER OF EXECUTIONS OF 03210012 C THE OUTER LOOP IS NOW TWO (2) AND THE INNER LOOP EXECUTES 03220012 C TEN (10) TIMES FOR EVERY EXECUTION OF THE OUTER LOOP. 03230012 C 03240012 C 03250012 IF (ICZERO) 31180, 1180, 31180 03260012 1180 CONTINUE 03270012 IVON01=0 03280012 DO 1182 M=1,2,1 03290012 DO 1182 N=1,10,1 03300012 1182 IVON01 = IVON01 + 1 03310012 GO TO 41180 03320012 31180 IVDELE = IVDELE + 1 03330012 WRITE (I02,80003) IVTNUM 03340012 IF (ICZERO) 41180, 1191, 41180 03350012 41180 IF (IVON01 - 20 ) 21180, 11180, 21180 03360012 11180 IVPASS = IVPASS + 1 03370012 WRITE (I02,80001) IVTNUM 03380012 GO TO 1191 03390012 21180 IVFAIL = IVFAIL + 1 03400012 IVCOMP=IVON01 03410012 IVCORR=20 03420012 WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 03430012 1191 CONTINUE 03440012 IVTNUM = 119 03450012 C 03460012 C TEST 119 - THIS IS A TEST OF AN UNCONDITIONAL BRANCH OUT OF A 03470012 C NESTED DO RANGE QUITE LIKE TEST 114. THE LOOP COUNTER 03480012 C SHOULD ONLY BE INCREMENTED ON THE OUTER LOOP RANGE SO 03490012 C THE FINAL VALUE OF THE LOOP COUNTER SHOULD BE TEN (10). 03500012 C 03510012 C 03520012 IF (ICZERO) 31190, 1190, 31190 03530012 1190 CONTINUE 03540012 IVON01=0 03550012 DO 1194 I=1,10,1 03560012 DO 1193 J=1,2,1 03570012 C 03580012 C THE FOLLOWING STATEMENT IS TO ELIMINATE THE DEAD CODE PRODUCED 03590012 C BY THE STATEMENT GO TO 1194. 03600012 C 03610012 IF ( ICZERO ) 1193, 1192, 1193 03620012 C 03630012 1192 GO TO 1194 03640012 1193 IVON01 = IVON01 + 1 03650012 1194 IVON01 = IVON01 + 1 03660012 GO TO 41190 03670012 31190 IVDELE = IVDELE + 1 03680012 WRITE (I02,80003) IVTNUM 03690012 IF (ICZERO) 41190, 1201, 41190 03700012 41190 IF ( IVON01 - 10 ) 21190, 11190, 21190 03710012 11190 IVPASS = IVPASS + 1 03720012 WRITE (I02,80001) IVTNUM 03730012 GO TO 1201 03740012 21190 IVFAIL = IVFAIL + 1 03750012 IVCOMP=IVON01 03760012 IVCORR=10 03770012 WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 03780012 1201 CONTINUE 03790012 IVTNUM = 120 03800012 C 03810012 C TEST 120 - THIS IS BASICALLY THE SAME TEST AS TEST 119 EXCEPT 03820012 C THAT AN IF STATEMENT IS USED TO BRANCH OUT OF THE INNER LOOP03830012 C WITHOUT INCREMENTING THE LOOP COUNTER. THE VALUE OF THE 03840012 C LOOP COUNTER SHOULD AGAIN BE TEN (10). 03850012 C 03860012 C 03870012 IF (ICZERO) 31200, 1200, 31200 03880012 1200 CONTINUE 03890012 IVON01=0 03900012 DO 1203 I=1,10,1 03910012 DO 1202 J=1,2,1 03920012 IF ( J - 1 ) 1203, 1203, 1202 03930012 1202 IVON01 = IVON01 + 1 03940012 1203 IVON01 = IVON01 + 1 03950012 GO TO 41200 03960012 31200 IVDELE = IVDELE + 1 03970012 WRITE (I02,80003) IVTNUM 03980012 IF (ICZERO) 41200, 1211, 41200 03990012 41200 IF ( IVON01 - 10 ) 21200, 11200, 21200 04000012 11200 IVPASS = IVPASS + 1 04010012 WRITE (I02,80001) IVTNUM 04020012 GO TO 1211 04030012 21200 IVFAIL = IVFAIL + 1 04040012 IVCOMP=IVON01 04050012 IVCORR=10 04060012 WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 04070012 1211 CONTINUE 04080012 IVTNUM = 121 04090012 C 04100012 C TEST 121 - THIS IS A TEST OF DO NESTS WITHIN DO NESTS. THE 04110012 C LOOP COUNTER SHOULD HAVE A FINAL VALUE OF EIGHTY-FOUR (84). 04120012 C 04130012 C 04140012 IF (ICZERO) 31210, 1210, 31210 04150012 1210 CONTINUE 04160012 IVON01=0 04170012 DO 1216 I1=1,2,1 04180012 DO 1213 I2=1,3,1 04190012 DO 1212 I3=1,4,1 04200012 IVON01=IVON01+1 04210012 1212 CONTINUE 04220012 1213 CONTINUE 04230012 DO 1215 I4=1,5,1 04240012 DO 1214 I5=1,6,1 04250012 IVON01=IVON01+1 04260012 1214 CONTINUE 04270012 1215 CONTINUE 04280012 1216 CONTINUE 04290012 GO TO 41210 04300012 31210 IVDELE = IVDELE + 1 04310012 WRITE (I02,80003) IVTNUM 04320012 IF (ICZERO) 41210, 1221, 41210 04330012 41210 IF ( IVON01 - 84 ) 21210, 11210, 21210 04340012 11210 IVPASS = IVPASS + 1 04350012 WRITE (I02,80001) IVTNUM 04360012 GO TO 1221 04370012 21210 IVFAIL = IVFAIL + 1 04380012 IVCOMP=IVON01 04390012 IVCORR=84 04400012 WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 04410012 1221 CONTINUE 04420012 IVTNUM = 122 04430012 C 04440012 C TEST 122 - THIS IS AGAIN A TEST OF DO NESTS BUT COMBINED WITH 04450012 C ARITHMETIC IF STATEMENT BRANCHES WITHIN THE DO RANGE. THE 04460012 C FINAL LOOP COUNTER VALUE SHOULD BE EIGHTEEN (18). 04470012 C 04480012 C 04490012 IF (ICZERO) 31220, 1220, 31220 04500012 1220 CONTINUE 04510012 IVON01=0 04520012 DO 1228 I1=1,3,1 04530012 DO 1223 I2=1,4,1 04540012 IF ( I2 - 3 ) 1222, 1224, 1224 04550012 1222 IVON01 = IVON01 + 1 04560012 1223 CONTINUE 04570012 1224 DO 1226 I3=1,5,1 04580012 IF ( I3 - 3 ) 1225, 1225, 1227 04590012 1225 IVON01 = IVON01 + 1 04600012 1226 CONTINUE 04610012 1227 CONTINUE 04620012 1228 CONTINUE 04630012 GO TO 41220 04640012 31220 IVDELE = IVDELE + 1 04650012 WRITE (I02,80003) IVTNUM 04660012 IF (ICZERO) 41220, 1231, 41220 04670012 41220 IF ( IVON01 - 15 ) 21220, 11220, 21220 04680012 11220 IVPASS = IVPASS + 1 04690012 WRITE (I02,80001) IVTNUM 04700012 GO TO 1231 04710012 21220 IVFAIL = IVFAIL + 1 04720012 IVCOMP=IVON01 04730012 IVCORR=15 04740012 WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 04750012 1231 CONTINUE 04760012 IVTNUM = 124 04950012 C 04960012 C TEST 124 - THIS IS A TEST OF A TRIPLE NESTED DO RANGE WITH 04970012 C AN UNCONDITIONAL GO TO STATEMENT BRANCH IN THE INNERMOST 04980012 C NESTED DO TO THE COMMON TERMINAL STATEMENT. THE FINAL 04990012 C LOOP COUNTER VALUE SHOULD BE ONE HUNDRED AND FORTY-TWO (142)05000012 C THE INITIAL VALUE OF THE INNERMOST DO RANGE IS TWO (2). 05010012 C 05020012 C 05030012 IF (ICZERO) 31240, 1240, 31240 05040012 1240 CONTINUE 05050012 IVON01=0 05060012 DO 1242 I2=1,5,1 05070012 DO 1242 I3=2,8,1 05080012 DO 1242 I1=1,4,1 05090012 IVON01=IVON01+1 05100012 GO TO 1242 05110012 1242 CONTINUE 05120012 GO TO 41240 05130012 31240 IVDELE = IVDELE + 1 05140012 WRITE (I02,80003) IVTNUM 05150012 IF (ICZERO) 41240, 1251, 41240 05160012 41240 IF ( IVON01 - 140 ) 21240, 11240, 21240 05170012 11240 IVPASS = IVPASS + 1 05180012 WRITE (I02,80001) IVTNUM 05190012 GO TO 1251 05200012 21240 IVFAIL = IVFAIL + 1 05210012 IVCOMP=IVON01 05220012 IVCORR=140 05230012 WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 05240012 1251 CONTINUE 05250012 IVTNUM = 125 05260012 C 05270012 C TEST 125 - THIS IS BASICALLY THE SAME AS TEST 124 EXCEPT THAT 05280012 C AN ARITHMETIC IF BRANCH IS USED INSTEAD OF THE GO TO 05290012 C STATEMENT FOR THE BRANCH TO THE TERMINAL STATEMENT COMMON 05300012 C TO ALL THREE OF THE DO RANGES. 05310012 C THE FINAL VALUE OF THE LOOP COUNTER SHOULD BE ONE 05320012 C HUNDRED AND FORTY (140). 05330012 C 05340012 C 05350012 IF (ICZERO) 31250, 1250, 31250 05360012 1250 CONTINUE 05370012 IVON01=0 05380012 DO 1252 I1=1,4,1 05390012 DO 1252 I2=1,5,1 05400012 DO 1252 I3=2,8,1 05410012 IVON01=IVON01+1 05420012 IF ( I3 - 9 ) 1252, 1252, 1253 05430012 1252 CONTINUE 05440012 1253 CONTINUE 05450012 GO TO 41250 05460012 31250 IVDELE = IVDELE + 1 05470012 WRITE (I02,80003) IVTNUM 05480012 IF (ICZERO) 41250, 1261, 41250 05490012 41250 IF ( IVON01 - 140 ) 21250, 11250, 21250 05500012 11250 IVPASS = IVPASS + 1 05510012 WRITE (I02,80001) IVTNUM 05520012 GO TO 1261 05530012 21250 IVFAIL = IVFAIL + 1 05540012 IVCOMP=IVON01 05550012 IVCORR=140 05560012 WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 05570012 1261 CONTINUE 05580012 C 05590012 C WRITE PAGE FOOTINGS AND RUN SUMMARIES 05600012 99999 CONTINUE 05610012 WRITE (I02,90002) 05620012 WRITE (I02,90006) 05630012 WRITE (I02,90002) 05640012 WRITE (I02,90002) 05650012 WRITE (I02,90007) 05660012 WRITE (I02,90002) 05670012 WRITE (I02,90008) IVFAIL 05680012 WRITE (I02,90009) IVPASS 05690012 WRITE (I02,90010) IVDELE 05700012 C 05710012 C 05720012 C TERMINATE ROUTINE EXECUTION 05730012 STOP 05740012 C 05750012 C FORMAT STATEMENTS FOR PAGE HEADERS 05760012 90000 FORMAT ("1") 05770012 90002 FORMAT (" ") 05780012 90001 FORMAT (" ",10X,"FORTRAN COMPILER VALIDATION SYSTEM" ) 05790012 90003 FORMAT (" ",21X,"VERSION 2.1" ) 05800012 90004 FORMAT (" ",10X,"FOR OFFICIAL USE ONLY - COPYRIGHT 1978" ) 05810012 90005 FORMAT (" ",5X,"TEST",5X,"PASS/FAIL", 5X,"COMPUTED",8X,"CORRECT") 05820012 90006 FORMAT (" ",5X,"----------------------------------------------" ) 05830012 90011 FORMAT (" ",18X,"SUBSET LEVEL TEST" ) 05840012 C 05850012 C FORMAT STATEMENTS FOR RUN SUMMARIES 05860012 90008 FORMAT (" ",15X,I5," ERRORS ENCOUNTERED" ) 05870012 90009 FORMAT (" ",15X,I5," TESTS PASSED" ) 05880012 90010 FORMAT (" ",15X,I5," TESTS DELETED" ) 05890012 C 05900012 C FORMAT STATEMENTS FOR TEST RESULTS 05910012 80001 FORMAT (" ",4X,I5,7X,"PASS") 05920012 80002 FORMAT (" ",4X,I5,7X,"FAIL") 05930012 80003 FORMAT (" ",4X,I5,7X,"DELETED") 05940012 80004 FORMAT (" ",4X,I5,7X,"FAIL",10X,I6,9X,I6) 05950012 80005 FORMAT (" ",4X,I5,7X,"FAIL",4X,E12.5,3X,E12.5) 05960012 C 05970012 90007 FORMAT (" ",20X,"END OF PROGRAM FM012" ) 05980012 END 05990012