| PROGRAM FM041 |
| |
| C COMMENT SECTION 00010041 |
| C 00020041 |
| C FM041 00030041 |
| C 00040041 |
| C THIS ROUTINE TESTS ARITHMETIC ASSIGNMENTS OF THE 00050041 |
| C FORM INTEGER VARIABLE = PRIMARY ** PRIMARY 00060041 |
| C WHERE THE FIRST OF TWO PRIMARIES IS AN INTEGER VARIABLE OR AN 00070041 |
| C INTEGER CONSTANT AND THE SECOND PRIMARY IS AN INTEGER CONSTANT. 00080041 |
| C 00090041 |
| C REFERENCES 00100041 |
| C AMERICAN NATIONAL STANDARD PROGRAMMING LANGUAGE FORTRAN, 00110041 |
| C X3.9-1978 00120041 |
| C 00130041 |
| C SECTION 4.3, INTEGER TYPE 00140041 |
| C SECTION 4.3.1, INTEGER CONSTANT 00150041 |
| C SECTION 6.1, ARITHMETIC EXPRESSIONS 00160041 |
| C SECTION 10.1, ARITHMETIC ASSIGNMENT STATEMENT 00170041 |
| C 00180041 |
| C 00190041 |
| C ********************************************************** 00200041 |
| C 00210041 |
| C A COMPILER VALIDATION SYSTEM FOR THE FORTRAN LANGUAGE 00220041 |
| C BASED ON SPECIFICATIONS AS DEFINED IN AMERICAN NATIONAL STANDARD 00230041 |
| C PROGRAMMING LANGUAGE FORTRAN X3.9-1978, HAS BEEN DEVELOPED BY THE 00240041 |
| C FEDERAL COBOL COMPILER TESTING SERVICE. THE FORTRAN COMPILER 00250041 |
| C VALIDATION SYSTEM (FCVS) CONSISTS OF AUDIT ROUTINES, THEIR RELATED00260041 |
| C DATA, AND AN EXECUTIVE SYSTEM. EACH AUDIT ROUTINE IS A FORTRAN 00270041 |
| C PROGRAM, SUBPROGRAM OR FUNCTION WHICH INCLUDES TESTS OF SPECIFIC 00280041 |
| C LANGUAGE ELEMENTS AND SUPPORTING PROCEDURES INDICATING THE RESULT 00290041 |
| C OF EXECUTING THESE TESTS. 00300041 |
| C 00310041 |
| C THIS PARTICULAR PROGRAM/SUBPROGRAM/FUNCTION CONTAINS FEATURES 00320041 |
| C FOUND ONLY IN THE SUBSET AS DEFINED IN X3.9-1978. 00330041 |
| C 00340041 |
| C SUGGESTIONS AND COMMENTS SHOULD BE FORWARDED TO - 00350041 |
| C 00360041 |
| C NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY 00370041 |
| C SOFTWARE STANDARDS VALIDATION GROUP 00380041 |
| C BUILDING 225 RM A266 00390041 |
| C GAITHERSBURG, MD 20899 00400041 |
| C ********************************************************** 00410041 |
| C 00420041 |
| C 00430041 |
| C 00440041 |
| C INITIALIZATION SECTION 00450041 |
| C 00460041 |
| C INITIALIZE CONSTANTS 00470041 |
| C ************** 00480041 |
| C I01 CONTAINS THE LOGICAL UNIT NUMBER FOR THE CARD READER. 00490041 |
| I01 = 5 00500041 |
| C I02 CONTAINS THE LOGICAL UNIT NUMBER FOR THE PRINTER. 00510041 |
| I02 = 6 00520041 |
| C SYSTEM ENVIRONMENT SECTION 00530041 |
| C 00540041 |
| CX010 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-010 CONTROL CARD. 00550041 |
| C THE CX010 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I01 = 5 00560041 |
| C (UNIT NUMBER FOR CARD READER). 00570041 |
| CX011 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-011 CONTROL CARD. 00580041 |
| C THE CX011 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL 00590041 |
| C FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX010 ABOVE. 00600041 |
| C 00610041 |
| CX020 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-020 CONTROL CARD. 00620041 |
| C THE CX020 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I02 = 6 00630041 |
| C (UNIT NUMBER FOR PRINTER). 00640041 |
| CX021 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-021 CONTROL CARD. 00650041 |
| C THE CX021 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL 00660041 |
| C FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX020 ABOVE. 00670041 |
| C 00680041 |
| IVPASS=0 00690041 |
| IVFAIL=0 00700041 |
| IVDELE=0 00710041 |
| ICZERO=0 00720041 |
| C 00730041 |
| C WRITE PAGE HEADERS 00740041 |
| WRITE (I02,90000) 00750041 |
| WRITE (I02,90001) 00760041 |
| WRITE (I02,90002) 00770041 |
| WRITE (I02, 90002) 00780041 |
| WRITE (I02,90003) 00790041 |
| WRITE (I02,90002) 00800041 |
| WRITE (I02,90004) 00810041 |
| WRITE (I02,90002) 00820041 |
| WRITE (I02,90011) 00830041 |
| WRITE (I02,90002) 00840041 |
| WRITE (I02,90002) 00850041 |
| WRITE (I02,90005) 00860041 |
| WRITE (I02,90006) 00870041 |
| WRITE (I02,90002) 00880041 |
| C 00890041 |
| C TEST SECTION 00900041 |
| C 00910041 |
| C ARITHMETIC ASSIGNMENT STATEMENT 00920041 |
| C 00930041 |
| C TEST 615 THROUGH TEST 631 CONTAIN ARITHMETIC ASSIGNMENT STATEMENTS00940041 |
| C OF THE FORM INTEGER VARIABLE = INTEGER CONSTANT ** INTEGER CON.00950041 |
| C 00960041 |
| C TEST 632 THROUGH TEST 648 CONTAIN ARITHMETIC ASSIGNMENT STATEMENTS00970041 |
| C OF THE FORM INTEGER VARIABLE = INTEGER VARIABLE ** INTEGER CON.00980041 |
| C 00990041 |
| C 01000041 |
| IVTNUM = 615 01010041 |
| C 01020041 |
| C **** TEST 615 **** 01030041 |
| C TEST 615 - SMALL NUMBER BASE; ZERO EXPONENT 01040041 |
| C 01050041 |
| IF (ICZERO) 36150, 6150, 36150 01060041 |
| 6150 CONTINUE 01070041 |
| IVCOMP = 1 ** 0 01080041 |
| GO TO 46150 01090041 |
| 36150 IVDELE = IVDELE + 1 01100041 |
| WRITE (I02,80003) IVTNUM 01110041 |
| IF (ICZERO) 46150, 6161, 46150 01120041 |
| 46150 IF (IVCOMP - 1) 26150,16150,26150 01130041 |
| 16150 IVPASS = IVPASS + 1 01140041 |
| WRITE (I02,80001) IVTNUM 01150041 |
| GO TO 6161 01160041 |
| 26150 IVFAIL = IVFAIL + 1 01170041 |
| IVCORR = 1 01180041 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 01190041 |
| 6161 CONTINUE 01200041 |
| IVTNUM = 616 01210041 |
| C 01220041 |
| C **** TEST 616 **** 01230041 |
| C TEST 616 - ZERO BASE TO FIRST POWER 01240041 |
| C 01250041 |
| IF (ICZERO) 36160, 6160, 36160 01260041 |
| 6160 CONTINUE 01270041 |
| IVCOMP = 0 ** 1 01280041 |
| GO TO 46160 01290041 |
| 36160 IVDELE = IVDELE + 1 01300041 |
| WRITE (I02,80003) IVTNUM 01310041 |
| IF (ICZERO) 46160, 6171, 46160 01320041 |
| 46160 IF (IVCOMP) 26160,16160,26160 01330041 |
| 16160 IVPASS = IVPASS + 1 01340041 |
| WRITE (I02,80001) IVTNUM 01350041 |
| GO TO 6171 01360041 |
| 26160 IVFAIL = IVFAIL + 1 01370041 |
| IVCORR = 0 01380041 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 01390041 |
| 6171 CONTINUE 01400041 |
| IVTNUM = 617 01410041 |
| C 01420041 |
| C **** TEST 617 **** 01430041 |
| C TEST 617 - BASE =1; EXPONENT = 1 01440041 |
| C 01450041 |
| IF (ICZERO) 36170, 6170, 36170 01460041 |
| 6170 CONTINUE 01470041 |
| IVCOMP = 1 ** 1 01480041 |
| GO TO 46170 01490041 |
| 36170 IVDELE = IVDELE + 1 01500041 |
| WRITE (I02,80003) IVTNUM 01510041 |
| IF (ICZERO) 46170, 6181, 46170 01520041 |
| 46170 IF (IVCOMP - 1) 26170,16170,26170 01530041 |
| 16170 IVPASS = IVPASS + 1 01540041 |
| WRITE (I02,80001) IVTNUM 01550041 |
| GO TO 6181 01560041 |
| 26170 IVFAIL = IVFAIL + 1 01570041 |
| IVCORR = 1 01580041 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 01590041 |
| 6181 CONTINUE 01600041 |
| IVTNUM = 618 01610041 |
| C 01620041 |
| C **** TEST 618 **** 01630041 |
| C TEST 618 - LARGE NUMBER BASE; EXPONENT = 1 01640041 |
| C 01650041 |
| IF (ICZERO) 36180, 6180, 36180 01660041 |
| 6180 CONTINUE 01670041 |
| IVCOMP = 32767 ** 1 01680041 |
| GO TO 46180 01690041 |
| 36180 IVDELE = IVDELE + 1 01700041 |
| WRITE (I02,80003) IVTNUM 01710041 |
| IF (ICZERO) 46180, 6191, 46180 01720041 |
| 46180 IF (IVCOMP - 32767) 26180,16180,26180 01730041 |
| 16180 IVPASS = IVPASS + 1 01740041 |
| WRITE (I02,80001) IVTNUM 01750041 |
| GO TO 6191 01760041 |
| 26180 IVFAIL = IVFAIL + 1 01770041 |
| IVCORR = 32767 01780041 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 01790041 |
| 6191 CONTINUE 01800041 |
| IVTNUM = 619 01810041 |
| C 01820041 |
| C **** TEST 619 **** 01830041 |
| C TEST 619 - LARGE EXPONENT 01840041 |
| C 01850041 |
| IF (ICZERO) 36190, 6190, 36190 01860041 |
| 6190 CONTINUE 01870041 |
| IVCOMP = 1 ** 32767 01880041 |
| GO TO 46190 01890041 |
| 36190 IVDELE = IVDELE + 1 01900041 |
| WRITE (I02,80003) IVTNUM 01910041 |
| IF (ICZERO) 46190, 6201, 46190 01920041 |
| 46190 IF (IVCOMP - 1) 26190,16190,26190 01930041 |
| 16190 IVPASS = IVPASS + 1 01940041 |
| WRITE (I02,80001) IVTNUM 01950041 |
| GO TO 6201 01960041 |
| 26190 IVFAIL = IVFAIL + 1 01970041 |
| IVCORR = 1 01980041 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 01990041 |
| 6201 CONTINUE 02000041 |
| IVTNUM = 620 02010041 |
| C 02020041 |
| C **** TEST 620 **** 02030041 |
| C TEST 620 - ZERO BASE; LARGE NUMBER EXPONENT 02040041 |
| C 02050041 |
| IF (ICZERO) 36200, 6200, 36200 02060041 |
| 6200 CONTINUE 02070041 |
| IVCOMP = 0 ** 32767 02080041 |
| GO TO 46200 02090041 |
| 36200 IVDELE = IVDELE + 1 02100041 |
| WRITE (I02,80003) IVTNUM 02110041 |
| IF (ICZERO) 46200, 6211, 46200 02120041 |
| 46200 IF (IVCOMP) 26200,16200,26200 02130041 |
| 16200 IVPASS = IVPASS + 1 02140041 |
| WRITE (I02,80001) IVTNUM 02150041 |
| GO TO 6211 02160041 |
| 26200 IVFAIL = IVFAIL + 1 02170041 |
| IVCORR = 0 02180041 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 02190041 |
| 6211 CONTINUE 02200041 |
| IVTNUM = 621 02210041 |
| C 02220041 |
| C **** TEST 621 **** 02230041 |
| C TEST 621 -LARGE NUMBER BASE; ZERO EXPONENT 02240041 |
| C 02250041 |
| IF (ICZERO) 36210, 6210, 36210 02260041 |
| 6210 CONTINUE 02270041 |
| IVCOMP = 32767 ** 0 02280041 |
| GO TO 46210 02290041 |
| 36210 IVDELE = IVDELE + 1 02300041 |
| WRITE (I02,80003) IVTNUM 02310041 |
| IF (ICZERO) 46210, 6221, 46210 02320041 |
| 46210 IF (IVCOMP - 1) 26210,16210,26210 02330041 |
| 16210 IVPASS = IVPASS + 1 02340041 |
| WRITE (I02,80001) IVTNUM 02350041 |
| GO TO 6221 02360041 |
| 26210 IVFAIL = IVFAIL + 1 02370041 |
| IVCORR = 1 02380041 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 02390041 |
| 6221 CONTINUE 02400041 |
| IVTNUM = 622 02410041 |
| C 02420041 |
| C **** TEST 622 **** 02430041 |
| C TEST 622 -EXPONENT IS POWER OF TWO 02440041 |
| C 02450041 |
| IF (ICZERO) 36220, 6220, 36220 02460041 |
| 6220 CONTINUE 02470041 |
| IVCOMP = 181 ** 2 02480041 |
| GO TO 46220 02490041 |
| 36220 IVDELE = IVDELE + 1 02500041 |
| WRITE (I02,80003) IVTNUM 02510041 |
| IF (ICZERO) 46220, 6231, 46220 02520041 |
| 46220 IF (IVCOMP - 32761) 26220,16220,26220 02530041 |
| 16220 IVPASS = IVPASS + 1 02540041 |
| WRITE (I02,80001) IVTNUM 02550041 |
| GO TO 6231 02560041 |
| 26220 IVFAIL = IVFAIL + 1 02570041 |
| IVCORR = 32761 02580041 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 02590041 |
| 6231 CONTINUE 02600041 |
| IVTNUM = 623 02610041 |
| C 02620041 |
| C **** TEST 623 **** 02630041 |
| C TEST 623 - BASE AND EXPONENT ARE BOTH POWERS OF TWO 02640041 |
| C 02650041 |
| IF (ICZERO) 36230, 6230, 36230 02660041 |
| 6230 CONTINUE 02670041 |
| IVCOMP = 2 ** 8 02680041 |
| GO TO 46230 02690041 |
| 36230 IVDELE = IVDELE + 1 02700041 |
| WRITE (I02,80003) IVTNUM 02710041 |
| IF (ICZERO) 46230, 6241, 46230 02720041 |
| 46230 IF (IVCOMP - 256) 26230,16230,26230 02730041 |
| 16230 IVPASS = IVPASS + 1 02740041 |
| WRITE (I02,80001) IVTNUM 02750041 |
| GO TO 6241 02760041 |
| 26230 IVFAIL = IVFAIL + 1 02770041 |
| IVCORR = 256 02780041 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 02790041 |
| 6241 CONTINUE 02800041 |
| C 02810041 |
| C TESTS 624 AND 625 TEST TO ENSURE EXPONENTIATION OPERATOR IS 02820041 |
| C NOT COMMUTATIVE 02830041 |
| C 02840041 |
| IVTNUM = 624 02850041 |
| C 02860041 |
| C **** TEST 624 **** 02870041 |
| C 02880041 |
| IF (ICZERO) 36240, 6240, 36240 02890041 |
| 6240 CONTINUE 02900041 |
| IVCOMP = 3 ** 9 02910041 |
| GO TO 46240 02920041 |
| 36240 IVDELE = IVDELE + 1 02930041 |
| WRITE (I02,80003) IVTNUM 02940041 |
| IF (ICZERO) 46240, 6251, 46240 02950041 |
| 46240 IF (IVCOMP - 19683) 26240,16240,26240 02960041 |
| 16240 IVPASS = IVPASS + 1 02970041 |
| WRITE (I02,80001) IVTNUM 02980041 |
| GO TO 6251 02990041 |
| 26240 IVFAIL = IVFAIL + 1 03000041 |
| IVCORR = 19683 03010041 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 03020041 |
| 6251 CONTINUE 03030041 |
| IVTNUM = 625 03040041 |
| C 03050041 |
| C **** TEST 625 **** 03060041 |
| C 03070041 |
| IF (ICZERO) 36250, 6250, 36250 03080041 |
| 6250 CONTINUE 03090041 |
| IVCOMP = 9 ** 3 03100041 |
| GO TO 46250 03110041 |
| 36250 IVDELE = IVDELE + 1 03120041 |
| WRITE (I02,80003) IVTNUM 03130041 |
| IF (ICZERO) 46250, 6261, 46250 03140041 |
| 46250 IF (IVCOMP - 729) 26250,16250,26250 03150041 |
| 16250 IVPASS = IVPASS + 1 03160041 |
| WRITE (I02,80001) IVTNUM 03170041 |
| GO TO 6261 03180041 |
| 26250 IVFAIL = IVFAIL + 1 03190041 |
| IVCORR = 729 03200041 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 03210041 |
| 6261 CONTINUE 03220041 |
| C 03230041 |
| C TESTS 626 THROUGH 631 TEST POSITIVE AND NEGATIVE BASES TO POSITIVE03240041 |
| C ODD AND EVEN NUMBER POWERS CHECKING THE SIGN03250041 |
| C OF THE RESULTS 03260041 |
| C 03270041 |
| IVTNUM = 626 03280041 |
| C 03290041 |
| C **** TEST 626 **** 03300041 |
| C 03310041 |
| IF (ICZERO) 36260, 6260, 36260 03320041 |
| 6260 CONTINUE 03330041 |
| IVCOMP = 1 ** 2 03340041 |
| GO TO 46260 03350041 |
| 36260 IVDELE = IVDELE + 1 03360041 |
| WRITE (I02,80003) IVTNUM 03370041 |
| IF (ICZERO) 46260, 6271, 46260 03380041 |
| 46260 IF (IVCOMP - 1) 26260,16260,26260 03390041 |
| 16260 IVPASS = IVPASS + 1 03400041 |
| WRITE (I02,80001) IVTNUM 03410041 |
| GO TO 6271 03420041 |
| 26260 IVFAIL = IVFAIL + 1 03430041 |
| IVCORR = 1 03440041 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 03450041 |
| 6271 CONTINUE 03460041 |
| IVTNUM = 627 03470041 |
| C 03480041 |
| C **** TEST 627 **** 03490041 |
| C 03500041 |
| IF (ICZERO) 36270, 6270, 36270 03510041 |
| 6270 CONTINUE 03520041 |
| IVCOMP= (-1) ** 2 03530041 |
| GO TO 46270 03540041 |
| 36270 IVDELE = IVDELE + 1 03550041 |
| WRITE (I02,80003) IVTNUM 03560041 |
| IF (ICZERO) 46270, 6281, 46270 03570041 |
| 46270 IF (IVCOMP - 1) 26270,16270,26270 03580041 |
| 16270 IVPASS = IVPASS + 1 03590041 |
| WRITE (I02,80001) IVTNUM 03600041 |
| GO TO 6281 03610041 |
| 26270 IVFAIL = IVFAIL + 1 03620041 |
| IVCORR = 1 03630041 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 03640041 |
| 6281 CONTINUE 03650041 |
| IVTNUM = 628 03660041 |
| C 03670041 |
| C **** TEST 628 **** 03680041 |
| C 03690041 |
| IF (ICZERO) 36280, 6280, 36280 03700041 |
| 6280 CONTINUE 03710041 |
| IVCOMP = 7 ** 3 03720041 |
| GO TO 46280 03730041 |
| 36280 IVDELE = IVDELE + 1 03740041 |
| WRITE (I02,80003) IVTNUM 03750041 |
| IF (ICZERO) 46280, 6291, 46280 03760041 |
| 46280 IF (IVCOMP - 343) 26280,16280,26280 03770041 |
| 16280 IVPASS = IVPASS + 1 03780041 |
| WRITE (I02,80001) IVTNUM 03790041 |
| GO TO 6291 03800041 |
| 26280 IVFAIL = IVFAIL + 1 03810041 |
| IVCORR = 343 03820041 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 03830041 |
| 6291 CONTINUE 03840041 |
| IVTNUM = 629 03850041 |
| C 03860041 |
| C **** TEST 629 **** 03870041 |
| C 03880041 |
| IF (ICZERO) 36290, 6290, 36290 03890041 |
| 6290 CONTINUE 03900041 |
| IVCOMP = (-7) ** 3 03910041 |
| GO TO 46290 03920041 |
| 36290 IVDELE = IVDELE + 1 03930041 |
| WRITE (I02,80003) IVTNUM 03940041 |
| IF (ICZERO) 46290, 6301, 46290 03950041 |
| 46290 IF (IVCOMP + 343) 26290,16290,26290 03960041 |
| 16290 IVPASS = IVPASS + 1 03970041 |
| WRITE (I02,80001) IVTNUM 03980041 |
| GO TO 6301 03990041 |
| 26290 IVFAIL = IVFAIL + 1 04000041 |
| IVCORR = -343 04010041 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 04020041 |
| 6301 CONTINUE 04030041 |
| IVTNUM = 630 04040041 |
| C 04050041 |
| C **** TEST 630 **** 04060041 |
| C 04070041 |
| IF (ICZERO) 36300, 6300, 36300 04080041 |
| 6300 CONTINUE 04090041 |
| IVCOMP = 7 ** 4 04100041 |
| GO TO 46300 04110041 |
| 36300 IVDELE = IVDELE + 1 04120041 |
| WRITE (I02,80003) IVTNUM 04130041 |
| IF (ICZERO) 46300, 6311, 46300 04140041 |
| 46300 IF (IVCOMP - 2401) 26300,16300,26300 04150041 |
| 16300 IVPASS = IVPASS + 1 04160041 |
| WRITE (I02,80001) IVTNUM 04170041 |
| GO TO 6311 04180041 |
| 26300 IVFAIL = IVFAIL + 1 04190041 |
| IVCORR = 2401 04200041 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 04210041 |
| 6311 CONTINUE 04220041 |
| IVTNUM = 631 04230041 |
| C 04240041 |
| C **** TEST 631 **** 04250041 |
| C 04260041 |
| IF (ICZERO) 36310, 6310, 36310 04270041 |
| 6310 CONTINUE 04280041 |
| IVCOMP = (-7) ** 4 04290041 |
| GO TO 46310 04300041 |
| 36310 IVDELE = IVDELE + 1 04310041 |
| WRITE (I02,80003) IVTNUM 04320041 |
| IF (ICZERO) 46310, 6321, 46310 04330041 |
| 46310 IF (IVCOMP - 2401) 26310,16310,26310 04340041 |
| 16310 IVPASS = IVPASS + 1 04350041 |
| WRITE (I02,80001) IVTNUM 04360041 |
| GO TO 6321 04370041 |
| 26310 IVFAIL = IVFAIL + 1 04380041 |
| IVCORR = 2401 04390041 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 04400041 |
| 6321 CONTINUE 04410041 |
| IVTNUM = 632 04420041 |
| C 04430041 |
| C **** TEST 632 **** 04440041 |
| C TEST 632 - SMALL NUMBER BASE; ZERO EXPONENT 04450041 |
| C 04460041 |
| IF (ICZERO) 36320, 6320, 36320 04470041 |
| 6320 CONTINUE 04480041 |
| IVON01 = 1 04490041 |
| IVCOMP = IVON01 ** 1 04500041 |
| GO TO 46320 04510041 |
| 36320 IVDELE = IVDELE + 1 04520041 |
| WRITE (I02,80003) IVTNUM 04530041 |
| IF (ICZERO) 46320, 6331, 46320 04540041 |
| 46320 IF (IVCOMP - 1) 26320,16320,26320 04550041 |
| 16320 IVPASS = IVPASS + 1 04560041 |
| WRITE (I02,80001) IVTNUM 04570041 |
| GO TO 6331 04580041 |
| 26320 IVFAIL = IVFAIL + 1 04590041 |
| IVCORR = 1 04600041 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 04610041 |
| 6331 CONTINUE 04620041 |
| IVTNUM = 633 04630041 |
| C 04640041 |
| C **** TEST 633 **** 04650041 |
| C TEST 633 - ZERO BASE TO FIRST POWER 04660041 |
| C 04670041 |
| IF (ICZERO) 36330, 6330, 36330 04680041 |
| 6330 CONTINUE 04690041 |
| IVON01 = 0 04700041 |
| IVCOMP = IVON01 ** 1 04710041 |
| GO TO 46330 04720041 |
| 36330 IVDELE = IVDELE + 1 04730041 |
| WRITE (I02,80003) IVTNUM 04740041 |
| IF (ICZERO) 46330, 6341, 46330 04750041 |
| 46330 IF (IVCOMP) 26330,16330,26330 04760041 |
| 16330 IVPASS = IVPASS + 1 04770041 |
| WRITE (I02,80001) IVTNUM 04780041 |
| GO TO 6341 04790041 |
| 26330 IVFAIL = IVFAIL + 1 04800041 |
| IVCORR = 0 04810041 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 04820041 |
| 6341 CONTINUE 04830041 |
| IVTNUM = 634 04840041 |
| C 04850041 |
| C **** TEST 634 **** 04860041 |
| C TEST 634 - BASE =1; EXPONENT = 1 04870041 |
| C 04880041 |
| IF (ICZERO) 36340, 6340, 36340 04890041 |
| 6340 CONTINUE 04900041 |
| IVON01 = 1 04910041 |
| IVCOMP = IVON01 ** 1 04920041 |
| GO TO 46340 04930041 |
| 36340 IVDELE = IVDELE + 1 04940041 |
| WRITE (I02,80003) IVTNUM 04950041 |
| IF (ICZERO) 46340, 6351, 46340 04960041 |
| 46340 IF (IVCOMP - 1) 26340,16340,26340 04970041 |
| 16340 IVPASS = IVPASS + 1 04980041 |
| WRITE (I02,80001) IVTNUM 04990041 |
| GO TO 6351 05000041 |
| 26340 IVFAIL = IVFAIL + 1 05010041 |
| IVCORR = 1 05020041 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 05030041 |
| 6351 CONTINUE 05040041 |
| IVTNUM = 635 05050041 |
| C 05060041 |
| C **** TEST 635 **** 05070041 |
| C TEST 635 - LARGE EXPONENT 05080041 |
| C 05090041 |
| IF (ICZERO) 36350, 6350, 36350 05100041 |
| 6350 CONTINUE 05110041 |
| IVON01 = 1 05120041 |
| IVCOMP = IVON01 ** 32767 05130041 |
| GO TO 46350 05140041 |
| 36350 IVDELE = IVDELE + 1 05150041 |
| WRITE (I02,80003) IVTNUM 05160041 |
| IF (ICZERO) 46350, 6361, 46350 05170041 |
| 46350 IF (IVCOMP - 1) 26350,16350,26350 05180041 |
| 16350 IVPASS = IVPASS + 1 05190041 |
| WRITE (I02,80001) IVTNUM 05200041 |
| GO TO 6361 05210041 |
| 26350 IVFAIL = IVFAIL + 1 05220041 |
| IVCORR = 1 05230041 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 05240041 |
| 6361 CONTINUE 05250041 |
| IVTNUM = 636 05260041 |
| C 05270041 |
| C **** TEST 636 **** 05280041 |
| C TEST 636 - LARGE NUMBER BASE; EXPONENT = 1 05290041 |
| C 05300041 |
| IF (ICZERO) 36360, 6360, 36360 05310041 |
| 6360 CONTINUE 05320041 |
| IVON01 = 32767 05330041 |
| IVCOMP = IVON01 ** 1 05340041 |
| GO TO 46360 05350041 |
| 36360 IVDELE = IVDELE + 1 05360041 |
| WRITE (I02,80003) IVTNUM 05370041 |
| IF (ICZERO) 46360, 6371, 46360 05380041 |
| 46360 IF (IVCOMP - 32767) 26360,16360,26360 05390041 |
| 16360 IVPASS = IVPASS + 1 05400041 |
| WRITE (I02,80001) IVTNUM 05410041 |
| GO TO 6371 05420041 |
| 26360 IVFAIL = IVFAIL + 1 05430041 |
| IVCORR = 32767 05440041 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 05450041 |
| 6371 CONTINUE 05460041 |
| IVTNUM = 637 05470041 |
| C 05480041 |
| C **** TEST 637 **** 05490041 |
| C TEST 637 - ZERO BASE; LARGE NUMBER EXPONENT 05500041 |
| C 05510041 |
| IF (ICZERO) 36370, 6370, 36370 05520041 |
| 6370 CONTINUE 05530041 |
| IVON01 = 0 05540041 |
| IVCOMP = IVON01 ** 32767 05550041 |
| GO TO 46370 05560041 |
| 36370 IVDELE = IVDELE + 1 05570041 |
| WRITE (I02,80003) IVTNUM 05580041 |
| IF (ICZERO) 46370, 6381, 46370 05590041 |
| 46370 IF (IVCOMP) 26370,16370,26370 05600041 |
| 16370 IVPASS = IVPASS + 1 05610041 |
| WRITE (I02,80001) IVTNUM 05620041 |
| GO TO 6381 05630041 |
| 26370 IVFAIL = IVFAIL +1 05640041 |
| IVCORR = 0 05650041 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 05660041 |
| 6381 CONTINUE 05670041 |
| IVTNUM = 638 05680041 |
| C 05690041 |
| C **** TEST 638 **** 05700041 |
| C TEST 638 -LARGE NUMBER BASE; ZERO EXPONENT 05710041 |
| C 05720041 |
| IF (ICZERO) 36380, 6380, 36380 05730041 |
| 6380 CONTINUE 05740041 |
| IVON01 = 32767 05750041 |
| IVCOMP = IVON01 ** 0 05760041 |
| GO TO 46380 05770041 |
| 36380 IVDELE = IVDELE + 1 05780041 |
| WRITE (I02,80003) IVTNUM 05790041 |
| IF (ICZERO) 46380, 6391, 46380 05800041 |
| 46380 IF (IVCOMP - 1) 26380,16380,26380 05810041 |
| 16380 IVPASS = IVPASS + 1 05820041 |
| WRITE (I02,80001) IVTNUM 05830041 |
| GO TO 6391 05840041 |
| 26380 IVFAIL = IVFAIL + 1 05850041 |
| IVCORR = 1 05860041 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 05870041 |
| 6391 CONTINUE 05880041 |
| IVTNUM = 639 05890041 |
| C 05900041 |
| C **** TEST 639 **** 05910041 |
| C TEST 639 -EXPONENT IS POWER OF TWO 05920041 |
| C 05930041 |
| IF (ICZERO) 36390, 6390, 36390 05940041 |
| 6390 CONTINUE 05950041 |
| IVON01 = 181 05960041 |
| IVCOMP = IVON01 ** 2 05970041 |
| GO TO 46390 05980041 |
| 36390 IVDELE = IVDELE + 1 05990041 |
| WRITE (I02,80003) IVTNUM 06000041 |
| IF (ICZERO) 46390, 6401, 46390 06010041 |
| 46390 IF (IVCOMP - 32761) 26390,16390,26390 06020041 |
| 16390 IVPASS = IVPASS + 1 06030041 |
| WRITE (I02,80001) IVTNUM 06040041 |
| GO TO 6401 06050041 |
| 26390 IVFAIL = IVFAIL + 1 06060041 |
| IVCORR = 32761 06070041 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 06080041 |
| 6401 CONTINUE 06090041 |
| IVTNUM = 640 06100041 |
| C 06110041 |
| C **** TEST 640 **** 06120041 |
| C TEST 640 - BASE AND EXPONENT ARE BOTH POWERS OF TWO 06130041 |
| C 06140041 |
| IF (ICZERO) 36400, 6400, 36400 06150041 |
| 6400 CONTINUE 06160041 |
| IVON01 = 2 06170041 |
| IVCOMP = IVON01 ** 8 06180041 |
| GO TO 46400 06190041 |
| 36400 IVDELE = IVDELE + 1 06200041 |
| WRITE (I02,80003) IVTNUM 06210041 |
| IF (ICZERO) 46400, 6411, 46400 06220041 |
| 46400 IF (IVCOMP - 256) 26400,16400,26400 06230041 |
| 16400 IVPASS = IVPASS + 1 06240041 |
| WRITE (I02,80001) IVTNUM 06250041 |
| GO TO 6411 06260041 |
| 26400 IVFAIL = IVFAIL + 1 06270041 |
| IVCORR = 256 06280041 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 06290041 |
| 6411 CONTINUE 06300041 |
| C 06310041 |
| C TESTS 641 AND 642 TEST TO ENSURE EXPONENTIATION OPERATOR IS 06320041 |
| C NOT COMMUTATIVE 06330041 |
| C 06340041 |
| IVTNUM = 641 06350041 |
| C 06360041 |
| C **** TEST 641 **** 06370041 |
| C 06380041 |
| IF (ICZERO) 36410, 6410, 36410 06390041 |
| 6410 CONTINUE 06400041 |
| IVON01 = 3 06410041 |
| IVCOMP = IVON01 ** 9 06420041 |
| GO TO 46410 06430041 |
| 36410 IVDELE = IVDELE + 1 06440041 |
| WRITE (I02,80003) IVTNUM 06450041 |
| IF (ICZERO) 46410, 6421, 46410 06460041 |
| 46410 IF (IVCOMP - 19683) 26410,16410,26410 06470041 |
| 16410 IVPASS = IVPASS + 1 06480041 |
| WRITE (I02,80001) IVTNUM 06490041 |
| GO TO 6421 06500041 |
| 26410 IVFAIL = IVFAIL + 1 06510041 |
| IVCORR = 19683 06520041 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 06530041 |
| 6421 CONTINUE 06540041 |
| IVTNUM = 642 06550041 |
| C 06560041 |
| C **** TEST 642 **** 06570041 |
| C 06580041 |
| IF (ICZERO) 36420, 6420, 36420 06590041 |
| 6420 CONTINUE 06600041 |
| IVON01 = 9 06610041 |
| IVCOMP = IVON01 ** 3 06620041 |
| GO TO 46420 06630041 |
| 36420 IVDELE = IVDELE + 1 06640041 |
| WRITE (I02,80003) IVTNUM 06650041 |
| IF (ICZERO) 46420, 6431, 46420 06660041 |
| 46420 IF (IVCOMP - 729) 26420,16420,26420 06670041 |
| 16420 IVPASS = IVPASS + 1 06680041 |
| WRITE (I02,80001) IVTNUM 06690041 |
| GO TO 6431 06700041 |
| 26420 IVFAIL = IVFAIL + 1 06710041 |
| IVCORR = 729 06720041 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 06730041 |
| 6431 CONTINUE 06740041 |
| C 06750041 |
| C TESTS 643 THROUGH 648 TEST POSITIVE AND NEGATIVE BASES TO POSITIVE06760041 |
| C ODD AND EVEN NUMBER POWERS CHECKING THE SIGN06770041 |
| C OF THE RESULTS 06780041 |
| C 06790041 |
| IVTNUM = 643 06800041 |
| C 06810041 |
| C **** TEST 643 **** 06820041 |
| C 06830041 |
| IF (ICZERO) 36430, 6430, 36430 06840041 |
| 6430 CONTINUE 06850041 |
| IVON01 = 1 06860041 |
| IVCOMP = IVON01 ** 2 06870041 |
| GO TO 46430 06880041 |
| 36430 IVDELE = IVDELE + 1 06890041 |
| WRITE (I02,80003) IVTNUM 06900041 |
| IF (ICZERO) 46430, 6441, 46430 06910041 |
| 46430 IF (IVCOMP - 1) 26430,16430,26430 06920041 |
| 16430 IVPASS = IVPASS + 1 06930041 |
| WRITE (I02,80001) IVTNUM 06940041 |
| GO TO 6441 06950041 |
| 26430 IVFAIL = IVFAIL + 1 06960041 |
| IVCORR = 1 06970041 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 06980041 |
| 6441 CONTINUE 06990041 |
| IVTNUM = 644 07000041 |
| C 07010041 |
| C **** TEST 644 **** 07020041 |
| C 07030041 |
| IF (ICZERO) 36440, 6440, 36440 07040041 |
| 6440 CONTINUE 07050041 |
| IVON01 = -1 07060041 |
| IVCOMP = IVON01 ** 2 07070041 |
| GO TO 46440 07080041 |
| 36440 IVDELE = IVDELE + 1 07090041 |
| WRITE (I02,80003) IVTNUM 07100041 |
| IF (ICZERO) 46440, 6451, 46440 07110041 |
| 46440 IF (IVCOMP - 1) 26440,16440,26440 07120041 |
| 16440 IVPASS = IVPASS + 1 07130041 |
| WRITE (I02,80001) IVTNUM 07140041 |
| GO TO 6451 07150041 |
| 26440 IVFAIL = IVFAIL + 1 07160041 |
| IVCORR = 1 07170041 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 07180041 |
| 6451 CONTINUE 07190041 |
| IVTNUM = 645 07200041 |
| C 07210041 |
| C **** TEST 645 **** 07220041 |
| C 07230041 |
| IF (ICZERO) 36450, 6450, 36450 07240041 |
| 6450 CONTINUE 07250041 |
| IVON01 = 7 07260041 |
| IVCOMP = IVON01 ** 3 07270041 |
| GO TO 46450 07280041 |
| 36450 IVDELE = IVDELE + 1 07290041 |
| WRITE (I02,80003) IVTNUM 07300041 |
| IF (ICZERO) 46450, 6461, 46450 07310041 |
| 46450 IF (IVCOMP - 343) 26450,16450,26450 07320041 |
| 16450 IVPASS = IVPASS + 1 07330041 |
| WRITE (I02,80001) IVTNUM 07340041 |
| GO TO 6461 07350041 |
| 26450 IVFAIL = IVFAIL + 1 07360041 |
| IVCORR = 343 07370041 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 07380041 |
| 6461 CONTINUE 07390041 |
| IVTNUM = 646 07400041 |
| C 07410041 |
| C **** TEST 646 **** 07420041 |
| C 07430041 |
| IF (ICZERO) 36460, 6460, 36460 07440041 |
| 6460 CONTINUE 07450041 |
| IVON01 = -7 07460041 |
| IVCOMP = IVON01 ** 3 07470041 |
| GO TO 46460 07480041 |
| 36460 IVDELE = IVDELE + 1 07490041 |
| WRITE (I02,80003) IVTNUM 07500041 |
| IF (ICZERO) 46460, 6471, 46460 07510041 |
| 46460 IF (IVCOMP + 343) 26460,16460,26460 07520041 |
| 16460 IVPASS = IVPASS + 1 07530041 |
| WRITE (I02,80001) IVTNUM 07540041 |
| GO TO 6471 07550041 |
| 26460 IVFAIL = IVFAIL + 1 07560041 |
| IVCORR = -343 07570041 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 07580041 |
| 6471 CONTINUE 07590041 |
| IVTNUM = 647 07600041 |
| C 07610041 |
| C **** TEST 647 **** 07620041 |
| C 07630041 |
| IF (ICZERO) 36470, 6470, 36470 07640041 |
| 6470 CONTINUE 07650041 |
| IVON01 = 7 07660041 |
| IVCOMP = IVON01 ** 4 07670041 |
| GO TO 46470 07680041 |
| 36470 IVDELE = IVDELE + 1 07690041 |
| WRITE (I02,80003) IVTNUM 07700041 |
| IF (ICZERO) 46470, 6481, 46470 07710041 |
| 46470 IF (IVCOMP - 2401) 26470,16470,26470 07720041 |
| 16470 IVPASS = IVPASS + 1 07730041 |
| WRITE (I02,80001) IVTNUM 07740041 |
| GO TO 6481 07750041 |
| 26470 IVFAIL = IVFAIL + 1 07760041 |
| IVCORR = 2401 07770041 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 07780041 |
| 6481 CONTINUE 07790041 |
| IVTNUM = 648 07800041 |
| C 07810041 |
| C **** TEST 648 **** 07820041 |
| C 07830041 |
| IF (ICZERO) 36480, 6480, 36480 07840041 |
| 6480 CONTINUE 07850041 |
| IVON01 = -7 07860041 |
| IVCOMP = IVON01 ** 4 07870041 |
| GO TO 46480 07880041 |
| 36480 IVDELE = IVDELE + 1 07890041 |
| WRITE (I02,80003) IVTNUM 07900041 |
| IF (ICZERO) 46480, 6491, 46480 07910041 |
| 46480 IF (IVCOMP - 2401) 26480,16480,26480 07920041 |
| 16480 IVPASS = IVPASS + 1 07930041 |
| WRITE (I02,80001) IVTNUM 07940041 |
| GO TO 6491 07950041 |
| 26480 IVFAIL = IVFAIL + 1 07960041 |
| IVCORR = 2401 07970041 |
| WRITE (I02,80004) IVTNUM, IVCOMP ,IVCORR 07980041 |
| 6491 CONTINUE 07990041 |
| C *** END OF TESTS *** 08000041 |
| C 08010041 |
| C WRITE PAGE FOOTINGS AND RUN SUMMARIES 08020041 |
| 99999 CONTINUE 08030041 |
| WRITE (I02,90002) 08040041 |
| WRITE (I02,90006) 08050041 |
| WRITE (I02,90002) 08060041 |
| WRITE (I02,90002) 08070041 |
| WRITE (I02,90007) 08080041 |
| WRITE (I02,90002) 08090041 |
| WRITE (I02,90008) IVFAIL 08100041 |
| WRITE (I02,90009) IVPASS 08110041 |
| WRITE (I02,90010) IVDELE 08120041 |
| C 08130041 |
| C 08140041 |
| C TERMINATE ROUTINE EXECUTION 08150041 |
| STOP 08160041 |
| C 08170041 |
| C FORMAT STATEMENTS FOR PAGE HEADERS 08180041 |
| 90000 FORMAT ("1") 08190041 |
| 90002 FORMAT (" ") 08200041 |
| 90001 FORMAT (" ",10X,"FORTRAN COMPILER VALIDATION SYSTEM" ) 08210041 |
| 90003 FORMAT (" ",21X,"VERSION 2.1" ) 08220041 |
| 90004 FORMAT (" ",10X,"FOR OFFICIAL USE ONLY - COPYRIGHT 1978" ) 08230041 |
| 90005 FORMAT (" ",5X,"TEST",5X,"PASS/FAIL", 5X,"COMPUTED",8X,"CORRECT") 08240041 |
| 90006 FORMAT (" ",5X,"----------------------------------------------" ) 08250041 |
| 90011 FORMAT (" ",18X,"SUBSET LEVEL TEST" ) 08260041 |
| C 08270041 |
| C FORMAT STATEMENTS FOR RUN SUMMARIES 08280041 |
| 90008 FORMAT (" ",15X,I5," ERRORS ENCOUNTERED" ) 08290041 |
| 90009 FORMAT (" ",15X,I5," TESTS PASSED" ) 08300041 |
| 90010 FORMAT (" ",15X,I5," TESTS DELETED" ) 08310041 |
| C 08320041 |
| C FORMAT STATEMENTS FOR TEST RESULTS 08330041 |
| 80001 FORMAT (" ",4X,I5,7X,"PASS") 08340041 |
| 80002 FORMAT (" ",4X,I5,7X,"FAIL") 08350041 |
| 80003 FORMAT (" ",4X,I5,7X,"DELETED") 08360041 |
| 80004 FORMAT (" ",4X,I5,7X,"FAIL",10X,I6,9X,I6) 08370041 |
| 80005 FORMAT (" ",4X,I5,7X,"FAIL",4X,E12.5,3X,E12.5) 08380041 |
| C 08390041 |
| 90007 FORMAT (" ",20X,"END OF PROGRAM FM041" ) 08400041 |
| END 08410041 |