| PROGRAM FM061 |
| |
| C COMMENT SECTION 00010061 |
| C 00020061 |
| C FM061 00030061 |
| C 00040061 |
| C THIS ROUTINE TESTS ARITHMETIC ASSIGNMENT STATEMENTS OF THE 00050061 |
| C FORM 00060061 |
| C INTEGER VARIABLE = REAL CONSTANT 00070061 |
| C INTEGER VARIABLE = REAL VARIABLE 00080061 |
| C REAL VARIABLE = INTEGER VARIABLE 00090061 |
| C REAL VARIABLE = INTEGER CONSTANT 00100061 |
| C 00110061 |
| C THE CONSTANTS AND VARIABLES CONTAIN BOTH POSITIVE AND NEGATIVE 00120061 |
| C VALUES. 00130061 |
| C 00140061 |
| C A REAL DATUM IS A PROCESSOR APPROXIMATION TO THE VALUE OF A 00150061 |
| C REAL NUMBER. IT MAY ASSUME POSITIVE, NEGATIVE AND ZERO VALUES. 00160061 |
| C 00170061 |
| C A BASIC REAL CONSTANT IS WRITTEN AS AN INTEGER PART, A 00180061 |
| C DECIMAL POINT, AND A DECIMAL FRACTION PART IN THAT ORDER. BOTH 00190061 |
| C THE INTEGER PART AND THE DECIMAL PART ARE STRINGS OF DIGITS; 00200061 |
| C EITHER ONE OF THESE STRINGS MAY BE EMPTY BUT NOT BOTH. THE 00210061 |
| C CONSTANT IS AN APPROXIMATION TO THE DIGIT STRING INTERPRETED AS A 00220061 |
| C DECIMAL NUMERAL. 00230061 |
| C 00240061 |
| C A DECIMAL EXPONENT IS WRITTEN AS THE LETTER E, FOLLOWED BY AN 00250061 |
| C OPTIONALLY SIGNED INTEGER CONSTANT. 00260061 |
| C 00270061 |
| C A REAL CONSTANT IS INDICATED BY WRITING A BASIC REAL CONSTANT,00280061 |
| C A BASIC REAL CONSTANT FOLLOWED BY A DECIMAL EXPONENT, OR AN 00290061 |
| C INTEGER CONSTANT FOLLOWED BY A DECIMAL EXPONENT. 00300061 |
| C 00310061 |
| C REFERENCES 00320061 |
| C AMERICAN NATIONAL STANDARD PROGRAMMING LANGUAGE FORTRAN, 00330061 |
| C X3.9-1978 00340061 |
| C 00350061 |
| C SECTION 4.4, REAL TYPE 00360061 |
| C SECTION 4.4.1, REAL CONSTANT 00370061 |
| C SECTION 6.1, ARITHMETIC EXPRESSIONS 00380061 |
| C SECTION 6.6, EVALUATION OF EXPRESSIONS 00390061 |
| C SECTION 10.1, ARITHMETIC ASSIGNMENT STATEMENT 00400061 |
| C SECTION 11.4, ARITHMETIC IF STATEMENT 00410061 |
| C 00420061 |
| C ********************************************************** 00430061 |
| C 00440061 |
| C A COMPILER VALIDATION SYSTEM FOR THE FORTRAN LANGUAGE 00450061 |
| C BASED ON SPECIFICATIONS AS DEFINED IN AMERICAN NATIONAL STANDARD 00460061 |
| C PROGRAMMING LANGUAGE FORTRAN X3.9-1978, HAS BEEN DEVELOPED BY THE 00470061 |
| C FEDERAL COBOL COMPILER TESTING SERVICE. THE FORTRAN COMPILER 00480061 |
| C VALIDATION SYSTEM (FCVS) CONSISTS OF AUDIT ROUTINES, THEIR RELATED00490061 |
| C DATA, AND AN EXECUTIVE SYSTEM. EACH AUDIT ROUTINE IS A FORTRAN 00500061 |
| C PROGRAM, SUBPROGRAM OR FUNCTION WHICH INCLUDES TESTS OF SPECIFIC 00510061 |
| C LANGUAGE ELEMENTS AND SUPPORTING PROCEDURES INDICATING THE RESULT 00520061 |
| C OF EXECUTING THESE TESTS. 00530061 |
| C 00540061 |
| C THIS PARTICULAR PROGRAM/SUBPROGRAM/FUNCTION CONTAINS FEATURES 00550061 |
| C FOUND ONLY IN THE SUBSET AS DEFINED IN X3.9-1978. 00560061 |
| C 00570061 |
| C SUGGESTIONS AND COMMENTS SHOULD BE FORWARDED TO - 00580061 |
| C 00590061 |
| C NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY 00600061 |
| C SOFTWARE STANDARDS VALIDATION GROUP 00610061 |
| C BUILDING 225 RM A266 00620061 |
| C GAITHERSBURG, MD 20899 00630061 |
| C ********************************************************** 00640061 |
| C 00650061 |
| C 00660061 |
| C 00670061 |
| C INITIALIZATION SECTION 00680061 |
| C 00690061 |
| C INITIALIZE CONSTANTS 00700061 |
| C ************** 00710061 |
| C I01 CONTAINS THE LOGICAL UNIT NUMBER FOR THE CARD READER. 00720061 |
| I01 = 5 00730061 |
| C I02 CONTAINS THE LOGICAL UNIT NUMBER FOR THE PRINTER. 00740061 |
| I02 = 6 00750061 |
| C SYSTEM ENVIRONMENT SECTION 00760061 |
| C 00770061 |
| CX010 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-010 CONTROL CARD. 00780061 |
| C THE CX010 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I01 = 5 00790061 |
| C (UNIT NUMBER FOR CARD READER). 00800061 |
| CX011 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-011 CONTROL CARD. 00810061 |
| C THE CX011 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL 00820061 |
| C FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX010 ABOVE. 00830061 |
| C 00840061 |
| CX020 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-020 CONTROL CARD. 00850061 |
| C THE CX020 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I02 = 6 00860061 |
| C (UNIT NUMBER FOR PRINTER). 00870061 |
| CX021 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-021 CONTROL CARD. 00880061 |
| C THE CX021 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL 00890061 |
| C FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX020 ABOVE. 00900061 |
| C 00910061 |
| IVPASS=0 00920061 |
| IVFAIL=0 00930061 |
| IVDELE=0 00940061 |
| ICZERO=0 00950061 |
| C 00960061 |
| C WRITE PAGE HEADERS 00970061 |
| WRITE (I02,90000) 00980061 |
| WRITE (I02,90001) 00990061 |
| WRITE (I02,90002) 01000061 |
| WRITE (I02, 90002) 01010061 |
| WRITE (I02,90003) 01020061 |
| WRITE (I02,90002) 01030061 |
| WRITE (I02,90004) 01040061 |
| WRITE (I02,90002) 01050061 |
| WRITE (I02,90011) 01060061 |
| WRITE (I02,90002) 01070061 |
| WRITE (I02,90002) 01080061 |
| WRITE (I02,90005) 01090061 |
| WRITE (I02,90006) 01100061 |
| WRITE (I02,90002) 01110061 |
| C 01120061 |
| C TEST SECTION 01130061 |
| C 01140061 |
| C TEST 32 THROUGH TEST 42 CONTAIN ARITHMETIC ASSIGNMENT 01150061 |
| C STATEMENTS OF THE FORM 01160061 |
| C 01170061 |
| C INTEGER VARIABLE = REAL VARIABLE 01180061 |
| C 01190061 |
| IVTNUM = 32 01200061 |
| C 01210061 |
| C **** TEST 32 **** 01220061 |
| C 01230061 |
| IF (ICZERO) 30320, 320, 30320 01240061 |
| 320 CONTINUE 01250061 |
| RVON01 = 44.5 01260061 |
| IVCOMP = RVON01 01270061 |
| GO TO 40320 01280061 |
| 30320 IVDELE = IVDELE + 1 01290061 |
| WRITE (I02,80003) IVTNUM 01300061 |
| IF (ICZERO) 40320, 331, 40320 01310061 |
| 40320 IF (IVCOMP - 44) 20320,10320,20320 01320061 |
| 10320 IVPASS = IVPASS + 1 01330061 |
| WRITE (I02,80001) IVTNUM 01340061 |
| GO TO 331 01350061 |
| 20320 IVFAIL = IVFAIL + 1 01360061 |
| IVCORR = 44 01370061 |
| WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 01380061 |
| 331 CONTINUE 01390061 |
| IVTNUM = 33 01400061 |
| C 01410061 |
| C **** TEST 33 **** 01420061 |
| C 01430061 |
| IF (ICZERO) 30330, 330, 30330 01440061 |
| 330 CONTINUE 01450061 |
| RVON01 = -2.0005 01460061 |
| IVCOMP = RVON01 01470061 |
| GO TO 40330 01480061 |
| 30330 IVDELE = IVDELE + 1 01490061 |
| WRITE (I02,80003) IVTNUM 01500061 |
| IF (ICZERO) 40330, 341, 40330 01510061 |
| 40330 IF (IVCOMP + 2) 20330,10330,20330 01520061 |
| 10330 IVPASS = IVPASS + 1 01530061 |
| WRITE (I02,80001) IVTNUM 01540061 |
| GO TO 341 01550061 |
| 20330 IVFAIL = IVFAIL + 1 01560061 |
| IVCORR = -2 01570061 |
| WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 01580061 |
| 341 CONTINUE 01590061 |
| IVTNUM = 34 01600061 |
| C 01610061 |
| C **** TEST 34 **** 01620061 |
| C 01630061 |
| IF (ICZERO) 30340, 340, 30340 01640061 |
| 340 CONTINUE 01650061 |
| RVON01 = .32767 01660061 |
| IVCOMP = RVON01 01670061 |
| GO TO 40340 01680061 |
| 30340 IVDELE = IVDELE + 1 01690061 |
| WRITE (I02,80003) IVTNUM 01700061 |
| IF (ICZERO) 40340, 351, 40340 01710061 |
| 40340 IF (IVCOMP) 20340,10340,20340 01720061 |
| 10340 IVPASS = IVPASS + 1 01730061 |
| WRITE (I02,80001) IVTNUM 01740061 |
| GO TO 351 01750061 |
| 20340 IVFAIL = IVFAIL + 1 01760061 |
| IVCORR = 0 01770061 |
| WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 01780061 |
| 351 CONTINUE 01790061 |
| IVTNUM = 35 01800061 |
| C 01810061 |
| C **** TEST 35 **** 01820061 |
| C 01830061 |
| IF (ICZERO) 30350, 350, 30350 01840061 |
| 350 CONTINUE 01850061 |
| RVON01 = 1.999 01860061 |
| IVCOMP = RVON01 01870061 |
| GO TO 40350 01880061 |
| 30350 IVDELE = IVDELE + 1 01890061 |
| WRITE (I02,80003) IVTNUM 01900061 |
| IF (ICZERO) 40350, 361, 40350 01910061 |
| 40350 IF (IVCOMP - 1) 20350,10350,20350 01920061 |
| 10350 IVPASS = IVPASS + 1 01930061 |
| WRITE (I02,80001) IVTNUM 01940061 |
| GO TO 361 01950061 |
| 20350 IVFAIL = IVFAIL + 1 01960061 |
| IVCORR = 1 01970061 |
| WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 01980061 |
| 361 CONTINUE 01990061 |
| IVTNUM = 36 02000061 |
| C 02010061 |
| C **** TEST 36 **** 02020061 |
| C 02030061 |
| IF (ICZERO) 30360, 360, 30360 02040061 |
| 360 CONTINUE 02050061 |
| RVON01 = .25E+1 02060061 |
| IVCOMP = RVON01 02070061 |
| GO TO 40360 02080061 |
| 30360 IVDELE = IVDELE + 1 02090061 |
| WRITE (I02,80003) IVTNUM 02100061 |
| IF (ICZERO) 40360, 371, 40360 02110061 |
| 40360 IF (IVCOMP - 2) 20360,10360,20360 02120061 |
| 10360 IVPASS = IVPASS + 1 02130061 |
| WRITE (I02,80001) IVTNUM 02140061 |
| GO TO 371 02150061 |
| 20360 IVFAIL = IVFAIL + 1 02160061 |
| IVCORR = 2 02170061 |
| WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 02180061 |
| 371 CONTINUE 02190061 |
| IVTNUM = 37 02200061 |
| C 02210061 |
| C **** TEST 37 **** 02220061 |
| C 02230061 |
| IF (ICZERO) 30370, 370, 30370 02240061 |
| 370 CONTINUE 02250061 |
| RVON01 = 445.0E-01 02260061 |
| IVCOMP = RVON01 02270061 |
| GO TO 40370 02280061 |
| 30370 IVDELE = IVDELE + 1 02290061 |
| WRITE (I02,80003) IVTNUM 02300061 |
| IF (ICZERO) 40370, 381, 40370 02310061 |
| 40370 IF (IVCOMP - 44) 20370,10370,20370 02320061 |
| 10370 IVPASS = IVPASS + 1 02330061 |
| WRITE (I02,80001) IVTNUM 02340061 |
| GO TO 381 02350061 |
| 20370 IVFAIL = IVFAIL + 1 02360061 |
| IVCORR = 44 02370061 |
| WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 02380061 |
| 381 CONTINUE 02390061 |
| IVTNUM = 38 02400061 |
| C 02410061 |
| C **** TEST 38 **** 02420061 |
| C 02430061 |
| IF (ICZERO) 30380, 380, 30380 02440061 |
| 380 CONTINUE 02450061 |
| RVON01 = -651.1E-0 02460061 |
| IVCOMP = RVON01 02470061 |
| GO TO 40380 02480061 |
| 30380 IVDELE = IVDELE + 1 02490061 |
| WRITE (I02,80003) IVTNUM 02500061 |
| IF (ICZERO) 40380, 391, 40380 02510061 |
| 40380 IF (IVCOMP + 651) 20380,10380,20380 02520061 |
| 10380 IVPASS = IVPASS + 1 02530061 |
| WRITE (I02,80001) IVTNUM 02540061 |
| GO TO 391 02550061 |
| 20380 IVFAIL = IVFAIL + 1 02560061 |
| IVCORR = -651 02570061 |
| WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 02580061 |
| 391 CONTINUE 02590061 |
| IVTNUM = 39 02600061 |
| C 02610061 |
| C **** TEST 39 **** 02620061 |
| C 02630061 |
| IF (ICZERO) 30390, 390, 30390 02640061 |
| 390 CONTINUE 02650061 |
| RVON01 = .3266E4 02660061 |
| IVCOMP = RVON01 02670061 |
| GO TO 40390 02680061 |
| 30390 IVDELE = IVDELE + 1 02690061 |
| WRITE (I02,80003) IVTNUM 02700061 |
| IF (ICZERO) 40390, 401, 40390 02710061 |
| 40390 IF (IVCOMP - 3266) 20390,10390,20390 02720061 |
| 10390 IVPASS = IVPASS + 1 02730061 |
| WRITE (I02,80001) IVTNUM 02740061 |
| GO TO 401 02750061 |
| 20390 IVFAIL = IVFAIL + 1 02760061 |
| IVCORR = 3266 02770061 |
| WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 02780061 |
| 401 CONTINUE 02790061 |
| IVTNUM = 40 02800061 |
| C 02810061 |
| C **** TEST 40 **** 02820061 |
| C 02830061 |
| IF (ICZERO) 30400, 400, 30400 02840061 |
| 400 CONTINUE 02850061 |
| RVON01 = 35.43E-01 02860061 |
| IVCOMP = RVON01 02870061 |
| GO TO 40400 02880061 |
| 30400 IVDELE = IVDELE + 1 02890061 |
| WRITE (I02,80003) IVTNUM 02900061 |
| IF (ICZERO) 40400, 411, 40400 02910061 |
| 40400 IF (IVCOMP - 3) 20400,10400,20400 02920061 |
| 10400 IVPASS = IVPASS + 1 02930061 |
| WRITE (I02,80001) IVTNUM 02940061 |
| GO TO 411 02950061 |
| 20400 IVFAIL = IVFAIL + 1 02960061 |
| IVCORR = 3 02970061 |
| WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 02980061 |
| 411 CONTINUE 02990061 |
| IVTNUM = 41 03000061 |
| C 03010061 |
| C **** TEST 41 **** 03020061 |
| C 03030061 |
| IF (ICZERO) 30410, 410, 30410 03040061 |
| 410 CONTINUE 03050061 |
| RVON01 = -7.001E2 03060061 |
| IVCOMP = RVON01 03070061 |
| GO TO 40410 03080061 |
| 30410 IVDELE = IVDELE + 1 03090061 |
| WRITE (I02,80003) IVTNUM 03100061 |
| IF (ICZERO) 40410, 421, 40410 03110061 |
| 40410 IF (IVCOMP + 700) 20410,10410,20410 03120061 |
| 10410 IVPASS = IVPASS + 1 03130061 |
| WRITE (I02,80001) IVTNUM 03140061 |
| GO TO 421 03150061 |
| 20410 IVFAIL = IVFAIL + 1 03160061 |
| IVCORR = -700 03170061 |
| WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 03180061 |
| 421 CONTINUE 03190061 |
| IVTNUM = 42 03200061 |
| C 03210061 |
| C **** TEST 42 **** 03220061 |
| C 03230061 |
| IF (ICZERO) 30420, 420, 30420 03240061 |
| 420 CONTINUE 03250061 |
| RVON01 = 4.45E-02 03260061 |
| IVCOMP = RVON01 03270061 |
| GO TO 40420 03280061 |
| 30420 IVDELE = IVDELE + 1 03290061 |
| WRITE (I02,80003) IVTNUM 03300061 |
| IF (ICZERO) 40420, 431, 40420 03310061 |
| 40420 IF (IVCOMP) 20420,10420,20420 03320061 |
| 10420 IVPASS = IVPASS + 1 03330061 |
| WRITE (I02,80001) IVTNUM 03340061 |
| GO TO 431 03350061 |
| 20420 IVFAIL = IVFAIL + 1 03360061 |
| IVCORR = 0 03370061 |
| WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 03380061 |
| C TEST 43 THROUGH TEST 48 CONTAIN ARITHMETIC ASSIGNMENT 03390061 |
| C STATEMENTS OF THE FORM 03400061 |
| C 03410061 |
| C REAL VARIABLE = INTEGER VARIABLE 03420061 |
| C 03430061 |
| 431 CONTINUE 03440061 |
| IVTNUM = 43 03450061 |
| C 03460061 |
| C **** TEST 43 **** 03470061 |
| C 03480061 |
| IF (ICZERO) 30430, 430, 30430 03490061 |
| 430 CONTINUE 03500061 |
| IVON01 = 2 03510061 |
| RVCOMP = IVON01 03520061 |
| GO TO 40430 03530061 |
| 30430 IVDELE = IVDELE + 1 03540061 |
| WRITE (I02,80003) IVTNUM 03550061 |
| IF (ICZERO) 40430, 441, 40430 03560061 |
| 40430 IF (RVCOMP - 1.9995) 20430,10430,40431 03570061 |
| 40431 IF (RVCOMP - 2.0005) 10430,10430,20430 03580061 |
| 10430 IVPASS = IVPASS + 1 03590061 |
| WRITE (I02,80001) IVTNUM 03600061 |
| GO TO 441 03610061 |
| 20430 IVFAIL = IVFAIL + 1 03620061 |
| RVCORR = 2.0000 03630061 |
| WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 03640061 |
| 441 CONTINUE 03650061 |
| IVTNUM = 44 03660061 |
| C 03670061 |
| C **** TEST 44 **** 03680061 |
| C 03690061 |
| IF (ICZERO) 30440, 440, 30440 03700061 |
| 440 CONTINUE 03710061 |
| IVON01 = 25 03720061 |
| RVCOMP = IVON01 03730061 |
| GO TO 40440 03740061 |
| 30440 IVDELE = IVDELE + 1 03750061 |
| WRITE (I02,80003) IVTNUM 03760061 |
| IF (ICZERO) 40440, 451, 40440 03770061 |
| 40440 IF (RVCOMP - 24.995) 20440,10440,40441 03780061 |
| 40441 IF (RVCOMP - 25.005) 10440,10440,20440 03790061 |
| 10440 IVPASS = IVPASS + 1 03800061 |
| WRITE (I02,80001) IVTNUM 03810061 |
| GO TO 451 03820061 |
| 20440 IVFAIL = IVFAIL + 1 03830061 |
| RVCORR = 25.000 03840061 |
| WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 03850061 |
| 451 CONTINUE 03860061 |
| IVTNUM = 45 03870061 |
| C 03880061 |
| C **** TEST 45 **** 03890061 |
| C 03900061 |
| IF (ICZERO) 30450, 450, 30450 03910061 |
| 450 CONTINUE 03920061 |
| IVON01 = 357 03930061 |
| RVCOMP = IVON01 03940061 |
| GO TO 40450 03950061 |
| 30450 IVDELE = IVDELE + 1 03960061 |
| WRITE (I02,80003) IVTNUM 03970061 |
| IF (ICZERO) 40450, 461, 40450 03980061 |
| 40450 IF (RVCOMP - 356.95) 20450,10450,40451 03990061 |
| 40451 IF (RVCOMP - 357.05) 10450,10450,20450 04000061 |
| 10450 IVPASS = IVPASS + 1 04010061 |
| WRITE (I02,80001) IVTNUM 04020061 |
| GO TO 461 04030061 |
| 20450 IVFAIL = IVFAIL + 1 04040061 |
| RVCORR = 357.00 04050061 |
| WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 04060061 |
| 461 CONTINUE 04070061 |
| IVTNUM = 46 04080061 |
| C 04090061 |
| C **** TEST 46 **** 04100061 |
| C 04110061 |
| IF (ICZERO) 30460, 460, 30460 04120061 |
| 460 CONTINUE 04130061 |
| IVON01 = 4968 04140061 |
| RVCOMP = IVON01 04150061 |
| GO TO 40460 04160061 |
| 30460 IVDELE = IVDELE + 1 04170061 |
| WRITE (I02,80003) IVTNUM 04180061 |
| IF (ICZERO) 40460, 471, 40460 04190061 |
| 40460 IF (RVCOMP - 4967.5) 20460,10460,40461 04200061 |
| 40461 IF (RVCOMP - 4968.5) 10460,10460,20460 04210061 |
| 10460 IVPASS = IVPASS + 1 04220061 |
| WRITE (I02,80001) IVTNUM 04230061 |
| GO TO 471 04240061 |
| 20460 IVFAIL = IVFAIL + 1 04250061 |
| RVCORR = 4968.0 04260061 |
| WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 04270061 |
| 471 CONTINUE 04280061 |
| IVTNUM = 47 04290061 |
| C 04300061 |
| C **** TEST 47 **** 04310061 |
| C 04320061 |
| IF (ICZERO) 30470, 470, 30470 04330061 |
| 470 CONTINUE 04340061 |
| IVON01 = 32767 04350061 |
| RVCOMP = IVON01 04360061 |
| GO TO 40470 04370061 |
| 30470 IVDELE = IVDELE + 1 04380061 |
| WRITE (I02,80003) IVTNUM 04390061 |
| IF (ICZERO) 40470, 481, 40470 04400061 |
| 40470 IF (RVCOMP - 32762.) 20470,10470,40471 04410061 |
| 40471 IF (RVCOMP - 32772.) 10470,10470,20470 04420061 |
| 10470 IVPASS = IVPASS + 1 04430061 |
| WRITE (I02,80001) IVTNUM 04440061 |
| GO TO 481 04450061 |
| 20470 IVFAIL = IVFAIL + 1 04460061 |
| RVCORR = 32767. 04470061 |
| WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 04480061 |
| 481 CONTINUE 04490061 |
| IVTNUM = 48 04500061 |
| C 04510061 |
| C **** TEST 48 **** 04520061 |
| C 04530061 |
| IF (ICZERO) 30480, 480, 30480 04540061 |
| 480 CONTINUE 04550061 |
| IVON01 = -2 04560061 |
| RVCOMP = IVON01 04570061 |
| GO TO 40480 04580061 |
| 30480 IVDELE = IVDELE + 1 04590061 |
| WRITE (I02,80003) IVTNUM 04600061 |
| IF (ICZERO) 40480, 491, 40480 04610061 |
| 40480 IF (RVCOMP + 2.0005) 20480,10480,40481 04620061 |
| 40481 IF (RVCOMP + 1.9995) 10480,10480,20450 04630061 |
| 10480 IVPASS = IVPASS + 1 04640061 |
| WRITE (I02,80001) IVTNUM 04650061 |
| GO TO 491 04660061 |
| 20480 IVFAIL = IVFAIL + 1 04670061 |
| RVCORR = -2.0000 04680061 |
| WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 04690061 |
| C 04700061 |
| C TEST 49 THROUGH TEST 51 CONTAIN ARITHMETIC ASSIGNMENT STATEMENTS 04710061 |
| C OF THE FORM 04720061 |
| C INTEGER VARIABLE = REAL CONSTANT 04730061 |
| C WHERE CONSTANT IS BASIC REAL CONSTANT 04740061 |
| C 04750061 |
| 491 CONTINUE 04760061 |
| IVTNUM = 49 04770061 |
| C 04780061 |
| C **** TEST 49 **** 04790061 |
| C 04800061 |
| IF (ICZERO) 30490, 490, 30490 04810061 |
| 490 CONTINUE 04820061 |
| IVCOMP = 44.5 04830061 |
| GO TO 40490 04840061 |
| 30490 IVDELE = IVDELE + 1 04850061 |
| WRITE (I02,80003) IVTNUM 04860061 |
| IF (ICZERO) 40490, 501, 40490 04870061 |
| 40490 IF (IVCOMP - 44) 20490,10490,20490 04880061 |
| 10490 IVPASS = IVPASS + 1 04890061 |
| WRITE (I02,80001) IVTNUM 04900061 |
| GO TO 501 04910061 |
| 20490 IVFAIL = IVFAIL + 1 04920061 |
| IVCORR = 44 04930061 |
| WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 04940061 |
| 501 CONTINUE 04950061 |
| IVTNUM = 50 04960061 |
| C 04970061 |
| C **** TEST 50 **** 04980061 |
| C 04990061 |
| IF (ICZERO) 30500, 500, 30500 05000061 |
| 500 CONTINUE 05010061 |
| IVCOMP = 6500.1 05020061 |
| GO TO 40500 05030061 |
| 30500 IVDELE = IVDELE + 1 05040061 |
| WRITE (I02,80003) IVTNUM 05050061 |
| IF (ICZERO) 40500, 511, 40500 05060061 |
| 40500 IF (IVCOMP - 6500) 20500,10500,20500 05070061 |
| 10500 IVPASS = IVPASS + 1 05080061 |
| WRITE (I02,80001) IVTNUM 05090061 |
| GO TO 511 05100061 |
| 20500 IVFAIL = IVFAIL + 1 05110061 |
| IVCORR = 6500 05120061 |
| WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 05130061 |
| 511 CONTINUE 05140061 |
| IVTNUM = 51 05150061 |
| C 05160061 |
| C **** TEST 51 **** 05170061 |
| C 05180061 |
| IF (ICZERO) 30510, 510, 30510 05190061 |
| 510 CONTINUE 05200061 |
| IVCOMP = -.33333 05210061 |
| GO TO 40510 05220061 |
| 30510 IVDELE = IVDELE + 1 05230061 |
| WRITE (I02,80003) IVTNUM 05240061 |
| IF (ICZERO) 40510, 521, 40510 05250061 |
| 40510 IF (IVCOMP) 20510,10510,20510 05260061 |
| 10510 IVPASS = IVPASS + 1 05270061 |
| WRITE (I02,80001) IVTNUM 05280061 |
| GO TO 521 05290061 |
| 20510 IVFAIL = IVFAIL + 1 05300061 |
| IVCORR = 0 05310061 |
| WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 05320061 |
| C 05330061 |
| C TEST 52 THROUGH TEST 55 CONTAIN ARITHMETIC ASSIGNMENT STATEMENTS 05340061 |
| C OF THE FORM 05350061 |
| C INTEGER VARIABLE = REAL CONSTANT 05360061 |
| C 05370061 |
| C WHERE CONSTANT IS BASIC REAL CONSTANT FOLLOWED BY DECIMAL EXPONENT05380061 |
| C 05390061 |
| 521 CONTINUE 05400061 |
| IVTNUM = 52 05410061 |
| C 05420061 |
| C **** TEST 52 **** 05430061 |
| C 05440061 |
| IF (ICZERO) 30520, 520, 30520 05450061 |
| 520 CONTINUE 05460061 |
| IVCOMP = .21E+1 05470061 |
| GO TO 40520 05480061 |
| 30520 IVDELE = IVDELE + 1 05490061 |
| WRITE (I02,80003) IVTNUM 05500061 |
| IF (ICZERO) 40520, 531, 40520 05510061 |
| 40520 IF (IVCOMP - 2) 20520,10520,20520 05520061 |
| 10520 IVPASS = IVPASS + 1 05530061 |
| WRITE (I02,80001) IVTNUM 05540061 |
| GO TO 531 05550061 |
| 20520 IVFAIL = IVFAIL + 1 05560061 |
| IVCORR = 2 05570061 |
| WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 05580061 |
| 531 CONTINUE 05590061 |
| IVTNUM = 53 05600061 |
| C 05610061 |
| C **** TEST 53 **** 05620061 |
| C 05630061 |
| IF (ICZERO) 30530, 530, 30530 05640061 |
| 530 CONTINUE 05650061 |
| IVCOMP = 445.0E-01 05660061 |
| GO TO 40530 05670061 |
| 30530 IVDELE = IVDELE + 1 05680061 |
| WRITE (I02,80003) IVTNUM 05690061 |
| IF (ICZERO) 40530, 541, 40530 05700061 |
| 40530 IF (IVCOMP - 44) 20530,10530,20530 05710061 |
| 10530 IVPASS = IVPASS + 1 05720061 |
| WRITE (I02,80001) IVTNUM 05730061 |
| GO TO 541 05740061 |
| 20530 IVFAIL = IVFAIL + 1 05750061 |
| IVCORR = 44 05760061 |
| WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 05770061 |
| 541 CONTINUE 05780061 |
| IVTNUM = 54 05790061 |
| C 05800061 |
| C **** TEST 54 **** 05810061 |
| C 05820061 |
| IF (ICZERO) 30540, 540, 30540 05830061 |
| 540 CONTINUE 05840061 |
| IVCOMP = 4.450E1 05850061 |
| GO TO 40540 05860061 |
| 30540 IVDELE = IVDELE + 1 05870061 |
| WRITE (I02,80003) IVTNUM 05880061 |
| IF (ICZERO) 40540, 551, 40540 05890061 |
| 40540 IF (IVCOMP - 44) 20540,10540,20540 05900061 |
| 10540 IVPASS = IVPASS + 1 05910061 |
| WRITE (I02,80001) IVTNUM 05920061 |
| GO TO 551 05930061 |
| 20540 IVFAIL = IVFAIL + 1 05940061 |
| IVCORR = 44 05950061 |
| WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 05960061 |
| 551 CONTINUE 05970061 |
| IVTNUM = 55 05980061 |
| C 05990061 |
| C **** TEST 55 **** 06000061 |
| C 06010061 |
| IF (ICZERO) 30550, 550, 30550 06020061 |
| 550 CONTINUE 06030061 |
| IVCOMP = -4.45E0 06040061 |
| GO TO 40550 06050061 |
| 30550 IVDELE = IVDELE + 1 06060061 |
| WRITE (I02,80003) IVTNUM 06070061 |
| IF (ICZERO) 40550, 561, 40550 06080061 |
| 40550 IF (IVCOMP + 4) 20550,10550,20550 06090061 |
| 10550 IVPASS = IVPASS + 1 06100061 |
| WRITE (I02,80001) IVTNUM 06110061 |
| GO TO 561 06120061 |
| 20550 IVFAIL = IVFAIL + 1 06130061 |
| IVCORR = -4 06140061 |
| WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 06150061 |
| C 06160061 |
| C TEST 56 AND 57 CONTAIN ARITHMETIC ASSIGNMENT STATEMENTS OF THE 06170061 |
| C FORM INTEGER VARIABLE = REAL CONSTANT 06180061 |
| C WHERE CONSTANT IS INTEGER CONSTANT FOLLOWED BY DECIMAL EXPONENT 06190061 |
| C 06200061 |
| 561 CONTINUE 06210061 |
| IVTNUM = 56 06220061 |
| C 06230061 |
| C **** TEST 56 **** 06240061 |
| C 06250061 |
| IF (ICZERO) 30560, 560, 30560 06260061 |
| 560 CONTINUE 06270061 |
| IVCOMP = 445E-02 06280061 |
| GO TO 40560 06290061 |
| 30560 IVDELE = IVDELE + 1 06300061 |
| WRITE (I02,80003) IVTNUM 06310061 |
| IF (ICZERO) 40560, 571, 40560 06320061 |
| 40560 IF (IVCOMP - 4) 20560,10560,20560 06330061 |
| 10560 IVPASS = IVPASS + 1 06340061 |
| WRITE (I02,80001) IVTNUM 06350061 |
| GO TO 571 06360061 |
| 20560 IVFAIL = IVFAIL + 1 06370061 |
| IVCORR = 4 06380061 |
| WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 06390061 |
| 571 CONTINUE 06400061 |
| IVTNUM = 57 06410061 |
| C 06420061 |
| C **** TEST 57 **** 06430061 |
| C 06440061 |
| IF (ICZERO) 30570, 570, 30570 06450061 |
| 570 CONTINUE 06460061 |
| IVCOMP = -701E-1 06470061 |
| GO TO 40570 06480061 |
| 30570 IVDELE = IVDELE + 1 06490061 |
| WRITE (I02,80003) IVTNUM 06500061 |
| IF (ICZERO) 40570, 581, 40570 06510061 |
| 40570 IF (IVCOMP + 70) 20570,10570,20570 06520061 |
| 10570 IVPASS = IVPASS + 1 06530061 |
| WRITE (I02,80001) IVTNUM 06540061 |
| GO TO 581 06550061 |
| 20570 IVFAIL = IVFAIL + 1 06560061 |
| IVCORR = -70 06570061 |
| WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 06580061 |
| C 06590061 |
| C TEST 58 THROUGH TEST 62 CONTAIN ARITHMETIC ASSIGNMENT STATEMENTS 06600061 |
| C OF THE FORM REAL VARIABLE = INTEGER CONSTANT 06610061 |
| C 06620061 |
| 581 CONTINUE 06630061 |
| IVTNUM = 58 06640061 |
| C 06650061 |
| C **** TEST 58 **** 06660061 |
| C 06670061 |
| IF (ICZERO) 30580, 580, 30580 06680061 |
| 580 CONTINUE 06690061 |
| RVCOMP = 23 06700061 |
| GO TO 40580 06710061 |
| 30580 IVDELE = IVDELE + 1 06720061 |
| WRITE (I02,80003) IVTNUM 06730061 |
| IF (ICZERO) 40580, 591, 40580 06740061 |
| 40580 IF (RVCOMP - 22.995) 20580,10580,40581 06750061 |
| 40581 IF (RVCOMP - 23.005) 10580,10580,20580 06760061 |
| 10580 IVPASS = IVPASS + 1 06770061 |
| WRITE (I02,80001) IVTNUM 06780061 |
| GO TO 591 06790061 |
| 20580 IVFAIL = IVFAIL + 1 06800061 |
| RVCORR = 23.000 06810061 |
| WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 06820061 |
| 591 CONTINUE 06830061 |
| IVTNUM = 59 06840061 |
| C 06850061 |
| C **** TEST 59 **** 06860061 |
| C 06870061 |
| IF (ICZERO) 30590, 590, 30590 06880061 |
| 590 CONTINUE 06890061 |
| RVCOMP = 32645 06900061 |
| GO TO 40590 06910061 |
| 30590 IVDELE = IVDELE + 1 06920061 |
| WRITE (I02,80003) IVTNUM 06930061 |
| IF (ICZERO) 40590, 601, 40590 06940061 |
| 40590 IF (RVCOMP - 32640.) 20590,10590,40591 06950061 |
| 40591 IF (RVCOMP - 32650.) 10590,10590,20590 06960061 |
| 10590 IVPASS = IVPASS + 1 06970061 |
| WRITE (I02,80001) IVTNUM 06980061 |
| GO TO 601 06990061 |
| 20590 IVFAIL = IVFAIL + 1 07000061 |
| RVCORR = 32645. 07010061 |
| WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 07020061 |
| 601 CONTINUE 07030061 |
| IVTNUM = 60 07040061 |
| C 07050061 |
| C **** TEST 60 **** 07060061 |
| C 07070061 |
| IF (ICZERO) 30600, 600, 30600 07080061 |
| 600 CONTINUE 07090061 |
| RVCOMP = 0 07100061 |
| GO TO 40600 07110061 |
| 30600 IVDELE = IVDELE + 1 07120061 |
| WRITE (I02,80003) IVTNUM 07130061 |
| IF (ICZERO) 40600, 611, 40600 07140061 |
| 40600 IF (RVCOMP) 20600,10600,20600 07150061 |
| 10600 IVPASS = IVPASS + 1 07160061 |
| WRITE (I02,80001) IVTNUM 07170061 |
| GO TO 611 07180061 |
| 20600 IVFAIL = IVFAIL + 1 07190061 |
| RVCORR = 00000. 07200061 |
| WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 07210061 |
| 611 CONTINUE 07220061 |
| IVTNUM = 61 07230061 |
| C 07240061 |
| C **** TEST 61 **** 07250061 |
| C 07260061 |
| IF (ICZERO) 30610, 610, 30610 07270061 |
| 610 CONTINUE 07280061 |
| RVCOMP = -15 07290061 |
| GO TO 40610 07300061 |
| 30610 IVDELE = IVDELE + 1 07310061 |
| WRITE (I02,80003) IVTNUM 07320061 |
| IF (ICZERO) 40610, 621, 40610 07330061 |
| 40610 IF (RVCOMP -14.995) 40611,10610,20610 07340061 |
| 40611 IF (RVCOMP + 15.005) 20610,10610,10610 07350061 |
| 10610 IVPASS = IVPASS + 1 07360061 |
| WRITE (I02,80001) IVTNUM 07370061 |
| GO TO 621 07380061 |
| 20610 IVFAIL = IVFAIL + 1 07390061 |
| RVCORR = -15.000 07400061 |
| WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 07410061 |
| 621 CONTINUE 07420061 |
| C 07430061 |
| C **** END OF TESTS **** 07440061 |
| C 07450061 |
| C 07460061 |
| C WRITE PAGE FOOTINGS AND RUN SUMMARIES 07470061 |
| 99999 CONTINUE 07480061 |
| WRITE (I02,90002) 07490061 |
| WRITE (I02,90006) 07500061 |
| WRITE (I02,90002) 07510061 |
| WRITE (I02,90002) 07520061 |
| WRITE (I02,90007) 07530061 |
| WRITE (I02,90002) 07540061 |
| WRITE (I02,90008) IVFAIL 07550061 |
| WRITE (I02,90009) IVPASS 07560061 |
| WRITE (I02,90010) IVDELE 07570061 |
| C 07580061 |
| C 07590061 |
| C TERMINATE ROUTINE EXECUTION 07600061 |
| STOP 07610061 |
| C 07620061 |
| C FORMAT STATEMENTS FOR PAGE HEADERS 07630061 |
| 90000 FORMAT ("1") 07640061 |
| 90002 FORMAT (" ") 07650061 |
| 90001 FORMAT (" ",10X,"FORTRAN COMPILER VALIDATION SYSTEM" ) 07660061 |
| 90003 FORMAT (" ",21X,"VERSION 2.1" ) 07670061 |
| 90004 FORMAT (" ",10X,"FOR OFFICIAL USE ONLY - COPYRIGHT 1978" ) 07680061 |
| 90005 FORMAT (" ",5X,"TEST",5X,"PASS/FAIL", 5X,"COMPUTED",8X,"CORRECT") 07690061 |
| 90006 FORMAT (" ",5X,"----------------------------------------------" ) 07700061 |
| 90011 FORMAT (" ",18X,"SUBSET LEVEL TEST" ) 07710061 |
| C 07720061 |
| C FORMAT STATEMENTS FOR RUN SUMMARIES 07730061 |
| 90008 FORMAT (" ",15X,I5," ERRORS ENCOUNTERED" ) 07740061 |
| 90009 FORMAT (" ",15X,I5," TESTS PASSED" ) 07750061 |
| 90010 FORMAT (" ",15X,I5," TESTS DELETED" ) 07760061 |
| C 07770061 |
| C FORMAT STATEMENTS FOR TEST RESULTS 07780061 |
| 80001 FORMAT (" ",4X,I5,7X,"PASS") 07790061 |
| 80002 FORMAT (" ",4X,I5,7X,"FAIL") 07800061 |
| 80003 FORMAT (" ",4X,I5,7X,"DELETED") 07810061 |
| 80004 FORMAT (" ",4X,I5,7X,"FAIL",10X,I6,9X,I6) 07820061 |
| 80005 FORMAT (" ",4X,I5,7X,"FAIL",4X,E12.5,3X,E12.5) 07830061 |
| C 07840061 |
| 90007 FORMAT (" ",20X,"END OF PROGRAM FM061" ) 07850061 |
| END 07860061 |