PROGRAM FM351 00010351 C 00020351 C 00030351 C THIS PROGRAM CONTAINS TESTS FOR COMPOUND ARITHMETIC 00040351 C EXPRESSIONS WHICH NECESSITATE THE APPLICATION OF THE RULES 00050351 C FOR ARITHMETIC OPERATOR PRECEDENCE. THESE TESTS INCLUDE ONES 00060351 C WHICH EXERCIZE THE 00070351 C 00080351 C (1) USE OF ALL ARITHMETIC OPERATOR TYPES IN THE SAME STATEMENT. 00090351 C (2) USE OF PARENTHESES TO OVERRIDE DEFAULT PRECEDENCES. 00100351 C (3) USE OF ALL CLASSES OF PRIMARY OPERANDS. 00110351 C (4) USE OF NESTED FUNCTION REFERENCES. 00120351 C (5) USE OF MIXED DATA TYPES. 00130351 C 00140351 C REFERENCES - 00150351 C 00160351 C AMERICAN NATIONAL STANDARD PROGRAMMING LANGUAGE FORTRAN, X3.9-197700170351 C 00180351 C SECTION 6.1 ARITHMETIC EXPRESSIONS 00190351 C SECTION 6.5 PRECEDENCE OF OPERATORS 00200351 C SECTION 6.6 EVALUATION OF EXPRESSIONS 00210351 C 00220351 C 00230351 C ******************************************************************00240351 C A COMPILER VALIDATION SYSTEM FOR THE FORTRAN LANGUAGE 00250351 C BASED ON SPECIFICATIONS AS DEFINED IN AMERICAN STANDARD FORTRAN 00260351 C X3.9-1978, HAS BEEN DEVELOPED BY THE DEPARTMENT OF THE NAVY. THE 00270351 C FORTRAN COMPILER VALIDATION SYSTEM (FCVS) CONSISTS OF AUDIT 00280351 C ROUTINES, THEIR RELATED DATA, AND AN EXECUTIVE SYSTEM. EACH AUDIT00290351 C ROUTINE IS A FORTRAN PROGRAM OR SUBPROGRAM WHICH INCLUDES TESTS 00300351 C OF SPECIFIC LANGUAGE ELEMENTS AND SUPPORTING PROCEDURES INDICATING00310351 C THE RESULT OF EXECUTING THESE TESTS. 00320351 C 00330351 C THIS PARTICULAR PROGRAM OR SUBPROGRAM CONTAINS ONLY FEATURES 00340351 C FOUND IN THE SUBSET LEVEL OF THE STANDARD. 00350351 C 00360351 C SUGGESTIONS AND COMMENTS SHOULD BE FORWARDED TO 00370351 C NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY 00380351 C SOFTWARE STANDARDS VALIDATION GROUP 00390351 C BUILDING 225 RM A266 00400351 C GAITHERSBURG, MD 20899 00410351 C ******************************************************************00420351 C 00430351 C 00440351 IMPLICIT LOGICAL (L) 00450351 IMPLICIT CHARACTER*14 (C) 00460351 C 00470351 DIMENSION IADN11(5), RADN11(5) 00480351 IFOS01(IDON01,IDON02,IDON03) = IDON01 ** IDON02 ** IDON03 00490351 IFOS02(IDON04,IDON05) = IADN11(IDON04) / IADN11(IDON05) 00500351 IFOS04(IDON09,IDON10) = IADN11(IDON09) + IABS(IDON10) 00510351 IFOS03(IDON06,IDON07,IDON08) = IFOS04(IDON06,IDON07) * IDON08 00520351 RFOS01(RDON01,RDON02,RDON03) = RDON01 ** RDON02 ** RDON03 00530351 RFOS02(IDON11,IDON12) = RADN11(IDON11) / RADN11(IDON12) 00540351 RFOS04(IDON13,RDON10) = RADN11(IDON13) + ABS(RDON10) 00550351 RFOS03(RDON06,RDON07,RDON08) = RFOS04(INT(RDON06),RDON07) * RDON0800560351 IFOS05(IDON14,IDON16) = RADN11(IDON14) + IABS(IDON16) 00570351 RFOS06(RDON17,IDON18,RDON19) = IFOS05(INT(RDON17),IDON18) * RDON1900580351 C 00590351 C 00600351 C 00610351 C INITIALIZATION SECTION. 00620351 C 00630351 C INITIALIZE CONSTANTS 00640351 C ******************** 00650351 C I01 CONTAINS THE LOGICAL UNIT NUMBER FOR THE CARD READER 00660351 I01 = 5 00670351 C I02 CONTAINS THE LOGICAL UNIT NUMBER FOR THE PRINTER 00680351 I02 = 6 00690351 C SYSTEM ENVIRONMENT SECTION 00700351 C 00710351 CX010 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-010 CONTROL CARD.00720351 C THE CX010 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I01 = 5 00730351 C (UNIT NUMBER FOR CARD READER). 00740351 CX011 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-011 CONTROL CARD00750351 C THE CX011 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL 00760351 C FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX010 ABOVE. 00770351 C 00780351 CX020 THIS CARD IS PEPLACED BY CONTENTS OF FEXEC X-020 CONTROL CARD.00790351 C THE CX020 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I02 = 6 00800351 C (UNIT NUMBER FOR PRINTER). 00810351 CX021 THIS CARD IS PEPLACED BY CONTENTS OF FEXEC X-021 CONTROL CARD.00820351 C THE CX021 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL 00830351 C FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX020 ABOVE. 00840351 C 00850351 IVPASS = 0 00860351 IVFAIL = 0 00870351 IVDELE = 0 00880351 ICZERO = 0 00890351 C 00900351 C WRITE OUT PAGE HEADERS 00910351 C 00920351 WRITE (I02,90002) 00930351 WRITE (I02,90006) 00940351 WRITE (I02,90008) 00950351 WRITE (I02,90004) 00960351 WRITE (I02,90010) 00970351 WRITE (I02,90004) 00980351 WRITE (I02,90016) 00990351 WRITE (I02,90001) 01000351 WRITE (I02,90004) 01010351 WRITE (I02,90012) 01020351 WRITE (I02,90014) 01030351 WRITE (I02,90004) 01040351 C 01050351 C 01060351 C TESTS 1 THROUGH 10 DEAL ENTIRELY WITH INTEGER EXPRESSIONS. 01070351 C 01080351 C 01090351 C **** FCVS PROGRAM 351 - TEST 001 **** 01100351 C 01110351 C TEST 1 CHECKS AN INTEGER EXPRESSION WHERE ALL FIVE ARITHMETIC 01120351 C OPERATORS ARE USED AND ALL OPERAND PRIMARIES ARE SIMPLE INTEGER 01130351 C VARIABLES. NO PARENTHESES ARE USED TO UPSET DEFAULT PRECEDENCES. 01140351 C 01150351 IVTNUM = 1 01160351 IF (ICZERO) 30010, 0010, 30010 01170351 0010 CONTINUE 01180351 IVON01 = 7 01190351 IVON02 = 3 01200351 IVON03 = 573 01210351 IVON04 = 23 01220351 IVON05 = 3 01230351 IVON06 = -7 01240351 IVCOMP = IVON01 ** IVON02 + IVON03 - IVON04 * IVON05 / IVON06 01250351 IVCORR = 925 01260351 40010 IF (IVCOMP - 925) 20010, 10010, 20010 01270351 30010 IVDELE = IVDELE + 1 01280351 WRITE (I02,80000) IVTNUM 01290351 IF (ICZERO) 10010, 0021, 20010 01300351 10010 IVPASS = IVPASS + 1 01310351 WRITE (I02,80002) IVTNUM 01320351 GO TO 0021 01330351 20010 IVFAIL = IVFAIL + 1 01340351 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 01350351 0021 CONTINUE 01360351 C 01370351 C **** FCVS PROGRAM 351 - TEST 002 **** 01380351 C 01390351 C TEST 2, LIKE TEST 1, CHECKS AN INTEGER EXPRESSION WHERE ALL 01400351 C FIVE ARITHMETIC OPERATORS ARE USED AND ALL OPERANDS ARE SIMPLE 01410351 C INTEGER VARIABLES; BUT IN THIS TEST, PARENTHESES ARE USED, AS IS 01420351 C A UNARY OPERATOR. 01430351 C 01440351 IVTNUM = 2 01450351 IF (ICZERO) 30020, 0020, 30020 01460351 0020 CONTINUE 01470351 IVON01 = 7 01480351 IVON02 = 3 01490351 IVON03 = 5 01500351 IVON04 = -3 01510351 IVON05 = 3 01520351 IVCOMP = -(IVON01 / IVON02) + (IVON03 * IVON04 ** IVON05) 01530351 IVCORR = -137 01540351 40020 IF (IVCOMP + 137) 20020, 10020, 20020 01550351 30020 IVDELE = IVDELE + 1 01560351 WRITE (I02,80000) IVTNUM 01570351 IF (ICZERO) 10020, 0031, 20020 01580351 10020 IVPASS = IVPASS + 1 01590351 WRITE (I02,80002) IVTNUM 01600351 GO TO 0031 01610351 20020 IVFAIL = IVFAIL + 1 01620351 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 01630351 0031 CONTINUE 01640351 C 01650351 C **** FCVS PROGRAM 351 - TEST 003 **** 01660351 C 01670351 C TEST 3 IS SIMILAR TO TEST 2 EXCEPT THAT IT EMPLOYS NESTED 01680351 C PARENTHESES. 01690351 C 01700351 IVTNUM = 3 01710351 IF (ICZERO) 30030, 0030, 30030 01720351 0030 CONTINUE 01730351 IVON01 = 5 01740351 IVON02 = 3 01750351 IVON03 = 5 01760351 IVON04 = 17 01770351 IVON05 = 14 01780351 IVON06 = 3 01790351 IVCOMP = IVON01 ** (-(IVON02 + (IVON03 - IVON04)) - (IVON05 / 01800351 1 IVON06)) 01810351 IVCORR = 3125 01820351 40030 IF (IVCOMP - 3125) 20030, 10030, 20030 01830351 30030 IVDELE = IVDELE + 1 01840351 WRITE (I02,80000) IVTNUM 01850351 IF (ICZERO) 10030, 0041, 20030 01860351 10030 IVPASS = IVPASS + 1 01870351 WRITE (I02,80002) IVTNUM 01880351 GO TO 0041 01890351 20030 IVFAIL = IVFAIL + 1 01900351 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 01910351 0041 CONTINUE 01920351 C 01930351 C **** FCVS PROGRAM 351 - TEST 004 **** 01940351 C 01950351 C TEST 4 IS SIMILAR TO TEST 2 AND 3 EXCEPT THAT THE 01960351 C PARENTHESES USED ARE EFFECTIVELY EXTRANEOUS. 01970351 C 01980351 IVTNUM = 4 01990351 IF (ICZERO) 30040, 0040, 30040 02000351 0040 CONTINUE 02010351 IVON01 = 3 02020351 IVON02 = 4 02030351 IVON03 = 5 02040351 IVON04 = 2 02050351 IVON05 = 3 02060351 IVON06 = 4 02070351 IVCOMP = ((IVON01) ** (IVON02) + (IVON03) - (IVON04) * 02080351 1 (IVON05) / (IVON06)) 02090351 IVCORR = 85 02100351 40040 IF (IVCOMP - 85) 20040, 10040, 20040 02110351 30040 IVDELE = IVDELE + 1 02120351 WRITE (I02,80000) IVTNUM 02130351 IF (ICZERO) 10040, 0051, 20040 02140351 10040 IVPASS = IVPASS + 1 02150351 WRITE (I02,80002) IVTNUM 02160351 GO TO 0051 02170351 20040 IVFAIL = IVFAIL + 1 02180351 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 02190351 0051 CONTINUE 02200351 C 02210351 C **** FCVS PROGRAM 351 - TEST 005 **** 02220351 C 02230351 C TEST 5 CONTINUES THE TESTING OF EXPRESSIONS USING ONLY 02240351 C INTEGER VARIABLE OPERANDS CONNECTED BY ARITHMETIC OPERATORS, 02250351 C AND USING PARENTHESES TO OVERRIDE PRECEDENCES. 02260351 C 02270351 IVTNUM = 5 02280351 IF (ICZERO) 30050, 0050, 30050 02290351 0050 CONTINUE 02300351 IVON01 = 57 02310351 IVON02 = -3 02320351 IVON03 = 4 02330351 IVON04 = -1 02340351 IVON05 = -5 02350351 IVON06 = -2 02360351 IVCOMP = -IVON01 ** (IVON02 + IVON03 - IVON04) * 02370351 1 (IVON05 / IVON06) 02380351 IVCORR = -6498 02390351 40050 IF (IVCOMP + 6498) 20050, 10050, 20050 02400351 30050 IVDELE = IVDELE + 1 02410351 WRITE (I02,80000) IVTNUM 02420351 IF (ICZERO) 10050, 0061, 20050 02430351 10050 IVPASS = IVPASS + 1 02440351 WRITE (I02,80002) IVTNUM 02450351 GO TO 0061 02460351 20050 IVFAIL = IVFAIL + 1 02470351 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 02480351 0061 CONTINUE 02490351 C 02500351 C **** FCVS PROGRAM 351 - TEST 006 **** 02510351 C 02520351 C TEST 6 CONTINUES THE TESTING OF EXPRESSIONS USING ONLY 02530351 C INTEGER VARIABLE OPERANDS CONNECTED BY ARITHMETIC OPERATORS, 02540351 C AND USING PARENTHESES TO OVERRIDE PRECEDENCES. 02550351 C 02560351 IVTNUM = 6 02570351 IF (ICZERO) 30060, 0060, 30060 02580351 0060 CONTINUE 02590351 IVON01 = 5 02600351 IVON02 = 3 02610351 IVON03 = 4 02620351 IVON04 = 5496 02630351 IVON05 = 7 02640351 IVON06 = -3 02650351 IVCOMP = ((IVON01 * (IVON02 / IVON03)) + IVON04) / IVON05 - 02660351 1 (-IVON06) 02670351 IVCORR = 782 02680351 40060 IF (IVCOMP - 782) 20060, 10060, 20060 02690351 30060 IVDELE = IVDELE + 1 02700351 WRITE (I02,80000) IVTNUM 02710351 IF (ICZERO) 10060, 0071, 20060 02720351 10060 IVPASS = IVPASS + 1 02730351 WRITE (I02,80002) IVTNUM 02740351 GO TO 0071 02750351 20060 IVFAIL = IVFAIL + 1 02760351 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 02770351 0071 CONTINUE 02780351 C 02790351 C **** FCVS PROGRAM 351 - TEST 007 **** 02800351 C 02810351 C IN TEST 7, AN INTEGER EXPRESSION INVOLVING ALL FIVE 02820351 C ARITHMETIC OPERATORS TOGETHER WITH PARENTHESES IS EVALUATED, 02830351 C BUT UNLIKE TESTS 1 THROUGH 6 WHERE ALL OPERANDS WERE INTEGER 02840351 C VARIABLES, THE OPERANDS IN TEST 7 ARE CLASSED AS INTEGER 02850351 C VARIABLES, INTEGER CONSTANTS, INTEGER ARRAY ELEMENTS, AND INTEGER 02860351 C FUNCTION REFERENCES. 02870351 C 02880351 IVTNUM = 7 02890351 IF (ICZERO) 30070, 0070, 30070 02900351 0070 CONTINUE 02910351 IVON01 = 573 02920351 IVON02 = 1 02930351 IVON03 = 3 02940351 IVON04 = 2 02950351 IVON05 = 3 02960351 IADN11(3) = 3071 02970351 IVCOMP = (IVON01 + 1) - (5 + IADN11(IVON03)) / 02980351 1 (IFOS01(IVON03,IVON04,IVON05) ** IVON02) 02990351 IVCORR = 574 03000351 40070 IF (IVCOMP - 574) 20070, 10070, 20070 03010351 30070 IVDELE = IVDELE + 1 03020351 WRITE (I02,80000) IVTNUM 03030351 IF (ICZERO) 10070, 0081, 20070 03040351 10070 IVPASS = IVPASS + 1 03050351 WRITE (I02,80002) IVTNUM 03060351 GO TO 0081 03070351 20070 IVFAIL = IVFAIL + 1 03080351 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 03090351 0081 CONTINUE 03100351 C 03110351 C **** FCVS PROGRAM 351 - TEST 008 **** 03120351 C 03130351 C TEST 8 IS IDENTICAL TO TEST 7 EXCEPT THAT PARENTHESES ARE 03140351 C USED TO CHANGE THE ORDER OF SUB-EXPRESSION EVALUATION. 03150351 C 03160351 IVTNUM = 8 03170351 IF (ICZERO) 30080, 0080, 30080 03180351 0080 CONTINUE 03190351 IVON01 = 573 03200351 IVON02 = 1 03210351 IVON03 = 3 03220351 IVON04 = 2 03230351 IVON05 = 3 03240351 IADN11(3) = 3071 03250351 IVCOMP = ((IVON01 + 1) - (5 + IADN11(IVON03))) / 03260351 1 IFOS01(IVON03,IVON04,IVON05) ** IVON02 03270351 IVCORR = 0 03280351 40080 IF (IVCOMP) 20080, 10080, 20080 03290351 30080 IVDELE = IVDELE + 1 03300351 WRITE (I02,80000) IVTNUM 03310351 IF (ICZERO) 10080, 0091, 20080 03320351 10080 IVPASS = IVPASS + 1 03330351 WRITE (I02,80002) IVTNUM 03340351 GO TO 0091 03350351 20080 IVFAIL = IVFAIL + 1 03360351 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 03370351 0091 CONTINUE 03380351 C 03390351 C **** FCVS PROGRAM 351 - TEST 009 **** 03400351 C 03410351 C TEST 9 IS SIMILAR TO TESTS 7 AND 8 EXCEPT THAT THE 03420351 C FUNCTION REFERENCE IN TURN EVALUATES ARRAY ELEMENTS. 03430351 C 03440351 IVTNUM = 9 03450351 IF (ICZERO) 30090, 0090, 30090 03460351 0090 CONTINUE 03470351 IVON01 = 7 03480351 IVON02 = 3 03490351 IVON03 = 2 03500351 IVON04 = 1 03510351 IVON05 = 4 03520351 IADN11(1) = 5 03530351 IADN11(2) = 2 03540351 IADN11(4) = 2 03550351 IVCOMP = (IVON01 - 8 * IFOS02(IVON04,IVON03)) / IADN11(IVON05) + 03560351 1 13 ** IVON02 03570351 IVCORR = 2193 03580351 40090 IF (IVCOMP - 2193) 20090, 10090, 20090 03590351 30090 IVDELE = IVDELE + 1 03600351 WRITE (I02,80000) IVTNUM 03610351 IF (ICZERO) 10090, 0101, 20090 03620351 10090 IVPASS = IVPASS + 1 03630351 WRITE (I02,80002) IVTNUM 03640351 GO TO 0101 03650351 20090 IVFAIL = IVFAIL + 1 03660351 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 03670351 0101 CONTINUE 03680351 C 03690351 C **** FCVS PROGRAM 351 - TEST 010 **** 03700351 C 03710351 C TEST 10 EVALUATES AN INTEGER EXPRESSION WHICH CONTAINS 03720351 C FUNCTION REFERENCES NESTED TO THREE LEVELS. THE OUTER TWO 03730351 C LEVELS ARE STATEMENT FUNCTION REFERENCES AND THE INNERMOST LEVEL 03740351 C IS AN INTRINSIC FUNCTION REFERENCE. 03750351 C 03760351 IVTNUM = 10 03770351 IF (ICZERO) 30100, 0100, 30100 03780351 0100 CONTINUE 03790351 IVON01 = -51 03800351 IVON02 = 4 03810351 IVON03 = -101 03820351 IVON04 = 13 03830351 IVON05 = 3 03840351 IVON06 = 5 03850351 IVON07 = -37 03860351 IADN11(4) = 87 03870351 IADN11(5) = 409 03880351 IVCOMP = (IVON01 + IFOS03(IVON02,IVON03,IVON04)) * IVON05 - 03890351 1 IFOS04(IVON06,IVON07) 03900351 IVCORR = 6733 03910351 40100 IF (IVCOMP - 6733) 20100, 10100, 20100 03920351 30100 IVDELE = IVDELE + 1 03930351 WRITE (I02,80000) IVTNUM 03940351 IF (ICZERO) 10100, 0111, 20100 03950351 10100 IVPASS = IVPASS + 1 03960351 WRITE (I02,80002) IVTNUM 03970351 GO TO 0111 03980351 20100 IVFAIL = IVFAIL + 1 03990351 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 04000351 0111 CONTINUE 04010351 C 04020351 C TESTS 11 THROUGH 20 REPEAT TESTS 1 THROUGH 10 EXCEPT THAT 04030351 C TESTS 11 THROUGH 20 DEAL ENTIRELY WITH REAL ARITHMETIC 04040351 C EXPRESSIONS. 04050351 C 04060351 C 04070351 C **** FCVS PROGRAM 351 - TEST 011 **** 04080351 C 04090351 C TEST 11 TESTS A REAL EXPRESSION WHERE ALL FIVE ARITHMETIC 04100351 C OPERATORS ARE USED AND ALL OPERAND PRIMARIES ARE SIMPLE REAL 04110351 C VARIABLES. 04120351 C 04130351 IVTNUM = 11 04140351 IF (ICZERO) 30110, 0110, 30110 04150351 0110 CONTINUE 04160351 RVON01 = 3.2 04170351 RVON02 = 23.051 04180351 RVON03 = 1545 E7 04190351 RVON04 = -23.457 04200351 RVON05 = .02 E3 04210351 RVON06 = 7.210745323 E-10 04220351 RVCOMP = RVON01 ** RVON02 + RVON03 - RVON04 * RVON05 / RVON06 04230351 RVCORR = 1.10683 E12 04240351 40110 IF (RVCOMP - 1.1063 E12) 20110, 10110, 40111 04250351 40111 IF (RVCOMP - 1.1073 E12) 10110, 10110, 20110 04260351 30110 IVDELE = IVDELE + 1 04270351 WRITE (I02,80000) IVTNUM 04280351 IF (ICZERO) 10110, 0121, 20110 04290351 10110 IVPASS = IVPASS + 1 04300351 WRITE (I02,80002) IVTNUM 04310351 GO TO 0121 04320351 20110 IVFAIL = IVFAIL + 1 04330351 WRITE (I02,80012) IVTNUM, RVCOMP, RVCORR 04340351 0121 CONTINUE 04350351 C 04360351 C **** FCVS PROGRAM 351 - TEST 012 **** 04370351 C 04380351 C TEST 12, LIKE TEST 11, CHECKS A REAL EXPRESSION WHERE ALL 04390351 C FIVE ARITHMETIC OPERATORS ARE USED AND ALL OPERANDS ARE REAL 04400351 C VARIABLES, BUT IN TEST 12, PARENTHESES ARE USED, AS IS ALSO A 04410351 C UNARY OPERATOR. 04420351 C 04430351 IVTNUM = 12 04440351 IF (ICZERO) 30120, 0120, 30120 04450351 0120 CONTINUE 04460351 RVON01 = 3.2 04470351 RVON02 = 23.051 04480351 RVON03 = 1545 E-3 04490351 RVON04 = 5.75 E-1 04500351 RVON05 = 2.22 E+1 04510351 RVCOMP = -(RVON01 / RVON02) + (RVON03 * RVON04 ** RVON05) 04520351 RVCORR = -.13882 04530351 40120 IF (RVCOMP + .13887) 20120, 10120, 40121 04540351 40121 IF (RVCOMP + .13877) 10120, 10120, 20120 04550351 30120 IVDELE = IVDELE + 1 04560351 WRITE (I02,80000) IVTNUM 04570351 IF (ICZERO) 10120, 0131, 20120 04580351 10120 IVPASS = IVPASS + 1 04590351 WRITE (I02,80002) IVTNUM 04600351 GO TO 0131 04610351 20120 IVFAIL = IVFAIL + 1 04620351 WRITE (I02,80012) IVTNUM, RVCOMP, RVCORR 04630351 0131 CONTINUE 04640351 C 04650351 C **** FCVS PROGRAM 351 - TEST 013 **** 04660351 C 04670351 C TEST 13 IS SIMILAR TO TEST 12 EXCEPT THAT TEST 13 EMPLOYS 04680351 C NESTED PARENTHESES. 04690351 C 04700351 IVTNUM = 13 04710351 IF (ICZERO) 30130, 0130, 30130 04720351 0130 CONTINUE 04730351 RVON01 = 3.2 04740351 RVON02 = -63.051 04750351 RVON03 = 1545 E-3 04760351 RVON04 = 5.75 E-1 04770351 RVON05 = 2.22 E1 04780351 RVON06 = 0.523 04790351 RVCOMP = RVON01 ** (-(RVON02 + (RVON03 - RVON04)) - 04800351 1 (RVON05 / RVON06)) 04810351 RVCORR = 8.27757 E9 04820351 40130 IF (RVCOMP - 8.2770 E9) 20130, 10130, 40131 04830351 40131 IF (RVCOMP - 8.2780 E9) 10130, 10130, 20130 04840351 30130 IVDELE = IVDELE + 1 04850351 WRITE (I02,80000) IVTNUM 04860351 IF (ICZERO) 10130, 0141, 20130 04870351 10130 IVPASS = IVPASS + 1 04880351 WRITE (I02,80002) IVTNUM 04890351 GO TO 0141 04900351 20130 IVFAIL = IVFAIL + 1 04910351 WRITE (I02,80012) IVTNUM, RVCOMP, RVCORR 04920351 0141 CONTINUE 04930351 C 04940351 C **** FCVS PROGRAM 351 - TEST 014 **** 04950351 C 04960351 C TEST 14 IS SIMILAR TO TESTS 12 AND 13 EXCEPT THAT THE 04970351 C PARENTHESES USED ARE EFFECTIVELY EXTRANEOUS. 04980351 C 04990351 IVTNUM = 14 05000351 IF (ICZERO) 30140, 0140, 30140 05010351 0140 CONTINUE 05020351 RVON01 = 5.4515 E18 05030351 RVON02 = .076923 05040351 RVON03 = 23 E-2 05050351 RVON04 = 7 E7 05060351 RVON05 = 45.23 E5 05070351 RVON06 = 5.65375 E12 05080351 RVCOMP = ((RVON01) ** (RVON02) + (RVON03) - (RVON04) * (RVON05) / 05090351 1 (RVON06)) 05100351 RVCORR = -28.147 05110351 40140 IF (RVCOMP + 28.152) 20140, 10140, 40141 05120351 40141 IF (RVCOMP + 28.142) 10140, 10140, 20140 05130351 30140 IVDELE = IVDELE + 1 05140351 WRITE (I02,80000) IVTNUM 05150351 IF (ICZERO) 10140, 0151, 20140 05160351 10140 IVPASS = IVPASS + 1 05170351 WRITE (I02,80002) IVTNUM 05180351 GO TO 0151 05190351 20140 IVFAIL = IVFAIL + 1 05200351 WRITE (I02,80012) IVTNUM, RVCOMP, RVCORR 05210351 0151 CONTINUE 05220351 C 05230351 C **** FCVS PROGRAM 351 - TEST 015 **** 05240351 C 05250351 C TEST 15 CONTINUES THE TESTING OF EXPRESSIONS USING ONLY 05260351 C REAL VARIABLE OPERANDS CONNECTED BY ARITHMETIC OPERATORS, AND 05270351 C USING PARENTHESES TO OVERRIDE PRECEDENCES. 05280351 C 05290351 IVTNUM = 15 05300351 IF (ICZERO) 30150, 0150, 30150 05310351 0150 CONTINUE 05320351 RVON01 = .11341 E1 05330351 RVON02 = 7.1417 05340351 RVON03 = 5.2113 E1 05350351 RVON04 = 10.001 05360351 RVON05 = 7.241 E5 05370351 RVON06 = 5.7777 E-3 05380351 RVCOMP = -RVON01 ** (RVON02 + RVON03 - RVON04) * (RVON05 / RVON06)05390351 RVCORR = -6.1635 E10 05400351 40150 IF (RVCOMP + 6.1640 E10) 20150, 10150, 40151 05410351 40151 IF (RVCOMP + 6.1630 E10) 10150, 10150, 20150 05420351 30150 IVDELE = IVDELE + 1 05430351 WRITE (I02,80000) IVTNUM 05440351 IF (ICZERO) 10150, 0161, 20150 05450351 10150 IVPASS = IVPASS + 1 05460351 WRITE (I02,80002) IVTNUM 05470351 GO TO 0161 05480351 20150 IVFAIL = IVFAIL + 1 05490351 WRITE (I02,80012) IVTNUM, RVCOMP, RVCORR 05500351 0161 CONTINUE 05510351 C 05520351 C **** FCVS PROGRAM 351 - TEST 016 **** 05530351 C 05540351 C TEST 16 CONTINUES THE TESTING OF EXPRESSIONS USING ONLY 05550351 C REAL VARIABLE OPERANDS CONNECTED BY ARITHMETIC OPERATORS, AND 05560351 C USING PARENTHESES TO OVERRIDE PRECEDENCES. 05570351 C 05580351 IVTNUM = 16 05590351 IF (ICZERO) 30160, 0160, 30160 05600351 0160 CONTINUE 05610351 RVON01 = 6.4003 E18 05620351 RVON02 = -3.7717 E-2 05630351 RVON03 = -5.1195 E3 05640351 RVON04 = 1.7521 E14 05650351 RVON05 = 1.0533 E3 05660351 RVON06 = -9.4207 E11 05670351 RVCOMP = ((RVON01 * (RVON02 / RVON03)) + RVON04) / RVON05 - 05680351 1 (-RVON06) 05690351 RVCORR = -7.3096 E11 05700351 40160 IF (RVCOMP + 7.3101 E11) 20160, 10160, 40161 05710351 40161 IF (RVCOMP + 7.3091 E11) 10160, 10160, 20160 05720351 30160 IVDELE = IVDELE + 1 05730351 WRITE (I02,80000) IVTNUM 05740351 IF (ICZERO) 10160, 0171, 20160 05750351 10160 IVPASS = IVPASS + 1 05760351 WRITE (I02,80002) IVTNUM 05770351 GO TO 0171 05780351 20160 IVFAIL = IVFAIL + 1 05790351 WRITE (I02,80012) IVTNUM, RVCOMP, RVCORR 05800351 0171 CONTINUE 05810351 C 05820351 C **** FCVS PROGRAM 351 - TEST 017 **** 05830351 C 05840351 C IN TEST 17, A REAL EXPRESSION INVOLVING ALL FIVE ARITHMETIC 05850351 C OPERATORS IS EVALUATED, BUT UNLIKE TESTS 11 THROUGH 16 WHERE 05860351 C ALL OPERANDS WERE REAL VARIABLES, THE OPERANDS IN TEST 17 ARE 05870351 C CLASSED AS REAL VARIABLES, REAL CONSTANTS, REAL ARRAY ELEMENTS, 05880351 C AND REAL FUNCTION REFERENCES. 05890351 C 05900351 IVTNUM = 17 05910351 IF (ICZERO) 30170, 0170, 30170 05920351 0170 CONTINUE 05930351 RVON01 = 5.247 E10 05940351 IVON01 = 3 05950351 RVON02 = 1.07 E1 05960351 RVON03 = 5.23 05970351 RVON04 = 1.001 05980351 RVON05 = 1.573 05990351 RADN11(3) = 0.3947 E18 06000351 RVCOMP = (RVON01 + 3.491 E10) - (4 E17 + RADN11(IVON01)) / 06010351 1 (RFOS01(RVON03,RVON04,RVON05) ** RVON02) 06020351 RVCORR = 7.1526 E10 06030351 40170 IF (RVCOMP - 7.1521 E10) 20170, 10170, 40171 06040351 40171 IF (RVCOMP - 7.1531 E10) 10170, 10170, 20170 06050351 30170 IVDELE = IVDELE + 1 06060351 WRITE (I02,80000) IVTNUM 06070351 IF (ICZERO) 10170, 0181, 20170 06080351 10170 IVPASS = IVPASS + 1 06090351 WRITE (I02,80002) IVTNUM 06100351 GO TO 0181 06110351 20170 IVFAIL = IVFAIL + 1 06120351 WRITE (I02,80012) IVTNUM, RVCOMP, RVCORR 06130351 0181 CONTINUE 06140351 C 06150351 C **** FCVS PROGRAM 351 - TEST 018 **** 06160351 C 06170351 C TEST 18 IS IDENTICAL TO TEST 17 EXCEPT THAT PARENTHESES ARE 06180351 C USED TO CHANGE THE ORDER OF SUB-EXPRESSION EVALUATION. 06190351 C 06200351 IVTNUM = 18 06210351 IF (ICZERO) 30180, 0180, 30180 06220351 0180 CONTINUE 06230351 RVON01 = 5.247 E10 06240351 IVON01 = 3 06250351 RVON02 = 1.07 E1 06260351 RVON03 = 5.23 06270351 RVON04 = 1.001 06280351 RVON05 = 1.573 06290351 RADN11(3) = 0.3947 E18 06300351 RVCOMP = ((RVON01 + 3.491 E10) - (4 E17 + RADN11(IVON01))) / 06310351 1 RFOS01(RVON03,RVON04,RVON05) ** RVON02 06320351 RVCORR = -1.5854 E10 06330351 40180 IF (RVCOMP + 1.5859 E10) 20180, 10180, 40181 06340351 40181 IF (RVCOMP + 1.5849 E10) 10180, 10180, 20180 06350351 30180 IVDELE = IVDELE + 1 06360351 WRITE (I02,80000) IVTNUM 06370351 IF (ICZERO) 10180, 0191, 20180 06380351 10180 IVPASS = IVPASS + 1 06390351 WRITE (I02,80002) IVTNUM 06400351 GO TO 0191 06410351 20180 IVFAIL = IVFAIL + 1 06420351 WRITE (I02,80012) IVTNUM, RVCOMP, RVCORR 06430351 0191 CONTINUE 06440351 C 06450351 C **** FCVS PROGRAM 351 - TEST 019 **** 06460351 C 06470351 C TEST 19 IS SIMILAR TO TESTS 17 AND 18 EXCEPT THAT THE 06480351 C FUNCTION REFERENCES IN TURN EVALUATE ARRAY ELEMENTS. 06490351 C 06500351 IVTNUM = 19 06510351 IF (ICZERO) 30190, 0190, 30190 06520351 0190 CONTINUE 06530351 RVON01 = 5.026 E2 06540351 RVON02 = 1.386 E1 06550351 IVON03 = 2 06560351 RVON04 = 1.9999 06570351 RVON05 = 4.0127 06580351 RADN11(1) = 3.004 E18 06590351 RADN11(2) = 2.5705 E-1 06600351 RADN11(4) = 7.993 E16 06610351 RVCOMP = (RVON01 - 5.902 * RFOS02(INT(RVON04),INT(RVON05))) / 06620351 1 RADN11(IVON03) + 1.5372 ** RVON02 06630351 RVCORR = 1.4797 E3 06640351 40190 IF (RVCORR - 1.4792 E3) 20190, 10190, 40191 06650351 40191 IF (RVCORR - 1.4802 E3) 10190, 10190, 20190 06660351 30190 IVDELE = IVDELE + 1 06670351 WRITE (I02,80000) IVTNUM 06680351 IF (ICZERO) 10190, 0201, 20190 06690351 10190 IVPASS = IVPASS + 1 06700351 WRITE (I02,80002) IVTNUM 06710351 GO TO 0201 06720351 20190 IVFAIL = IVFAIL + 1 06730351 WRITE (I02,80012) IVTNUM, RVCOMP, RVCORR 06740351 0201 CONTINUE 06750351 C 06760351 C **** FCVS PROGRAM 351 - TEST 020 **** 06770351 C 06780351 C TEST 20 EVALUATES A REAL EXPRESSION WHICH CONTAINS FUNCTION 06790351 C REFERENCES NESTED TO THREE LEVELS. THE OUTER TWO LEVELS ARE 06800351 C STATEMENT FUNCTION REFERENCES AND THE INNERMOST LEVEL IS AN 06810351 C INTRINSIC FUNCTION REFERENCE. 06820351 C 06830351 IVTNUM = 20 06840351 IF (ICZERO) 30200, 0200, 30200 06850351 0200 CONTINUE 06860351 RVON01 = 4.7117 E05 06870351 RVON02 = 5.987 06880351 RVON03 = 2.00000 E5 06890351 RVON04 = 1.0 E2 06900351 RVON05 = 1.5222 E9 06910351 IVON06 = 4 06920351 RVON07 = -3.2107 E14 06930351 RADN11(4) = 7.425 E14 06940351 RADN11(5) = -2.4015 E5 06950351 RVCOMP = (RVON01 + RFOS03(RVON02,RVON03,RVON04)) * RVON05 - 06960351 1 RFOS04(IVON06,RVON07) 06970351 RVCORR = -6.4580 E15 06980351 40200 IF (RVCOMP + 6.4585 E15) 20200, 10200, 40201 06990351 40201 IF (RVCOMP + 6.4575 E15) 10200, 10200, 20200 07000351 30200 IVDELE = IVDELE + 1 07010351 WRITE (I02,80000) IVTNUM 07020351 IF (ICZERO) 10200, 0211, 20200 07030351 10200 IVPASS = IVPASS + 1 07040351 WRITE (I02,80002) IVTNUM 07050351 GO TO 0211 07060351 20200 IVFAIL = IVFAIL + 1 07070351 WRITE (I02,80012) IVTNUM, RVCOMP, RVCORR 07080351 0211 CONTINUE 07090351 C 07100351 C TESTS 21 THROUGH 25 DEAL WITH MIXTURES OF REAL AND INTEGER 07110351 C EXPRESSIONS; I.E., THESE ARE TESTS WHICH EVALUATE EXPRESSIONS 07120351 C CONTAINING BOTH REAL SUB-EXPRESSIONS AND INTEGER SUB-EXPRESSIONS 07130351 C AND THEN ASSIGN THE RESULTS TO EITHER AN INTEGER OR A REAL 07140351 C VARIABLE. 07150351 C 07160351 C 07170351 C **** FCVS PROGRAM 351 - TEST 021 **** 07180351 C 07190351 C TEST 21 USES ALL FIVE ARITHMETIC OPERATORS AND A COMBINATION 07200351 C OF INTEGER AND REAL VARIABLES. NO PARENTHESES ARE USED. FINAL 07210351 C ASSIGNMENT IS TO AN INTEGER VARIABLE. 07220351 C 07230351 IVTNUM = 21 07240351 IF (ICZERO) 30210, 0210, 30210 07250351 0210 CONTINUE 07260351 IVON01 = 17 07270351 IVON02 = 3 07280351 RVON03 = 5.4732 E+2 07290351 RVON04 = 1.523 07300351 IVON05 = 798 07310351 IVCOMP = IVON01 ** IVON02 + RVON03 - RVON04 * IVON05 / IVON01 07320351 IVCORR = 5388 07330351 40210 IF (IVCOMP - 5388) 20210, 10210, 20210 07340351 30210 IVDELE = IVDELE + 1 07350351 WRITE (I02,80000) IVTNUM 07360351 IF (ICZERO) 10210, 0221, 20210 07370351 10210 IVPASS = IVPASS + 1 07380351 WRITE (I02,80002) IVTNUM 07390351 GO TO 0221 07400351 20210 IVFAIL = IVFAIL + 1 07410351 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 07420351 0221 CONTINUE 07430351 C 07440351 C **** FCVS PROGRAM 351 - TEST 022 **** 07450351 C 07460351 C TEST 22 IS LIKE TEST 21 EXCEPT THAT PARENTHESES ARE USED, 07470351 C AS IS A UNARY OPERATOR. FINAL ASSIGNMENT IS TO A REAL VARIABLE. 07480351 C 07490351 IVTNUM = 22 07500351 IF (ICZERO) 30220, 0220, 30220 07510351 0220 CONTINUE 07520351 IVON01 = 798 07530351 IVON02 = 17 07540351 RVON03 = 9.34578 E-2 07550351 IVON04 = 15985 07560351 RVON05 = 0.72357 07570351 RVCOMP = -(IVON01 / IVON02) + (RVON03 * IVON04 ** RVON05) 07580351 RVCORR = 5.68717 E1 07590351 40220 IF (RVCOMP - 5.6866 E1) 20220, 10220, 40221 07600351 40221 IF (RVCOMP - 5.6876 E1) 10220, 10220, 20220 07610351 30220 IVDELE = IVDELE + 1 07620351 WRITE (I02,80000) IVTNUM 07630351 IF (ICZERO) 10220, 0231, 20220 07640351 10220 IVPASS = IVPASS + 1 07650351 WRITE (I02,80002) IVTNUM 07660351 GO TO 0231 07670351 20220 IVFAIL = IVFAIL + 1 07680351 WRITE (I02,80012) IVTNUM, RVCOMP, RVCORR 07690351 0231 CONTINUE 07700351 C 07710351 C **** FCVS PROGRAM 351 - TEST 023 **** 07720351 C 07730351 C TEST 23 IS SIMILAR TO TEST 22 EXCEPT THAT IT EMPLOYS NESTED 07740351 C PARENTHESES. 07750351 C 07760351 IVTNUM = 23 07770351 IF (ICZERO) 30230, 0230, 30230 07780351 0230 CONTINUE 07790351 IVON01 = 2 07800351 IVON02 = 183 07810351 RVON03 = 58.7025 07820351 IVON04 = 197 07830351 IVON05 = 87 07840351 RVON06 = 2.4611 E15 07850351 RVCOMP = IVON01 ** (-(IVON02 + (RVON03 - IVON04)) - 07860351 1 (IVON05 / RVON06)) 07870351 RVCORR = 3.4931 E-14 07880351 40230 IF (RVCOMP - 3.4926 E-14) 20230, 10230, 40231 07890351 40231 IF (RVCOMP - 3.4936 E-14) 10230, 10230, 20230 07900351 30230 IVDELE = IVDELE + 1 07910351 WRITE (I02,80000) IVTNUM 07920351 IF (ICZERO) 10230, 0241, 20230 07930351 10230 IVPASS = IVPASS + 1 07940351 WRITE (I02,80002) IVTNUM 07950351 GO TO 0241 07960351 20230 IVFAIL = IVFAIL + 1 07970351 WRITE (I02,80012) IVTNUM, RVCOMP, RVCORR 07980351 0241 CONTINUE 07990351 C 08000351 C **** FCVS PROGRAM 351 - TEST 024 **** 08010351 C 08020351 C TEST 24 IS IDENTICAL TO TEST 23 EXCEPT THAT THE FINAL 08030351 C ASSIGNMENT IS TO AN INTEGER VARIABLE INSTEAD OF A REAL VARIABLE. 08040351 C 08050351 IVTNUM = 24 08060351 IF (ICZERO) 30240, 0240, 30240 08070351 0240 CONTINUE 08080351 IVON01 = 2 08090351 IVON02 = 183 08100351 RVON03 = 58.7025 08110351 IVON04 = 197 08120351 IVON05 = 87 08130351 RVON06 = 2.4611 E15 08140351 IVCOMP = IVON01 ** (-(IVON02 + (RVON03 - IVON04)) - 08150351 1 (IVON05 / RVON06)) 08160351 IVCORR = 0 08170351 40240 IF (IVCOMP) 20240, 10240, 20240 08180351 30240 IVDELE = IVDELE + 1 08190351 WRITE (I02,80000) IVTNUM 08200351 IF (ICZERO) 10240, 0251, 20240 08210351 10240 IVPASS = IVPASS + 1 08220351 WRITE (I02,80002) IVTNUM 08230351 GO TO 0251 08240351 20240 IVFAIL = IVFAIL + 1 08250351 WRITE (I02,80010) IVTNUM, IVCOMP, IVCORR 08260351 0251 CONTINUE 08270351 C 08280351 C **** FCVS PROGRAM 351 - TEST 025 **** 08290351 C 08300351 C TEST 25 IS SIMILAR TO TESTS 9 AND 19 EXCEPT THAT A MIXTURE 08310351 C OF REAL AND INTEGER OPERANDS ARE USED, AND FINAL ASSIGNMENT IS 08320351 C TO A REAL VARIABLE. 08330351 C 08340351 IVTNUM = 25 08350351 IF (ICZERO) 30250, 0250, 30250 08360351 0250 CONTINUE 08370351 RVON01 = 4.7117 08380351 RVON02 = 5.998 08390351 IVON03 = 2 08400351 RVON04 = 1E2 08410351 IVON05 = 20 08420351 IVON06 = 4 08430351 IVON07 = -3 08440351 RADN11(4) = 7.425 08450351 RADN11(5) = -2.4015 08460351 RVCOMP = (RVON01 + RFOS06(AINT(RVON02),IVON03,RVON04)) * IVON05 - 08470351 1 IFOS05(IVON06,IVON07) 08480351 RVCORR = 84.234 08490351 40250 IF (RVCOMP - 84.229) 20250, 10250, 40251 08500351 40251 IF (RVCOMP - 84.239) 10250, 10250, 20250 08510351 30250 IVDELE = IVDELE + 1 08520351 WRITE (I02,80000) IVTNUM 08530351 IF (ICZERO) 10250, 0261, 20250 08540351 10250 IVPASS = IVPASS + 1 08550351 WRITE (I02,80002) IVTNUM 08560351 GO TO 0261 08570351 20250 IVFAIL = IVFAIL + 1 08580351 WRITE (I02,80012) IVTNUM, RVCOMP, RVCORR 08590351 0261 CONTINUE 08600351 C 08610351 C 08620351 C WRITE OUT TEST SUMMARY 08630351 C 08640351 WRITE (I02,90004) 08650351 WRITE (I02,90014) 08660351 WRITE (I02,90004) 08670351 WRITE (I02,90000) 08680351 WRITE (I02,90004) 08690351 WRITE (I02,90020) IVFAIL 08700351 WRITE (I02,90022) IVPASS 08710351 WRITE (I02,90024) IVDELE 08720351 STOP 08730351 90001 FORMAT (" ",24X,"FM351") 08740351 90000 FORMAT (" ",20X,"END OF PROGRAM FM351" ) 08750351 C 08760351 C FORMATS FOR TEST DETAIL LINES 08770351 C 08780351 80000 FORMAT (" ",4X,I5,6X,"DELETED") 08790351 80002 FORMAT (" ",4X,I5,7X,"PASS") 08800351 80010 FORMAT (" ",4X,I5,7X,"FAIL",10X,I6,9X,I6) 08810351 80012 FORMAT (" ",4X,I5,7X,"FAIL",4X,E12.5,3X,E12.5) 08820351 80018 FORMAT (" ",4X,I5,7X,"FAIL",2X,A14,1X,A14) 08830351 C 08840351 C FORMAT STATEMENTS FOR PAGE HEADERS 08850351 C 08860351 90002 FORMAT ("1") 08870351 90004 FORMAT (" ") 08880351 90006 FORMAT (" ",10X,"FORTRAN COMPILER VALIDATION SYSTEM" ) 08890351 90008 FORMAT (" ",21X,"VERSION 2.1" ) 08900351 90010 FORMAT (" ",8X,"FOR OFFICIAL USE ONLY - COPYRIGHT 1978" ) 08910351 90012 FORMAT (" ",5X,"TEST",5X,"PASS/FAIL",5X,"COMPUTED",8X,"CORRECT") 08920351 90014 FORMAT (" ",5X,"----------------------------------------------" ) 08930351 90016 FORMAT (" ",18X,"SUBSET LEVEL TEST" ) 08940351 C 08950351 C FORMAT STATEMENTS FOR RUN SUMMARY 08960351 C 08970351 90020 FORMAT (" ",19X,I5," TESTS FAILED" ) 08980351 90022 FORMAT (" ",19X,I5," TESTS PASSED" ) 08990351 90024 FORMAT (" ",19X,I5," TESTS DELETED" ) 09000351 END 09010351