PROGRAM FM060 C COMMENT SECTION 00010060 C 00020060 C FM060 00030060 C 00040060 C THIS ROUTINE CONTAINS BASIC ARITHMETIC IF STATEMENT TESTS FOR 00050060 C THE FORMAT 00060060 C 00070060 C IF (E) K1,K2,K3 00080060 C 00090060 C WHERE E IS A SIMPLE REAL EXPRESSION OF THE FORM 00100060 C 00110060 C REAL VARIABLE 00120060 C REAL VARIABLE - REAL CONSTANT 00130060 C REAL VARIABLE + REAL CONSTANT 00140060 C 00150060 C AND K1, K2 AND K3 ARE STATEMENT LABELS. 00160060 C 00170060 C THIS ROUTINE ALSO TESTS ARITHMETIC ASSIGNMENT STATEMENTS OF 00180060 C THE FORM 00190060 C REAL VARIABLE = REAL CONSTANT 00200060 C REAL VARIABLE = REAL VARIABLE 00210060 C REAL VARIABLE = -REAL VARIABLE 00220060 C 00230060 C THE REAL CONSTANTS AND REAL VARIABLES CONTAIN BOTH POSITIVE AND 00240060 C NEGATIVE VALUES. 00250060 C 00260060 C A REAL DATUM IS A PROCESSOR APPROXIMATION TO THE VALUE OF A 00270060 C REAL NUMBER. IT MAY ASSUME POSITIVE, NEGATIVE AND ZERO VALUES. 00280060 C 00290060 C A BASIC REAL CONSTANT IS WRITTEN AS AN INTEGER PART, A DECIMAL00300060 C POINT, AND A DECIMAL FRACTION PART IN THAT ORDER. BOTH THE 00310060 C INTEGER PART AND THE DECIMAL PART ARE STRINGS OF DIGITS; EITHER 00320060 C ONE OF THESE STRINGS MAY BE EMPTY BUT NOT BOTH. THE CONSTANT IS 00330060 C AN APPROXIMATION TO THE DIGIT STRING INTERPRETED AS A DECIMAL 00340060 C NUMERAL. 00350060 C 00360060 C A DECIMAL EXPONENT IS WRITTEN AS THE LETTER E, FOLLOWED BY AN 00370060 C OPTIONALLY SIGNED INTEGER CONSTANT. 00380060 C 00390060 C A REAL CONSTANT IS INDICATED BY WRITING A BASIC REAL CONSTANT,00400060 C A BASIC REAL CONSTANT FOLLOWED BY A DECIMAL EXPONENT, OR AN 00410060 C INTEGER CONSTANT FOLLOWED BY A DECIMAL EXPONENT. 00420060 C 00430060 C REFERENCES 00440060 C AMERICAN NATIONAL STANDARD PROGRAMMING LANGUAGE FORTRAN, 00450060 C X3.9-1978 00460060 C 00470060 C SECTION 4.4, REAL TYPE 00480060 C SECTION 4.4.1, REAL CONSTANT 00490060 C SECTION 6.1, ARITHMETIC EXPRESSIONS 00500060 C SECTION 10.1, ARITHMETIC ASSIGNMENT STATEMENT 00510060 C SECTION 11.4, ARITHMETIC IF STATEMENT 00520060 C 00530060 C ********************************************************** 00540060 C 00550060 C A COMPILER VALIDATION SYSTEM FOR THE FORTRAN LANGUAGE 00560060 C BASED ON SPECIFICATIONS AS DEFINED IN AMERICAN NATIONAL STANDARD 00570060 C PROGRAMMING LANGUAGE FORTRAN X3.9-1978, HAS BEEN DEVELOPED BY THE 00580060 C FEDERAL COBOL COMPILER TESTING SERVICE. THE FORTRAN COMPILER 00590060 C VALIDATION SYSTEM (FCVS) CONSISTS OF AUDIT ROUTINES, THEIR RELATED00600060 C DATA, AND AN EXECUTIVE SYSTEM. EACH AUDIT ROUTINE IS A FORTRAN 00610060 C PROGRAM, SUBPROGRAM OR FUNCTION WHICH INCLUDES TESTS OF SPECIFIC 00620060 C LANGUAGE ELEMENTS AND SUPPORTING PROCEDURES INDICATING THE RESULT 00630060 C OF EXECUTING THESE TESTS. 00640060 C 00650060 C THIS PARTICULAR PROGRAM/SUBPROGRAM/FUNCTION CONTAINS FEATURES 00660060 C FOUND ONLY IN THE SUBSET AS DEFINED IN X3.9-1978. 00670060 C 00680060 C SUGGESTIONS AND COMMENTS SHOULD BE FORWARDED TO - 00690060 C 00700060 C NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY 00710060 C SOFTWARE STANDARDS VALIDATION GROUP 00720060 C BUILDING 225 RM A266 00730060 C GAITHERSBURG, MD 20899 00740060 C ********************************************************** 00750060 C 00760060 C 00770060 C 00780060 C INITIALIZATION SECTION 00790060 C 00800060 C INITIALIZE CONSTANTS 00810060 C ************** 00820060 C I01 CONTAINS THE LOGICAL UNIT NUMBER FOR THE CARD READER. 00830060 I01 = 5 00840060 C I02 CONTAINS THE LOGICAL UNIT NUMBER FOR THE PRINTER. 00850060 I02 = 6 00860060 C SYSTEM ENVIRONMENT SECTION 00870060 C 00880060 CX010 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-010 CONTROL CARD. 00890060 C THE CX010 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I01 = 5 00900060 C (UNIT NUMBER FOR CARD READER). 00910060 CX011 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-011 CONTROL CARD. 00920060 C THE CX011 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL 00930060 C FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX010 ABOVE. 00940060 C 00950060 CX020 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-020 CONTROL CARD. 00960060 C THE CX020 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I02 = 6 00970060 C (UNIT NUMBER FOR PRINTER). 00980060 CX021 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-021 CONTROL CARD. 00990060 C THE CX021 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL 01000060 C FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX020 ABOVE. 01010060 C 01020060 IVPASS=0 01030060 IVFAIL=0 01040060 IVDELE=0 01050060 ICZERO=0 01060060 C 01070060 C WRITE PAGE HEADERS 01080060 WRITE (I02,90000) 01090060 WRITE (I02,90001) 01100060 WRITE (I02,90002) 01110060 WRITE (I02, 90002) 01120060 WRITE (I02,90003) 01130060 WRITE (I02,90002) 01140060 WRITE (I02,90004) 01150060 WRITE (I02,90002) 01160060 WRITE (I02,90011) 01170060 WRITE (I02,90002) 01180060 WRITE (I02,90002) 01190060 WRITE (I02,90005) 01200060 WRITE (I02,90006) 01210060 WRITE (I02,90002) 01220060 C 01230060 C TEST SECTION 01240060 C 01250060 C ARITHMETIC IF STATEMENT 01260060 C 01270060 C TEST 1 THROUGH TEST 3 CONTAIN BASIC ARITHMETIC IF STATEMENT TESTS 01280060 C WITH A REAL VARIABLE AS ARITHMETIC EXPRESSION. 01290060 C 01300060 11 CONTINUE 01310060 IVTNUM = 1 01320060 C 01330060 C **** TEST 1 **** 01340060 C TEST 001 - LESS THAN ZERO BRANCH EXPECTED 01350060 C 01360060 IF (ICZERO) 30010, 10, 30010 01370060 10 CONTINUE 01380060 RVCOMP = 0.0 01390060 RVON01 = -1.0 01400060 IF (RVON01) 12,40010, 40010 01410060 12 RVCOMP = RVON01 01420060 GO TO 40010 01430060 30010 IVDELE = IVDELE + 1 01440060 WRITE (I02,80003) IVTNUM 01450060 IF (ICZERO) 40010, 21, 40010 01460060 40010 IF (RVCOMP) 10010,20010,20010 01470060 10010 IVPASS = IVPASS + 1 01480060 WRITE (I02,80001) IVTNUM 01490060 GO TO 21 01500060 20010 IVFAIL = IVFAIL + 1 01510060 RVCORR = -1.0 01520060 WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 01530060 21 CONTINUE 01540060 IVTNUM = 2 01550060 C 01560060 C **** TEST 2 **** 01570060 C TEST 002 - EQUAL TO ZERO BRANCH EXPECTED 01580060 C 01590060 IF (ICZERO) 30020, 20, 30020 01600060 20 CONTINUE 01610060 RVCOMP = 1.0 01620060 RVON01 = 0.0 01630060 IF (RVON01) 40020,22,40020 01640060 22 RVCOMP = RVON01 01650060 GO TO 40020 01660060 30020 IVDELE = IVDELE + 1 01670060 WRITE (I02,80003) IVTNUM 01680060 IF (ICZERO) 40020, 31, 40020 01690060 40020 IF (RVCOMP) 20020,10020,20020 01700060 10020 IVPASS = IVPASS + 1 01710060 WRITE (I02,80001) IVTNUM 01720060 GO TO 31 01730060 20020 IVFAIL = IVFAIL + 1 01740060 RVCORR = 0.0 01750060 WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 01760060 31 CONTINUE 01770060 IVTNUM = 3 01780060 C 01790060 C **** TEST 3 **** 01800060 C TEST 003 - GREATER THAN ZERO BRANCH EXPECTED 01810060 C 01820060 IF (ICZERO) 30030, 30, 30030 01830060 30 CONTINUE 01840060 RVCOMP = 0.0 01850060 RVON01 = 1.0 01860060 IF (RVON01) 40030,40030,32 01870060 32 RVCOMP = RVON01 01880060 GO TO 40030 01890060 30030 IVDELE = IVDELE + 1 01900060 WRITE (I02,80003) IVTNUM 01910060 IF (ICZERO) 40030, 41, 40030 01920060 40030 IF (RVCOMP) 20030,20030,10030 01930060 10030 IVPASS = IVPASS + 1 01940060 WRITE (I02,80001) IVTNUM 01950060 GO TO 41 01960060 20030 IVFAIL = IVFAIL + 1 01970060 RVCORR = 1.0 01980060 WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 01990060 41 CONTINUE 02000060 IVTNUM = 4 02010060 C 02020060 C **** TEST 4 **** 02030060 C TEST 004 - BASIC IF STATEMENTS TEST 02040060 C THESE IF STATEMENTS ARE USED IN REAL VARIABLE TEST 02050060 C VERIFICATION. THE ARITHMETIC EXPRESSIONS ARE OF THE FORM 02060060 C REAL VARIABLE - REAL CONSTANT 02070060 C 02080060 IF (ICZERO) 30040, 40, 30040 02090060 40 CONTINUE 02100060 RVCOMP = 4.0 02110060 RVON01 = 1.0 02120060 IF (RVON01 - .99995) 40040,42,42 02130060 42 IF (RVON01 - 1.0005) 43,43,40040 02140060 43 RVCOMP = 0.0 02150060 GO TO 40040 02160060 30040 IVDELE = IVDELE + 1 02170060 WRITE (I02,80003) IVTNUM 02180060 IF (ICZERO) 40040, 51, 40040 02190060 40040 IF (RVCOMP) 20040,10040,20040 02200060 10040 IVPASS = IVPASS + 1 02210060 WRITE (I02,80001) IVTNUM 02220060 GO TO 51 02230060 20040 IVFAIL = IVFAIL + 1 02240060 RVCORR = 0.0 02250060 WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 02260060 51 CONTINUE 02270060 IVTNUM = 5 02280060 C 02290060 C **** TEST 5 **** 02300060 C TEST 005 - BASIC IF STATEMENTS TEST 02310060 C THESE IF STATEMENTS ARE USED IN REAL VARIABLE TEST 02320060 C VERIFICATION. THE ARITHMETIC EXPRESSIONS ARE OF THE FORM 02330060 C REAL VARIABLE + REAL CONSTANT 02340060 C 02350060 IF (ICZERO) 30050, 50, 30050 02360060 50 CONTINUE 02370060 RVCOMP = -1.0 02380060 RVON01 = -1.0 02390060 IF (RVON01 + 1.0005) 40050,52,52 02400060 52 IF (RVON01 + .99995) 53,53,40050 02410060 53 RVCOMP = 0.0 02420060 GO TO 40050 02430060 30050 IVDELE = IVDELE + 1 02440060 WRITE (I02,80003) IVTNUM 02450060 IF (ICZERO) 40050, 61, 40050 02460060 40050 IF (RVCOMP) 20050,10050,20050 02470060 10050 IVPASS = IVPASS + 1 02480060 WRITE (I02,80001) IVTNUM 02490060 GO TO 61 02500060 20050 IVFAIL = IVFAIL + 1 02510060 RVCORR = 0.0 02520060 WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 02530060 C 02540060 C ARITHMETIC ASSIGNMENT STATEMENT 02550060 C 02560060 C 02570060 C TEST 006 THROUGH TEST 025 CONTAIN ARITHMETIC ASSIGNMENT 02580060 C STATEMENTS OF THE FORM 02590060 C REAL VARIABLE = REAL CONSTANT 02600060 C 02610060 C THE THREE TYPES OF REAL CONSTANTS ARE TESTED WITH POSITIVE 02620060 C AND NEGATIVE VALUES FOR THE CONSTANTS, AND POSITIVE AND NEGATIVE 02630060 C EXPONENTS. 02640060 C 02650060 C TEST 006 THROUGH TEST 011 - CONSTANT IS BASIC REAL CONSTANT 02660060 C 02670060 61 CONTINUE 02680060 IVTNUM = 6 02690060 C 02700060 C **** TEST 6 **** 02710060 C 02720060 IF (ICZERO) 30060, 60, 30060 02730060 60 CONTINUE 02740060 RVCOMP = 2.0 02750060 GO TO 40060 02760060 30060 IVDELE = IVDELE + 1 02770060 WRITE (I02,80003) IVTNUM 02780060 IF (ICZERO) 40060, 71, 40060 02790060 40060 IF (RVCOMP - 1.9995) 20060,10060,40061 02800060 40061 IF (RVCOMP - 2.0005) 10060,10060,20060 02810060 10060 IVPASS = IVPASS + 1 02820060 WRITE (I02,80001) IVTNUM 02830060 GO TO 71 02840060 20060 IVFAIL = IVFAIL + 1 02850060 RVCORR = 2.0 02860060 WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 02870060 71 CONTINUE 02880060 IVTNUM = 7 02890060 C 02900060 C **** TEST 7 **** 02910060 C 02920060 IF (ICZERO) 30070, 70, 30070 02930060 70 CONTINUE 02940060 RVCOMP = 44.5 02950060 GO TO 40070 02960060 30070 IVDELE = IVDELE + 1 02970060 WRITE (I02,80003) IVTNUM 02980060 IF (ICZERO) 40070, 81, 40070 02990060 40070 IF (RVCOMP - 44.495) 20070,10070,40071 03000060 40071 IF (RVCOMP - 45.505) 10070,10070,20070 03010060 10070 IVPASS = IVPASS + 1 03020060 WRITE (I02,80001) IVTNUM 03030060 GO TO 81 03040060 20070 IVFAIL = IVFAIL + 1 03050060 RVCORR = 44.5 03060060 WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 03070060 81 CONTINUE 03080060 IVTNUM = 8 03090060 C 03100060 C **** TEST 8 **** 03110060 C 03120060 IF (ICZERO) 30080, 80, 30080 03130060 80 CONTINUE 03140060 RVCOMP = -2.0 03150060 GO TO 40080 03160060 30080 IVDELE = IVDELE + 1 03170060 WRITE (I02,80003) IVTNUM 03180060 IF (ICZERO) 40080, 91, 40080 03190060 40080 IF (RVCOMP + 2.0005) 20080,10080,40081 03200060 40081 IF (RVCOMP + 1.9995) 10080,10080,20080 03210060 10080 IVPASS = IVPASS + 1 03220060 WRITE (I02,80001) IVTNUM 03230060 GO TO 91 03240060 20080 IVFAIL = IVFAIL + 1 03250060 RVCORR = -2.0 03260060 WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 03270060 91 CONTINUE 03280060 IVTNUM = 9 03290060 C 03300060 C **** TEST 9 **** 03310060 C 03320060 IF (ICZERO) 30090, 90, 30090 03330060 90 CONTINUE 03340060 RVCOMP = 65001. 03350060 GO TO 40090 03360060 30090 IVDELE = IVDELE + 1 03370060 WRITE (I02,80003) IVTNUM 03380060 IF (ICZERO) 40090, 101, 40090 03390060 40090 IF (RVCOMP - 64996.) 20090,10090,40091 03400060 40091 IF (RVCOMP - 65006.) 10090,10090,20090 03410060 10090 IVPASS = IVPASS + 1 03420060 WRITE (I02,80001) IVTNUM 03430060 GO TO 101 03440060 20090 IVFAIL = IVFAIL + 1 03450060 RVCORR = 65001. 03460060 WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 03470060 101 CONTINUE 03480060 IVTNUM = 10 03490060 C 03500060 C **** TEST 10 **** 03510060 C 03520060 IF (ICZERO) 30100, 100, 30100 03530060 100 CONTINUE 03540060 RVCOMP = .65001 03550060 GO TO 40100 03560060 30100 IVDELE = IVDELE + 1 03570060 WRITE (I02,80003) IVTNUM 03580060 IF (ICZERO) 40100, 111, 40100 03590060 40100 IF (RVCOMP - .64996) 20100,10100,40101 03600060 40101 IF (RVCOMP - .65006) 10100,10100,20100 03610060 10100 IVPASS = IVPASS + 1 03620060 WRITE (I02,80001) IVTNUM 03630060 GO TO 111 03640060 20100 IVFAIL = IVFAIL + 1 03650060 RVCORR = .65001 03660060 WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 03670060 111 CONTINUE 03680060 IVTNUM = 11 03690060 C 03700060 C **** TEST 11 **** 03710060 C 03720060 IF (ICZERO) 30110, 110, 30110 03730060 110 CONTINUE 03740060 RVCOMP = -.33333 03750060 GO TO 40110 03760060 30110 IVDELE = IVDELE + 1 03770060 WRITE (I02,80003) IVTNUM 03780060 IF (ICZERO) 40110, 121, 40110 03790060 40110 IF (RVCOMP + .33338) 20110,10110,40111 03800060 40111 IF (RVCOMP + .33328) 10110,10110,20110 03810060 10110 IVPASS = IVPASS + 1 03820060 WRITE (I02,80001) IVTNUM 03830060 GO TO 121 03840060 20110 IVFAIL = IVFAIL + 1 03850060 RVCORR = -.33333 03860060 WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 03870060 C 03880060 C TEST 012 THROUGH TEST 19 - REAL CONSTANT IS BASIC REAL CONSTANT 03890060 C - FOLLOWED BY DECIMAL EXPONENT 03900060 C 03910060 121 CONTINUE 03920060 IVTNUM = 12 03930060 C 03940060 C **** TEST 12 **** 03950060 C 03960060 IF (ICZERO) 30120, 120, 30120 03970060 120 CONTINUE 03980060 RVCOMP = .2E+1 03990060 GO TO 40120 04000060 30120 IVDELE = IVDELE + 1 04010060 WRITE (I02,80003) IVTNUM 04020060 IF (ICZERO) 40120, 131, 40120 04030060 40120 IF (RVCOMP - 1.9995) 20120,10120,40121 04040060 40121 IF (RVCOMP - 2.0005) 10120,10120,20120 04050060 10120 IVPASS = IVPASS + 1 04060060 WRITE (I02,80001) IVTNUM 04070060 GO TO 131 04080060 20120 IVFAIL = IVFAIL + 1 04090060 RVCORR = 2.0 04100060 WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 04110060 131 CONTINUE 04120060 IVTNUM = 13 04130060 C 04140060 C **** TEST 13 **** 04150060 C 04160060 IF (ICZERO) 30130, 130, 30130 04170060 130 CONTINUE 04180060 RVCOMP = 2.0E+0 04190060 GO TO 40130 04200060 30130 IVDELE = IVDELE + 1 04210060 WRITE (I02,80003) IVTNUM 04220060 IF (ICZERO) 40130, 141, 40130 04230060 40130 IF (RVCOMP - 1.9995) 20130,10130,40131 04240060 40131 IF (RVCOMP - 2.0005) 10130,10130,20130 04250060 10130 IVPASS = IVPASS + 1 04260060 WRITE (I02,80001) IVTNUM 04270060 GO TO 141 04280060 20130 IVFAIL = IVFAIL + 1 04290060 RVCORR = 2.0 04300060 WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 04310060 141 CONTINUE 04320060 IVTNUM = 14 04330060 C 04340060 C **** TEST 14 **** 04350060 C 04360060 IF (ICZERO) 30140, 140, 30140 04370060 140 CONTINUE 04380060 RVCOMP = 445.0E-01 04390060 GO TO 40140 04400060 30140 IVDELE = IVDELE + 1 04410060 WRITE (I02,80003) IVTNUM 04420060 IF (ICZERO) 40140, 151, 40140 04430060 40140 IF (RVCOMP - 44.495) 20140,10140,40141 04440060 40141 IF (RVCOMP - 44.505) 10140,10140,20140 04450060 10140 IVPASS = IVPASS + 1 04460060 WRITE (I02,80001) IVTNUM 04470060 GO TO 151 04480060 20140 IVFAIL = IVFAIL + 1 04490060 RVCORR = 44.5 04500060 WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 04510060 151 CONTINUE 04520060 IVTNUM = 15 04530060 C 04540060 C **** TEST 15 **** 04550060 C 04560060 IF (ICZERO) 30150, 150, 30150 04570060 150 CONTINUE 04580060 RVCOMP = 4.450E1 04590060 GO TO 40150 04600060 30150 IVDELE = IVDELE + 1 04610060 WRITE (I02,80003) IVTNUM 04620060 IF (ICZERO) 40150, 161, 40150 04630060 40150 IF (RVCOMP - 44.495) 20150,10150,40151 04640060 40151 IF (RVCOMP - 44.505) 10150,10150,20150 04650060 10150 IVPASS = IVPASS + 1 04660060 WRITE (I02,80001) IVTNUM 04670060 GO TO 161 04680060 20150 IVFAIL = IVFAIL + 1 04690060 RVCORR = 44.5 04700060 WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 04710060 161 CONTINUE 04720060 IVTNUM = 16 04730060 C 04740060 C **** TEST 16 **** 04750060 C 04760060 IF (ICZERO) 30160, 160, 30160 04770060 160 CONTINUE 04780060 RVCOMP = 2.E+15 04790060 GO TO 40160 04800060 30160 IVDELE = IVDELE + 1 04810060 WRITE (I02,80003) IVTNUM 04820060 IF (ICZERO) 40160, 171, 40160 04830060 40160 IF (RVCOMP - 1.9995E+15) 20160,10160,40161 04840060 40161 IF (RVCOMP - 2.0005E+15) 10160,10160,20160 04850060 10160 IVPASS = IVPASS + 1 04860060 WRITE (I02,80001) IVTNUM 04870060 GO TO 171 04880060 20160 IVFAIL = IVFAIL + 1 04890060 RVCORR = 2.0E+15 04900060 WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 04910060 171 CONTINUE 04920060 IVTNUM = 17 04930060 C 04940060 C **** TEST 17 **** 04950060 C 04960060 IF (ICZERO) 30170, 170, 30170 04970060 170 CONTINUE 04980060 RVCOMP = 44.5E-15 04990060 GO TO 40170 05000060 30170 IVDELE = IVDELE + 1 05010060 WRITE (I02,80003) IVTNUM 05020060 IF (ICZERO) 40170, 181, 40170 05030060 40170 IF (RVCOMP - 44.495E-15) 20170,10170,40171 05040060 40171 IF (RVCOMP - 44.505E-15) 10170,10170,20170 05050060 10170 IVPASS = IVPASS + 1 05060060 WRITE (I02,80001) IVTNUM 05070060 GO TO 181 05080060 20170 IVFAIL = IVFAIL + 1 05090060 RVCORR = 44.5E-15 05100060 WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 05110060 181 CONTINUE 05120060 IVTNUM = 18 05130060 C 05140060 C **** TEST 18 **** 05150060 C 05160060 IF (ICZERO) 30180, 180, 30180 05170060 180 CONTINUE 05180060 RVCOMP = -4.45E0 05190060 GO TO 40180 05200060 30180 IVDELE = IVDELE + 1 05210060 WRITE (I02,80003) IVTNUM 05220060 IF (ICZERO) 40180, 191, 40180 05230060 40180 IF (RVCOMP + 4.4505) 20180,10180,40181 05240060 40181 IF (RVCOMP + 4.4495) 10180,10180,20180 05250060 10180 IVPASS = IVPASS + 1 05260060 WRITE (I02,80001) IVTNUM 05270060 GO TO 191 05280060 20180 IVFAIL = IVFAIL + 1 05290060 RVCORR = -4.45 05300060 WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 05310060 191 CONTINUE 05320060 IVTNUM = 19 05330060 C 05340060 C **** TEST 19 **** 05350060 C 05360060 IF (ICZERO) 30190, 190, 30190 05370060 190 CONTINUE 05380060 RVCOMP = -6511.8E-0 05390060 GO TO 40190 05400060 30190 IVDELE = IVDELE + 1 05410060 WRITE (I02,80003) IVTNUM 05420060 IF (ICZERO) 40190, 201, 40190 05430060 40190 IF (RVCOMP + 6512.3) 20190,10190,40191 05440060 40191 IF (RVCOMP + 6511.3) 10190,10190,20190 05450060 10190 IVPASS = IVPASS + 1 05460060 WRITE (I02,80001) IVTNUM 05470060 GO TO 201 05480060 20190 IVFAIL = IVFAIL + 1 05490060 RVCORR = -6511.8 05500060 WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 05510060 C 05520060 C TEST 020 THROUGH TEST 025 - INTEGER CONSTANT FOLLOWED 05530060 C - BY A DECIMAL EXPONENT 05540060 C 05550060 201 CONTINUE 05560060 IVTNUM = 20 05570060 C 05580060 C **** TEST 20 **** 05590060 C 05600060 IF (ICZERO) 30200, 200, 30200 05610060 200 CONTINUE 05620060 RVCOMP = 2E+1 05630060 GO TO 40200 05640060 30200 IVDELE = IVDELE + 1 05650060 WRITE (I02,80003) IVTNUM 05660060 IF (ICZERO) 40200, 211, 40200 05670060 40200 IF (RVCOMP - 19.995) 20200,10200,40201 05680060 40201 IF (RVCOMP - 20.005) 10200,10200,20200 05690060 10200 IVPASS = IVPASS + 1 05700060 WRITE (I02,80001) IVTNUM 05710060 GO TO 211 05720060 20200 IVFAIL = IVFAIL + 1 05730060 RVCORR = 20.0 05740060 WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 05750060 211 CONTINUE 05760060 IVTNUM = 21 05770060 C 05780060 C **** TEST 21 **** 05790060 C 05800060 IF (ICZERO) 30210, 210, 30210 05810060 210 CONTINUE 05820060 RVCOMP = 445E-02 05830060 GO TO 40210 05840060 30210 IVDELE = IVDELE + 1 05850060 WRITE (I02,80003) IVTNUM 05860060 IF (ICZERO) 40210, 221, 40210 05870060 40210 IF (RVCOMP - 4.4495) 20210,10210,40211 05880060 40211 IF (RVCOMP - 4.4505) 10210,10210,20210 05890060 10210 IVPASS = IVPASS + 1 05900060 WRITE (I02,80001) IVTNUM 05910060 GO TO 221 05920060 20210 IVFAIL = IVFAIL + 1 05930060 RVCORR = 4.45 05940060 WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 05950060 221 CONTINUE 05960060 IVTNUM = 22 05970060 C 05980060 C **** TEST 22 **** 05990060 C 06000060 IF (ICZERO) 30220, 220, 30220 06010060 220 CONTINUE 06020060 RVCOMP = 7E3 06030060 GO TO 40220 06040060 30220 IVDELE = IVDELE + 1 06050060 WRITE (I02,80003) IVTNUM 06060060 IF (ICZERO) 40220, 231, 40220 06070060 40220 IF (RVCOMP - 6999.0) 20220,10220,40221 06080060 40221 IF (RVCOMP - 7001.0) 10220,10220,20220 06090060 10220 IVPASS = IVPASS + 1 06100060 WRITE (I02,80001) IVTNUM 06110060 GO TO 231 06120060 20220 IVFAIL = IVFAIL + 1 06130060 RVCORR = 7000.0 06140060 WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 06150060 231 CONTINUE 06160060 IVTNUM = 23 06170060 C 06180060 C **** TEST 23 **** 06190060 C 06200060 IF (ICZERO) 30230, 230, 30230 06210060 230 CONTINUE 06220060 RVCOMP = 214 E 0 06230060 GO TO 40230 06240060 30230 IVDELE = IVDELE + 1 06250060 WRITE (I02,80003) IVTNUM 06260060 IF (ICZERO) 40230, 241, 40230 06270060 40230 IF (RVCOMP - 213.95) 20230,10230,40231 06280060 40231 IF (RVCOMP - 214.05) 10230,10230,20230 06290060 10230 IVPASS = IVPASS + 1 06300060 WRITE (I02,80001) IVTNUM 06310060 GO TO 241 06320060 20230 IVFAIL = IVFAIL + 1 06330060 RVCORR = 214.0 06340060 WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 06350060 241 CONTINUE 06360060 IVTNUM = 24 06370060 C 06380060 C **** TEST 24 **** 06390060 C 06400060 IF (ICZERO) 30240, 240, 30240 06410060 240 CONTINUE 06420060 RVCOMP = -3276E+6 06430060 GO TO 40240 06440060 30240 IVDELE = IVDELE + 1 06450060 WRITE (I02,80003) IVTNUM 06460060 IF (ICZERO) 40240, 251, 40240 06470060 40240 IF (RVCOMP + .32765E+10) 20240,10240,40241 06480060 40241 IF (RVCOMP + .32755E+10) 10240,10240,20240 06490060 10240 IVPASS = IVPASS + 1 06500060 WRITE (I02,80001) IVTNUM 06510060 GO TO 251 06520060 20240 IVFAIL = IVFAIL + 1 06530060 RVCORR = -3276E+6 06540060 WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 06550060 251 CONTINUE 06560060 IVTNUM = 25 06570060 C 06580060 C **** TEST 25 **** 06590060 C 06600060 IF (ICZERO) 30250, 250, 30250 06610060 250 CONTINUE 06620060 RVCOMP = -7E3 06630060 GO TO 40250 06640060 30250 IVDELE = IVDELE + 1 06650060 WRITE (I02,80003) IVTNUM 06660060 IF (ICZERO) 40250, 261, 40250 06670060 40250 IF (RVCOMP + 7001.) 20250,10250,40251 06680060 40251 IF (RVCOMP + 6999.) 10250,10250,20250 06690060 10250 IVPASS = IVPASS + 1 06700060 WRITE (I02,80001) IVTNUM 06710060 GO TO 261 06720060 20250 IVFAIL = IVFAIL + 1 06730060 RVCORR = -7000.0 06740060 WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 06750060 C 06760060 C TEST 026 THROUGH TEST 028 CONTAIN ARITHMETIC ASSIGNMENT STATEMENT 06770060 C OF THE FORM REAL VARIABLE = REAL VARIABLE 06780060 C 06790060 261 CONTINUE 06800060 IVTNUM = 26 06810060 C 06820060 C **** TEST 26 **** 06830060 C 06840060 IF (ICZERO) 30260, 260, 30260 06850060 260 CONTINUE 06860060 RVON01 = .2E+1 06870060 RVCOMP = RVON01 06880060 GO TO 40260 06890060 30260 IVDELE = IVDELE + 1 06900060 WRITE (I02,80003) IVTNUM 06910060 IF (ICZERO) 40260, 271, 40260 06920060 40260 IF (RVCOMP - 1.9995) 20260,10260,40261 06930060 40261 IF (RVCOMP - 2.0005) 10260,10260,20260 06940060 10260 IVPASS = IVPASS + 1 06950060 WRITE (I02,80001) IVTNUM 06960060 GO TO 271 06970060 20260 IVFAIL = IVFAIL + 1 06980060 RVCORR = 20.0 06990060 WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 07000060 271 CONTINUE 07010060 IVTNUM = 27 07020060 C 07030060 C **** TEST 27 **** 07040060 C 07050060 IF (ICZERO) 30270, 270, 30270 07060060 270 CONTINUE 07070060 RVON01 = -445.E-01 07080060 RVCOMP = RVON01 07090060 GO TO 40270 07100060 30270 IVDELE = IVDELE + 1 07110060 WRITE (I02,80003) IVTNUM 07120060 IF (ICZERO) 40270, 281, 40270 07130060 40270 IF (RVCOMP + 44.505) 20270,10270,40271 07140060 40271 IF (RVCOMP + 44.495) 10270,10270,20270 07150060 10270 IVPASS = IVPASS + 1 07160060 WRITE (I02,80001) IVTNUM 07170060 GO TO 281 07180060 20270 IVFAIL = IVFAIL + 1 07190060 RVCORR = -44.5 07200060 WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 07210060 281 CONTINUE 07220060 IVTNUM = 28 07230060 C 07240060 C **** TEST 28 **** 07250060 C 07260060 IF (ICZERO) 30280, 280, 30280 07270060 280 CONTINUE 07280060 RVON01 = 7E3 07290060 RVCOMP = RVON01 07300060 GO TO 40280 07310060 30280 IVDELE = IVDELE + 1 07320060 WRITE (I02,80003) IVTNUM 07330060 IF (ICZERO) 40280, 291, 40280 07340060 40280 IF (RVCOMP - 6999.0) 20280,10280,40281 07350060 40281 IF (RVCOMP-7001.0) 10280,10280,20280 07360060 10280 IVPASS = IVPASS + 1 07370060 WRITE (I02,80001) IVTNUM 07380060 GO TO 291 07390060 20280 IVFAIL = IVFAIL + 1 07400060 RVCORR = 7000.0 07410060 C 07420060 C TEST 029 THROUGH TEST 031 CONTAIN ARITHMETIC ASSIGNMENT STATEMENT 07430060 C OF THE FORM REAL VARIABLE = - REAL VARIABLE 07440060 C 07450060 WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 07460060 291 CONTINUE 07470060 IVTNUM = 29 07480060 C 07490060 C **** TEST 29 **** 07500060 C 07510060 IF (ICZERO) 30290, 290, 30290 07520060 290 CONTINUE 07530060 RVON01 = .2E+1 07540060 RVCOMP = -RVON01 07550060 GO TO 40290 07560060 30290 IVDELE = IVDELE + 1 07570060 WRITE (I02,80003) IVTNUM 07580060 IF (ICZERO) 40290, 301, 40290 07590060 40290 IF (RVCOMP + 2.0005) 20290,10290,40291 07600060 40291 IF (RVCOMP + 1.9995) 10290,10290,20290 07610060 10290 IVPASS = IVPASS + 1 07620060 WRITE (I02,80001) IVTNUM 07630060 GO TO 301 07640060 20290 IVFAIL = IVFAIL + 1 07650060 RVCORR = -2.0 07660060 WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 07670060 301 CONTINUE 07680060 IVTNUM = 30 07690060 C 07700060 C **** TEST 30 **** 07710060 C 07720060 IF (ICZERO) 30300, 300, 30300 07730060 300 CONTINUE 07740060 RVON01 = -445.E-01 07750060 RVCOMP = -RVON01 07760060 GO TO 40300 07770060 30300 IVDELE = IVDELE + 1 07780060 WRITE (I02,80003) IVTNUM 07790060 IF (ICZERO) 40300, 311, 40300 07800060 40300 IF (RVCOMP - 44.495) 20300,10300,40301 07810060 40301 IF (RVCOMP - 44.505) 10300,10300,20300 07820060 10300 IVPASS = IVPASS + 1 07830060 WRITE (I02,80001) IVTNUM 07840060 GO TO 311 07850060 20300 IVFAIL = IVFAIL + 1 07860060 RVCORR = 44.5 07870060 WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 07880060 311 CONTINUE 07890060 IVTNUM = 31 07900060 C 07910060 C **** TEST 31 **** 07920060 C 07930060 IF (ICZERO) 30310, 310, 30310 07940060 310 CONTINUE 07950060 RVON01 = -.44559E1 07960060 RVCOMP = -RVON01 07970060 GO TO 40310 07980060 30310 IVDELE = IVDELE + 1 07990060 WRITE (I02,80003) IVTNUM 08000060 IF (ICZERO) 40310, 321, 40310 08010060 40310 IF (RVCOMP - 4.4554) 20310,10310,40311 08020060 40311 IF (RVCOMP - 4.4564) 10310,10310,20310 08030060 10310 IVPASS = IVPASS + 1 08040060 WRITE (I02,80001) IVTNUM 08050060 GO TO 321 08060060 20310 IVFAIL = IVFAIL + 1 08070060 RVCORR = 4.4559 08080060 WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 08090060 C **** END OF TESTS **** 08100060 321 CONTINUE 08110060 C 08120060 C WRITE PAGE FOOTINGS AND RUN SUMMARIES 08130060 99999 CONTINUE 08140060 WRITE (I02,90002) 08150060 WRITE (I02,90006) 08160060 WRITE (I02,90002) 08170060 WRITE (I02,90002) 08180060 WRITE (I02,90007) 08190060 WRITE (I02,90002) 08200060 WRITE (I02,90008) IVFAIL 08210060 WRITE (I02,90009) IVPASS 08220060 WRITE (I02,90010) IVDELE 08230060 C 08240060 C 08250060 C TERMINATE ROUTINE EXECUTION 08260060 STOP 08270060 C 08280060 C FORMAT STATEMENTS FOR PAGE HEADERS 08290060 90000 FORMAT ("1") 08300060 90002 FORMAT (" ") 08310060 90001 FORMAT (" ",10X,"FORTRAN COMPILER VALIDATION SYSTEM" ) 08320060 90003 FORMAT (" ",21X,"VERSION 2.1" ) 08330060 90004 FORMAT (" ",10X,"FOR OFFICIAL USE ONLY - COPYRIGHT 1978" ) 08340060 90005 FORMAT (" ",5X,"TEST",5X,"PASS/FAIL", 5X,"COMPUTED",8X,"CORRECT") 08350060 90006 FORMAT (" ",5X,"----------------------------------------------" ) 08360060 90011 FORMAT (" ",18X,"SUBSET LEVEL TEST" ) 08370060 C 08380060 C FORMAT STATEMENTS FOR RUN SUMMARIES 08390060 90008 FORMAT (" ",15X,I5," ERRORS ENCOUNTERED" ) 08400060 90009 FORMAT (" ",15X,I5," TESTS PASSED" ) 08410060 90010 FORMAT (" ",15X,I5," TESTS DELETED" ) 08420060 C 08430060 C FORMAT STATEMENTS FOR TEST RESULTS 08440060 80001 FORMAT (" ",4X,I5,7X,"PASS") 08450060 80002 FORMAT (" ",4X,I5,7X,"FAIL") 08460060 80003 FORMAT (" ",4X,I5,7X,"DELETED") 08470060 80004 FORMAT (" ",4X,I5,7X,"FAIL",10X,I6,9X,I6) 08480060 80005 FORMAT (" ",4X,I5,7X,"FAIL",4X,E12.5,3X,E12.5) 08490060 C 08500060 90007 FORMAT (" ",20X,"END OF PROGRAM FM060" ) 08510060 END 08520060