PROGRAM FM351 C C C THIS PROGRAM CONTAINS TESTS FOR COMPOUND ARITHMETIC C EXPRESSIONS WHICH NECESSITATE THE APPLICATION OF THE RULES C FOR ARITHMETIC OPERATOR PRECEDENCE. THESE TESTS INCLUDE ONES C WHICH EXERCIZE THE C C (1) USE OF ALL ARITHMETIC OPERATOR TYPES IN THE SAME STATEMENT. C (2) USE OF PARENTHESES TO OVERRIDE DEFAULT PRECEDENCES. C (3) USE OF ALL CLASSES OF PRIMARY OPERANDS. C (4) USE OF NESTED FUNCTION REFERENCES. C (5) USE OF MIXED DATA TYPES. C C REFERENCES - C C AMERICAN NATIONAL STANDARD PROGRAMMING LANGUAGE FORTRAN, X3.9-1977 C C SECTION 6.1 ARITHMETIC EXPRESSIONS C SECTION 6.5 PRECEDENCE OF OPERATORS C SECTION 6.6 EVALUATION OF EXPRESSIONS 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 DIMENSION IADN11(5), RADN11(5) IFOS01(IDON01,IDON02,IDON03) = IDON01 ** IDON02 ** IDON03 IFOS02(IDON04,IDON05) = IADN11(IDON04) / IADN11(IDON05) IFOS04(IDON09,IDON10) = IADN11(IDON09) + IABS(IDON10) IFOS03(IDON06,IDON07,IDON08) = IFOS04(IDON06,IDON07) * IDON08 RFOS01(RDON01,RDON02,RDON03) = RDON01 ** RDON02 ** RDON03 RFOS02(IDON11,IDON12) = RADN11(IDON11) / RADN11(IDON12) RFOS04(IDON13,RDON10) = RADN11(IDON13) + ABS(RDON10) RFOS03(RDON06,RDON07,RDON08) = RFOS04(INT(RDON06),RDON07) * RDON08 IFOS05(IDON14,IDON16) = RADN11(IDON14) + IABS(IDON16) RFOS06(RDON17,IDON18,RDON19) = IFOS05(INT(RDON17),IDON18) * RDON19 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 TESTS 1 THROUGH 10 DEAL ENTIRELY WITH INTEGER EXPRESSIONS. C C C **** FCVS PROGRAM 351 - TEST 001 **** C C TEST 1 CHECKS AN INTEGER EXPRESSION WHERE ALL FIVE ARITHMETIC C OPERATORS ARE USED AND ALL OPERAND PRIMARIES ARE SIMPLE INTEGER C VARIABLES. NO PARENTHESES ARE USED TO UPSET DEFAULT PRECEDENCES. C IVTNUM = 1 IF (ICZERO) 30010, 0010, 30010 0010 CONTINUE IVON01 = 7 IVON02 = 3 IVON03 = 573 IVON04 = 23 IVON05 = 3 IVON06 = -7 IVCOMP = IVON01 ** IVON02 + IVON03 - IVON04 * IVON05 / IVON06 IVCORR = 925 40010 IF (IVCOMP - 925) 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 351 - TEST 002 **** C C TEST 2, LIKE TEST 1, CHECKS AN INTEGER EXPRESSION WHERE ALL C FIVE ARITHMETIC OPERATORS ARE USED AND ALL OPERANDS ARE SIMPLE C INTEGER VARIABLES; BUT IN THIS TEST, PARENTHESES ARE USED, AS IS C A UNARY OPERATOR. C IVTNUM = 2 IF (ICZERO) 30020, 0020, 30020 0020 CONTINUE IVON01 = 7 IVON02 = 3 IVON03 = 5 IVON04 = -3 IVON05 = 3 IVCOMP = -(IVON01 / IVON02) + (IVON03 * IVON04 ** IVON05) IVCORR = -137 40020 IF (IVCOMP + 137) 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 351 - TEST 003 **** C C TEST 3 IS SIMILAR TO TEST 2 EXCEPT THAT IT EMPLOYS NESTED C PARENTHESES. C IVTNUM = 3 IF (ICZERO) 30030, 0030, 30030 0030 CONTINUE IVON01 = 5 IVON02 = 3 IVON03 = 5 IVON04 = 17 IVON05 = 14 IVON06 = 3 IVCOMP = IVON01 ** (-(IVON02 + (IVON03 - IVON04)) - (IVON05 / 1 IVON06)) IVCORR = 3125 40030 IF (IVCOMP - 3125) 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 351 - TEST 004 **** C C TEST 4 IS SIMILAR TO TEST 2 AND 3 EXCEPT THAT THE C PARENTHESES USED ARE EFFECTIVELY EXTRANEOUS. C IVTNUM = 4 IF (ICZERO) 30040, 0040, 30040 0040 CONTINUE IVON01 = 3 IVON02 = 4 IVON03 = 5 IVON04 = 2 IVON05 = 3 IVON06 = 4 IVCOMP = ((IVON01) ** (IVON02) + (IVON03) - (IVON04) * 1 (IVON05) / (IVON06)) IVCORR = 85 40040 IF (IVCOMP - 85) 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 351 - TEST 005 **** C C TEST 5 CONTINUES THE TESTING OF EXPRESSIONS USING ONLY C INTEGER VARIABLE OPERANDS CONNECTED BY ARITHMETIC OPERATORS, C AND USING PARENTHESES TO OVERRIDE PRECEDENCES. C IVTNUM = 5 IF (ICZERO) 30050, 0050, 30050 0050 CONTINUE IVON01 = 57 IVON02 = -3 IVON03 = 4 IVON04 = -1 IVON05 = -5 IVON06 = -2 IVCOMP = -IVON01 ** (IVON02 + IVON03 - IVON04) * 1 (IVON05 / IVON06) IVCORR = -6498 40050 IF (IVCOMP + 6498) 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 351 - TEST 006 **** C C TEST 6 CONTINUES THE TESTING OF EXPRESSIONS USING ONLY C INTEGER VARIABLE OPERANDS CONNECTED BY ARITHMETIC OPERATORS, C AND USING PARENTHESES TO OVERRIDE PRECEDENCES. C IVTNUM = 6 IF (ICZERO) 30060, 0060, 30060 0060 CONTINUE IVON01 = 5 IVON02 = 3 IVON03 = 4 IVON04 = 5496 IVON05 = 7 IVON06 = -3 IVCOMP = ((IVON01 * (IVON02 / IVON03)) + IVON04) / IVON05 - 1 (-IVON06) IVCORR = 782 40060 IF (IVCOMP - 782) 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 **** FCVS PROGRAM 351 - TEST 007 **** C C IN TEST 7, AN INTEGER EXPRESSION INVOLVING ALL FIVE C ARITHMETIC OPERATORS TOGETHER WITH PARENTHESES IS EVALUATED, C BUT UNLIKE TESTS 1 THROUGH 6 WHERE ALL OPERANDS WERE INTEGER C VARIABLES, THE OPERANDS IN TEST 7 ARE CLASSED AS INTEGER C VARIABLES, INTEGER CONSTANTS, INTEGER ARRAY ELEMENTS, AND INTEGER C FUNCTION REFERENCES. C IVTNUM = 7 IF (ICZERO) 30070, 0070, 30070 0070 CONTINUE IVON01 = 573 IVON02 = 1 IVON03 = 3 IVON04 = 2 IVON05 = 3 IADN11(3) = 3071 IVCOMP = (IVON01 + 1) - (5 + IADN11(IVON03)) / 1 (IFOS01(IVON03,IVON04,IVON05) ** IVON02) IVCORR = 574 40070 IF (IVCOMP - 574) 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 351 - TEST 008 **** C C TEST 8 IS IDENTICAL TO TEST 7 EXCEPT THAT PARENTHESES ARE C USED TO CHANGE THE ORDER OF SUB-EXPRESSION EVALUATION. C IVTNUM = 8 IF (ICZERO) 30080, 0080, 30080 0080 CONTINUE IVON01 = 573 IVON02 = 1 IVON03 = 3 IVON04 = 2 IVON05 = 3 IADN11(3) = 3071 IVCOMP = ((IVON01 + 1) - (5 + IADN11(IVON03))) / 1 IFOS01(IVON03,IVON04,IVON05) ** IVON02 IVCORR = 0 40080 IF (IVCOMP) 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 351 - TEST 009 **** C C TEST 9 IS SIMILAR TO TESTS 7 AND 8 EXCEPT THAT THE C FUNCTION REFERENCE IN TURN EVALUATES ARRAY ELEMENTS. C IVTNUM = 9 IF (ICZERO) 30090, 0090, 30090 0090 CONTINUE IVON01 = 7 IVON02 = 3 IVON03 = 2 IVON04 = 1 IVON05 = 4 IADN11(1) = 5 IADN11(2) = 2 IADN11(4) = 2 IVCOMP = (IVON01 - 8 * IFOS02(IVON04,IVON03)) / IADN11(IVON05) + 1 13 ** IVON02 IVCORR = 2193 40090 IF (IVCOMP - 2193) 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 351 - TEST 010 **** C C TEST 10 EVALUATES AN INTEGER EXPRESSION WHICH CONTAINS C FUNCTION REFERENCES NESTED TO THREE LEVELS. THE OUTER TWO C LEVELS ARE STATEMENT FUNCTION REFERENCES AND THE INNERMOST LEVEL C IS AN INTRINSIC FUNCTION REFERENCE. C IVTNUM = 10 IF (ICZERO) 30100, 0100, 30100 0100 CONTINUE IVON01 = -51 IVON02 = 4 IVON03 = -101 IVON04 = 13 IVON05 = 3 IVON06 = 5 IVON07 = -37 IADN11(4) = 87 IADN11(5) = 409 IVCOMP = (IVON01 + IFOS03(IVON02,IVON03,IVON04)) * IVON05 - 1 IFOS04(IVON06,IVON07) IVCORR = 6733 40100 IF (IVCOMP - 6733) 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 TESTS 11 THROUGH 20 REPEAT TESTS 1 THROUGH 10 EXCEPT THAT C TESTS 11 THROUGH 20 DEAL ENTIRELY WITH REAL ARITHMETIC C EXPRESSIONS. C C C **** FCVS PROGRAM 351 - TEST 011 **** C C TEST 11 TESTS A REAL EXPRESSION WHERE ALL FIVE ARITHMETIC C OPERATORS ARE USED AND ALL OPERAND PRIMARIES ARE SIMPLE REAL C VARIABLES. C IVTNUM = 11 IF (ICZERO) 30110, 0110, 30110 0110 CONTINUE RVON01 = 3.2 RVON02 = 23.051 RVON03 = 1545 E7 RVON04 = -23.457 RVON05 = .02 E3 RVON06 = 7.210745323 E-10 RVCOMP = RVON01 ** RVON02 + RVON03 - RVON04 * RVON05 / RVON06 RVCORR = 1.10683 E12 40110 IF (RVCOMP - 1.1063 E12) 20110, 10110, 40111 40111 IF (RVCOMP - 1.1073 E12) 10110, 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,80012) IVTNUM, RVCOMP, RVCORR 0121 CONTINUE C C **** FCVS PROGRAM 351 - TEST 012 **** C C TEST 12, LIKE TEST 11, CHECKS A REAL EXPRESSION WHERE ALL C FIVE ARITHMETIC OPERATORS ARE USED AND ALL OPERANDS ARE REAL C VARIABLES, BUT IN TEST 12, PARENTHESES ARE USED, AS IS ALSO A C UNARY OPERATOR. C IVTNUM = 12 IF (ICZERO) 30120, 0120, 30120 0120 CONTINUE RVON01 = 3.2 RVON02 = 23.051 RVON03 = 1545 E-3 RVON04 = 5.75 E-1 RVON05 = 2.22 E+1 RVCOMP = -(RVON01 / RVON02) + (RVON03 * RVON04 ** RVON05) RVCORR = -.13882 40120 IF (RVCOMP + .13887) 20120, 10120, 40121 40121 IF (RVCOMP + .13877) 10120, 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,80012) IVTNUM, RVCOMP, RVCORR 0131 CONTINUE C C **** FCVS PROGRAM 351 - TEST 013 **** C C TEST 13 IS SIMILAR TO TEST 12 EXCEPT THAT TEST 13 EMPLOYS C NESTED PARENTHESES. C IVTNUM = 13 IF (ICZERO) 30130, 0130, 30130 0130 CONTINUE RVON01 = 3.2 RVON02 = -63.051 RVON03 = 1545 E-3 RVON04 = 5.75 E-1 RVON05 = 2.22 E1 RVON06 = 0.523 RVCOMP = RVON01 ** (-(RVON02 + (RVON03 - RVON04)) - 1 (RVON05 / RVON06)) RVCORR = 8.27757 E9 40130 IF (RVCOMP - 8.2770 E9) 20130, 10130, 40131 40131 IF (RVCOMP - 8.2780 E9) 10130, 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,80012) IVTNUM, RVCOMP, RVCORR 0141 CONTINUE C C **** FCVS PROGRAM 351 - TEST 014 **** C C TEST 14 IS SIMILAR TO TESTS 12 AND 13 EXCEPT THAT THE C PARENTHESES USED ARE EFFECTIVELY EXTRANEOUS. C IVTNUM = 14 IF (ICZERO) 30140, 0140, 30140 0140 CONTINUE RVON01 = 5.4515 E18 RVON02 = .076923 RVON03 = 23 E-2 RVON04 = 7 E7 RVON05 = 45.23 E5 RVON06 = 5.65375 E12 RVCOMP = ((RVON01) ** (RVON02) + (RVON03) - (RVON04) * (RVON05) / 1 (RVON06)) RVCORR = -28.147 40140 IF (RVCOMP + 28.152) 20140, 10140, 40141 40141 IF (RVCOMP + 28.142) 10140, 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,80012) IVTNUM, RVCOMP, RVCORR 0151 CONTINUE C C **** FCVS PROGRAM 351 - TEST 015 **** C C TEST 15 CONTINUES THE TESTING OF EXPRESSIONS USING ONLY C REAL VARIABLE OPERANDS CONNECTED BY ARITHMETIC OPERATORS, AND C USING PARENTHESES TO OVERRIDE PRECEDENCES. C IVTNUM = 15 IF (ICZERO) 30150, 0150, 30150 0150 CONTINUE RVON01 = .11341 E1 RVON02 = 7.1417 RVON03 = 5.2113 E1 RVON04 = 10.001 RVON05 = 7.241 E5 RVON06 = 5.7777 E-3 RVCOMP = -RVON01 ** (RVON02 + RVON03 - RVON04) * (RVON05 / RVON06) RVCORR = -6.1635 E10 40150 IF (RVCOMP + 6.1640 E10) 20150, 10150, 40151 40151 IF (RVCOMP + 6.1630 E10) 10150, 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,80012) IVTNUM, RVCOMP, RVCORR 0161 CONTINUE C C **** FCVS PROGRAM 351 - TEST 016 **** C C TEST 16 CONTINUES THE TESTING OF EXPRESSIONS USING ONLY C REAL VARIABLE OPERANDS CONNECTED BY ARITHMETIC OPERATORS, AND C USING PARENTHESES TO OVERRIDE PRECEDENCES. C IVTNUM = 16 IF (ICZERO) 30160, 0160, 30160 0160 CONTINUE RVON01 = 6.4003 E18 RVON02 = -3.7717 E-2 RVON03 = -5.1195 E3 RVON04 = 1.7521 E14 RVON05 = 1.0533 E3 RVON06 = -9.4207 E11 RVCOMP = ((RVON01 * (RVON02 / RVON03)) + RVON04) / RVON05 - 1 (-RVON06) RVCORR = -7.3096 E11 40160 IF (RVCOMP + 7.3101 E11) 20160, 10160, 40161 40161 IF (RVCOMP + 7.3091 E11) 10160, 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,80012) IVTNUM, RVCOMP, RVCORR 0171 CONTINUE C C **** FCVS PROGRAM 351 - TEST 017 **** C C IN TEST 17, A REAL EXPRESSION INVOLVING ALL FIVE ARITHMETIC C OPERATORS IS EVALUATED, BUT UNLIKE TESTS 11 THROUGH 16 WHERE C ALL OPERANDS WERE REAL VARIABLES, THE OPERANDS IN TEST 17 ARE C CLASSED AS REAL VARIABLES, REAL CONSTANTS, REAL ARRAY ELEMENTS, C AND REAL FUNCTION REFERENCES. C IVTNUM = 17 IF (ICZERO) 30170, 0170, 30170 0170 CONTINUE RVON01 = 5.247 E10 IVON01 = 3 RVON02 = 1.07 E1 RVON03 = 5.23 RVON04 = 1.001 RVON05 = 1.573 RADN11(3) = 0.3947 E18 RVCOMP = (RVON01 + 3.491 E10) - (4 E17 + RADN11(IVON01)) / 1 (RFOS01(RVON03,RVON04,RVON05) ** RVON02) RVCORR = 7.1526 E10 40170 IF (RVCOMP - 7.1521 E10) 20170, 10170, 40171 40171 IF (RVCOMP - 7.1531 E10) 10170, 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,80012) IVTNUM, RVCOMP, RVCORR 0181 CONTINUE C C **** FCVS PROGRAM 351 - TEST 018 **** C C TEST 18 IS IDENTICAL TO TEST 17 EXCEPT THAT PARENTHESES ARE C USED TO CHANGE THE ORDER OF SUB-EXPRESSION EVALUATION. C IVTNUM = 18 IF (ICZERO) 30180, 0180, 30180 0180 CONTINUE RVON01 = 5.247 E10 IVON01 = 3 RVON02 = 1.07 E1 RVON03 = 5.23 RVON04 = 1.001 RVON05 = 1.573 RADN11(3) = 0.3947 E18 RVCOMP = ((RVON01 + 3.491 E10) - (4 E17 + RADN11(IVON01))) / 1 RFOS01(RVON03,RVON04,RVON05) ** RVON02 RVCORR = -1.5854 E10 40180 IF (RVCOMP + 1.5859 E10) 20180, 10180, 40181 40181 IF (RVCOMP + 1.5849 E10) 10180, 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,80012) IVTNUM, RVCOMP, RVCORR 0191 CONTINUE C C **** FCVS PROGRAM 351 - TEST 019 **** C C TEST 19 IS SIMILAR TO TESTS 17 AND 18 EXCEPT THAT THE C FUNCTION REFERENCES IN TURN EVALUATE ARRAY ELEMENTS. C IVTNUM = 19 IF (ICZERO) 30190, 0190, 30190 0190 CONTINUE RVON01 = 5.026 E2 RVON02 = 1.386 E1 IVON03 = 2 RVON04 = 1.9999 RVON05 = 4.0127 RADN11(1) = 3.004 E18 RADN11(2) = 2.5705 E-1 RADN11(4) = 7.993 E16 RVCOMP = (RVON01 - 5.902 * RFOS02(INT(RVON04),INT(RVON05))) / 1 RADN11(IVON03) + 1.5372 ** RVON02 RVCORR = 1.4797 E3 40190 IF (RVCORR - 1.4792 E3) 20190, 10190, 40191 40191 IF (RVCORR - 1.4802 E3) 10190, 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,80012) IVTNUM, RVCOMP, RVCORR 0201 CONTINUE C C **** FCVS PROGRAM 351 - TEST 020 **** C C TEST 20 EVALUATES A REAL EXPRESSION WHICH CONTAINS FUNCTION C REFERENCES NESTED TO THREE LEVELS. THE OUTER TWO LEVELS ARE C STATEMENT FUNCTION REFERENCES AND THE INNERMOST LEVEL IS AN C INTRINSIC FUNCTION REFERENCE. C IVTNUM = 20 IF (ICZERO) 30200, 0200, 30200 0200 CONTINUE RVON01 = 4.7117 E05 RVON02 = 5.987 RVON03 = 2.00000 E5 RVON04 = 1.0 E2 RVON05 = 1.5222 E9 IVON06 = 4 RVON07 = -3.2107 E14 RADN11(4) = 7.425 E14 RADN11(5) = -2.4015 E5 RVCOMP = (RVON01 + RFOS03(RVON02,RVON03,RVON04)) * RVON05 - 1 RFOS04(IVON06,RVON07) RVCORR = -6.4580 E15 40200 IF (RVCOMP + 6.4585 E15) 20200, 10200, 40201 40201 IF (RVCOMP + 6.4575 E15) 10200, 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,80012) IVTNUM, RVCOMP, RVCORR 0211 CONTINUE C C TESTS 21 THROUGH 25 DEAL WITH MIXTURES OF REAL AND INTEGER C EXPRESSIONS; I.E., THESE ARE TESTS WHICH EVALUATE EXPRESSIONS C CONTAINING BOTH REAL SUB-EXPRESSIONS AND INTEGER SUB-EXPRESSIONS C AND THEN ASSIGN THE RESULTS TO EITHER AN INTEGER OR A REAL C VARIABLE. C C C **** FCVS PROGRAM 351 - TEST 021 **** C C TEST 21 USES ALL FIVE ARITHMETIC OPERATORS AND A COMBINATION C OF INTEGER AND REAL VARIABLES. NO PARENTHESES ARE USED. FINAL C ASSIGNMENT IS TO AN INTEGER VARIABLE. C IVTNUM = 21 IF (ICZERO) 30210, 0210, 30210 0210 CONTINUE IVON01 = 17 IVON02 = 3 RVON03 = 5.4732 E+2 RVON04 = 1.523 IVON05 = 798 IVCOMP = IVON01 ** IVON02 + RVON03 - RVON04 * IVON05 / IVON01 IVCORR = 5388 40210 IF (IVCOMP - 5388) 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 351 - TEST 022 **** C C TEST 22 IS LIKE TEST 21 EXCEPT THAT PARENTHESES ARE USED, C AS IS A UNARY OPERATOR. FINAL ASSIGNMENT IS TO A REAL VARIABLE. C IVTNUM = 22 IF (ICZERO) 30220, 0220, 30220 0220 CONTINUE IVON01 = 798 IVON02 = 17 RVON03 = 9.34578 E-2 IVON04 = 15985 RVON05 = 0.72357 RVCOMP = -(IVON01 / IVON02) + (RVON03 * IVON04 ** RVON05) RVCORR = 5.68717 E1 40220 IF (RVCOMP - 5.6866 E1) 20220, 10220, 40221 40221 IF (RVCOMP - 5.6876 E1) 10220, 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,80012) IVTNUM, RVCOMP, RVCORR 0231 CONTINUE C C **** FCVS PROGRAM 351 - TEST 023 **** C C TEST 23 IS SIMILAR TO TEST 22 EXCEPT THAT IT EMPLOYS NESTED C PARENTHESES. C IVTNUM = 23 IF (ICZERO) 30230, 0230, 30230 0230 CONTINUE IVON01 = 2 IVON02 = 183 RVON03 = 58.7025 IVON04 = 197 IVON05 = 87 RVON06 = 2.4611 E15 RVCOMP = IVON01 ** (-(IVON02 + (RVON03 - IVON04)) - 1 (IVON05 / RVON06)) RVCORR = 3.4931 E-14 40230 IF (RVCOMP - 3.4926 E-14) 20230, 10230, 40231 40231 IF (RVCOMP - 3.4936 E-14) 10230, 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,80012) IVTNUM, RVCOMP, RVCORR 0241 CONTINUE C C **** FCVS PROGRAM 351 - TEST 024 **** C C TEST 24 IS IDENTICAL TO TEST 23 EXCEPT THAT THE FINAL C ASSIGNMENT IS TO AN INTEGER VARIABLE INSTEAD OF A REAL VARIABLE. C IVTNUM = 24 IF (ICZERO) 30240, 0240, 30240 0240 CONTINUE IVON01 = 2 IVON02 = 183 RVON03 = 58.7025 IVON04 = 197 IVON05 = 87 RVON06 = 2.4611 E15 IVCOMP = IVON01 ** (-(IVON02 + (RVON03 - IVON04)) - 1 (IVON05 / RVON06)) IVCORR = 0 40240 IF (IVCOMP) 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 **** FCVS PROGRAM 351 - TEST 025 **** C C TEST 25 IS SIMILAR TO TESTS 9 AND 19 EXCEPT THAT A MIXTURE C OF REAL AND INTEGER OPERANDS ARE USED, AND FINAL ASSIGNMENT IS C TO A REAL VARIABLE. C IVTNUM = 25 IF (ICZERO) 30250, 0250, 30250 0250 CONTINUE RVON01 = 4.7117 RVON02 = 5.998 IVON03 = 2 RVON04 = 1E2 IVON05 = 20 IVON06 = 4 IVON07 = -3 RADN11(4) = 7.425 RADN11(5) = -2.4015 RVCOMP = (RVON01 + RFOS06(AINT(RVON02),IVON03,RVON04)) * IVON05 - 1 IFOS05(IVON06,IVON07) RVCORR = 84.234 40250 IF (RVCOMP - 84.229) 20250, 10250, 40251 40251 IF (RVCOMP - 84.239) 10250, 10250, 20250 30250 IVDELE = IVDELE + 1 WRITE (I02,80000) IVTNUM IF (ICZERO) 10250, 0261, 20250 10250 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0261 20250 IVFAIL = IVFAIL + 1 WRITE (I02,80012) IVTNUM, RVCOMP, RVCORR 0261 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,5HFM351) 90000 FORMAT (1H ,20X,20HEND OF PROGRAM FM351) 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