blob: cf38c33844a22d3dfdf447420c2779c5b19cfe25 [file] [log] [blame]
PROGRAM FM080
C COMMENT SECTION 00010080
C 00020080
C FM080 00030080
C 00040080
C THIS ROUTINE CONTAINS EXTERNAL FUNCTION REFERENCE TESTS. 00050080
C THE FUNCTION SUBPROGRAMS CALLED BY THIS ROUTINE ARE FF081, 00060080
C FF082 AND FF083. THE FUNCTION SUBPROGRAMS ARE DEFINED AS 00070080
C FF081 = INTEGER, FF082 = REAL, FF083 = IMPLICIT REAL. 00080080
C THE FUNCTION SUBPROGRAM DUMMY ARGUMENTS MUST AGREE IN ORDER, 00090080
C NUMBER AND TYPE WITH THE CORRESPONDING ACTUAL ARGUMENTS OF THE 00100080
C MAIN PROGRAM. THE ARGUMENTS OF THE FUNCTION SUBPROGRAMS WILL 00110080
C CORRESPOND TO ACTUAL ARGUMENT LIST REFERENCES OF VARIABLE-NAME, 00120080
C ARRAY-NAME, ARRAY-ELEMENT-NAME AND EXPRESSION RESPECTIVELY. 00130080
C 00140080
C THIS ROUTINE WILL TEST THE VALUE OF THE FUNCTION AND THE 00150080
C FUNCTION ARGUMENTS RETURNED FOLLOWING THE FUNCTION REFERENCE CALL.00160080
C 00170080
C 00180080
C REFERENCES 00190080
C AMERICAN NATIONAL STANDARD PROGRAMMING LANGUAGE FORTRAN, 00200080
C X3.9-1978 00210080
C 00220080
C SECTION 2.6, ARRAY 00230080
C SECTION 15.5.2, REFERENCING EXTERNAL FUNCTIONS 00240080
C SECTION 17.2, EVENTS THAT CAUSE ENTITIES TO BECOME DEFINED 00250080
DIMENSION IADN1A (5), IADN2A (4,4) 00260080
DIMENSION RADN3A (3,6,3), RADN1A (10) 00270080
DIMENSION IADN3A (3,4,5) 00280080
INTEGER FF081 00290080
REAL FF082 00300080
C 00310080
C ********************************************************** 00320080
C 00330080
C A COMPILER VALIDATION SYSTEM FOR THE FORTRAN LANGUAGE 00340080
C BASED ON SPECIFICATIONS AS DEFINED IN AMERICAN NATIONAL STANDARD 00350080
C PROGRAMMING LANGUAGE FORTRAN X3.9-1978, HAS BEEN DEVELOPED BY THE 00360080
C FEDERAL COBOL COMPILER TESTING SERVICE. THE FORTRAN COMPILER 00370080
C VALIDATION SYSTEM (FCVS) CONSISTS OF AUDIT ROUTINES, THEIR RELATED00380080
C DATA, AND AN EXECUTIVE SYSTEM. EACH AUDIT ROUTINE IS A FORTRAN 00390080
C PROGRAM, SUBPROGRAM OR FUNCTION WHICH INCLUDES TESTS OF SPECIFIC 00400080
C LANGUAGE ELEMENTS AND SUPPORTING PROCEDURES INDICATING THE RESULT 00410080
C OF EXECUTING THESE TESTS. 00420080
C 00430080
C THIS PARTICULAR PROGRAM/SUBPROGRAM/FUNCTION CONTAINS FEATURES 00440080
C FOUND ONLY IN THE SUBSET AS DEFINED IN X3.9-1978. 00450080
C 00460080
C SUGGESTIONS AND COMMENTS SHOULD BE FORWARDED TO - 00470080
C 00480080
C NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY 00490080
C SOFTWARE STANDARDS VALIDATION GROUP 00500080
C BUILDING 225 RM A266 00510080
C GAITHERSBURG, MD 20899 00520080
C ********************************************************** 00530080
C 00540080
C 00550080
C 00560080
C INITIALIZATION SECTION 00570080
C 00580080
C INITIALIZE CONSTANTS 00590080
C ************** 00600080
C I01 CONTAINS THE LOGICAL UNIT NUMBER FOR THE CARD READER. 00610080
I01 = 5 00620080
C I02 CONTAINS THE LOGICAL UNIT NUMBER FOR THE PRINTER. 00630080
I02 = 6 00640080
C SYSTEM ENVIRONMENT SECTION 00650080
C 00660080
CX010 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-010 CONTROL CARD. 00670080
C THE CX010 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I01 = 5 00680080
C (UNIT NUMBER FOR CARD READER). 00690080
CX011 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-011 CONTROL CARD. 00700080
C THE CX011 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL 00710080
C FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX010 ABOVE. 00720080
C 00730080
CX020 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-020 CONTROL CARD. 00740080
C THE CX020 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I02 = 6 00750080
C (UNIT NUMBER FOR PRINTER). 00760080
CX021 THIS CARD IS REPLACED BY CONTENTS OF FEXEC X-021 CONTROL CARD. 00770080
C THE CX021 CARD IS FOR SYSTEMS WHICH REQUIRE ADDITIONAL 00780080
C FORTRAN STATEMENTS FOR FILES ASSOCIATED WITH CX020 ABOVE. 00790080
C 00800080
IVPASS=0 00810080
IVFAIL=0 00820080
IVDELE=0 00830080
ICZERO=0 00840080
C 00850080
C WRITE PAGE HEADERS 00860080
WRITE (I02,90000) 00870080
WRITE (I02,90001) 00880080
WRITE (I02,90002) 00890080
WRITE (I02, 90002) 00900080
WRITE (I02,90003) 00910080
WRITE (I02,90002) 00920080
WRITE (I02,90004) 00930080
WRITE (I02,90002) 00940080
WRITE (I02,90011) 00950080
WRITE (I02,90002) 00960080
WRITE (I02,90002) 00970080
WRITE (I02,90005) 00980080
WRITE (I02,90006) 00990080
WRITE (I02,90002) 01000080
C 01010080
C TEST SECTION 01020080
C 01030080
C EXTERNAL FUNCTION REFERENCE - FUNCTION SUBPROGRAM DEFINED AS 01040080
C INTEGER (FF081) 01050080
C 01060080
6741 CONTINUE 01070080
IVTNUM = 674 01080080
C 01090080
C TEST 674 THROUGH 679 TEST THE FUNCTION AND ARGUMENT VALUES 01100080
C FROM REFERENCE OF FUNCTION FF081. FUNCTION SUBPROGRAM FF081 IS 01110080
C DEFINED AS INTEGER. 01120080
C 01130080
C **** TEST 674 **** 01140080
C 01150080
C TEST 674 TESTS THE FUNCTION VALUE RETURNED FROM FUNCTION FF081 01160080
C 01170080
IF (ICZERO) 36740,6740,36740 01180080
6740 CONTINUE 01190080
IVON0A = 0 01200080
IVON02 = 2 01210080
IADN1A (3) = 8 01220080
IADN1A (2) = 4 01230080
IADN2A (1,3) =10 01240080
IVON0A = FF081 (IVON02, IADN1A, IADN2A, 999) 01250080
GO TO 46740 01260080
36740 IVDELE = IVDELE + 1 01270080
WRITE (I02,80003) IVTNUM 01280080
IF (ICZERO) 46740,6751,46740 01290080
46740 IF (IVON0A - 1015) 26740,16740,26740 01300080
16740 IVPASS = IVPASS + 1 01310080
WRITE (I02,80001) IVTNUM 01320080
GO TO 6751 01330080
26740 IVFAIL = IVFAIL + 1 01340080
IVCORR = 1015 01350080
IVCOMP = IVON0A 01360080
WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 01370080
6751 CONTINUE 01380080
IVTNUM = 675 01390080
C 01400080
C **** TEST 675 **** 01410080
C 01420080
C TEST 675 TESTS THE RETURN VALUE OF VARIABLE-NAME ARGUMENT 01430080
C IVON02. VALUE OF IVON02 SHOULD BE 4. 01440080
C 01450080
IF (ICZERO) 36750,6750,36750 01460080
6750 CONTINUE 01470080
GO TO 46750 01480080
36750 IVDELE = IVDELE + 1 01490080
WRITE (I02,80003) IVTNUM 01500080
IF (ICZERO) 46750,6761,46750 01510080
46750 IF (IVON02 - 4) 26750,16750,26750 01520080
16750 IVPASS = IVPASS + 1 01530080
WRITE (I02,80001) IVTNUM 01540080
GO TO 6761 01550080
26750 IVFAIL = IVFAIL + 1 01560080
IVCORR = 4 01570080
IVCOMP = IVON02 01580080
WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 01590080
6761 CONTINUE 01600080
IVTNUM = 676 01610080
C 01620080
C **** TEST 676 **** 01630080
C 01640080
C TEST 676 TESTS THE RETURN VALUE OF ARRAY-NAME ARGUMENT 01650080
C IADN1A. IADN1A (2) IS INCREMENTED BY 40 IN FUNCTION SUBPROGRAM 01660080
C AND SHOULD RETURN A VALUE OF 44. 01670080
C 01680080
IF (ICZERO) 36760,6760,36760 01690080
6760 CONTINUE 01700080
GO TO 46760 01710080
36760 IVDELE = IVDELE + 1 01720080
WRITE (I02,80003) IVTNUM 01730080
IF (ICZERO) 46760,6771,46760 01740080
46760 IF (IADN1A (2) - 44) 26760,16760,26760 01750080
16760 IVPASS = IVPASS + 1 01760080
WRITE (I02,80001) IVTNUM 01770080
GO TO 6771 01780080
26760 IVFAIL = IVFAIL + 1 01790080
IVCORR = 44 01800080
IVCOMP = IADN1A (2) 01810080
WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 01820080
6771 CONTINUE 01830080
IVTNUM = 677 01840080
C 01850080
C **** TEST 677 **** 01860080
C 01870080
C TEST 677 TESTS THE RETURN VALUE OF ARRAY-NAME ARGUMENT IADN1A. 01880080
C IADN1A (3) WAS NOT MODIFFED BY FUNCTION SUBPROGRAM AND SHOULD 01890080
C HAVE A VALUE OF 8 01900080
C 01910080
IF (ICZERO) 36770,6770,36770 01920080
6770 CONTINUE 01930080
GO TO 46770 01940080
36770 IVDELE = IVDELE + 1 01950080
WRITE (I02,80003) IVTNUM 01960080
IF (ICZERO) 46770,6781,46770 01970080
46770 IF (IADN1A (3) - 8) 26770,16770,26770 01980080
16770 IVPASS = IVPASS + 1 01990080
WRITE (I02,80001) IVTNUM 02000080
GO TO 6781 02010080
26770 IVFAIL = IVFAIL + 1 02020080
IVCORR = 8 02030080
IVCOMP = IADN1A (3) 02040080
WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 02050080
6781 CONTINUE 02060080
IVTNUM = 678 02070080
C 02080080
C **** TEST 678 **** 02090080
C 02100080
C TEST 678 TESTS THE RETURN VALUE OF ARRAY-ELEMENT-NAME 02110080
C IADN2A (1,3). IADN2A (1,3) WAS INCREMENTED BY 70 IN THE FUNCTION 02120080
C SUBPROGRAM AND SHOULD CONTAIN A VALUE OF 80. 02130080
C 02140080
IF (ICZERO) 36780,6780,36780 02150080
6780 CONTINUE 02160080
GO TO 46780 02170080
36780 IVDELE = IVDELE + 1 02180080
WRITE (I02,80003) IVTNUM 02190080
IF (ICZERO) 46780,6791,46780 02200080
46780 IF (IADN2A (1,3) - 80) 26780,16780,26780 02210080
16780 IVPASS = IVPASS + 1 02220080
WRITE (I02,80001) IVTNUM 02230080
GO TO 6791 02240080
26780 IVFAIL = IVFAIL + 1 02250080
IVCORR = 80 02260080
IVCOMP = IADN2A (1,3) 02270080
WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 02280080
6791 CONTINUE 02290080
IVTNUM = 679 02300080
C 02310080
C **** TEST 679 **** 02320080
C 02330080
C TEST 679 TESTS THE VALUE OF INTEGER FUNCTION ASSIGNED 02340080
C TO A REAL VARIABLE. 02350080
C 02360080
IF (ICZERO) 36790,6790,36790 02370080
6790 CONTINUE 02380080
RVON0A = 0.0 02390080
IVON02 = 2 02400080
IADN1A (2) = 4 02410080
IADN2A (1,3) = 10 02420080
RVON0A = FF081 (IVON02, IADN1A, IADN2A, 999) 02430080
GO TO 46790 02440080
36790 IVDELE = IVDELE + 1 02450080
WRITE (I02,80003) IVTNUM 02460080
IF (ICZERO) 46790,6801,46790 02470080
46790 IF (RVON0A - 1014.5) 26790,16790,46791 02480080
46791 IF (RVON0A - 1015.5) 16790,16790,26790 02490080
16790 IVPASS = IVPASS + 1 02500080
WRITE (I02,80001) IVTNUM 02510080
GO TO 6801 02520080
26790 IVFAIL = IVFAIL + 1 02530080
RVCORR = 1015.0 02540080
RVCOMP = RVON0A 02550080
WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 02560080
6801 CONTINUE 02570080
IVTNUM = 680 02580080
C 02590080
C EXTERNAL FUNCTION REFERENCE - FUNCTION SUBPROGRAM FF082 DEFINED AS02600080
C REAL 02610080
C 02620080
C TESTS 680 THRU 685 TESTS THE FUNCTION AND ARGUMENT VALUES 02630080
C FROM THE FUNCTION REFERENCE TO SUBPROGRAM FF082. THE FUNCTION 02640080
C SUBPROGRAM IS DEFINED AS REAL. 02650080
C 02660080
C **** TEST 680 *** 02670080
C 02680080
C TEST 680 TESTS THE VALUE OF THE FUNCTION FF082. VALUE OF 02690080
C FUNCTION SHOULD BE 339.0. 02700080
C 02710080
IF (ICZERO) 36800,6800,36800 02720080
6800 CONTINUE 02730080
RVON01 = 2.0 02740080
RADN3A (2,5,2) = 100.0 02750080
RADN1A (5) = 210.5 02760080
RVON0A = 0.0 02770080
RVON0A = FF082 (RVON01, RADN3A, RADN1A, 26.5) 02780080
GO TO 46800 02790080
36800 IVDELE = IVDELE + 1 02800080
WRITE (I02, 80003) IVTNUM 02810080
IF (ICZERO) 46800,6811,46800 02820080
46800 IF (RVON0A - 338.5) 26800,16800,46801 02830080
46801 IF (RVON0A - 339.5) 16800,16800,26800 02840080
16800 IVPASS = IVPASS + 1 02850080
WRITE (I02,80001) IVTNUM 02860080
GO TO 6811 02870080
26800 IVFAIL = IVFAIL + 1 02880080
RVCORR = 339.0 02890080
RVCOMP = RVON0A 02900080
WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 02910080
6811 CONTINUE 02920080
IVTNUM = 681 02930080
C 02940080
C **** TEST 681 **** 02950080
C 02960080
C TEST 681 TESTS THE VALUE OF THE VARIABLE-NAME ARGUMENT RVON01 02970080
C FOLLOWING THE FUNCTION REFERENCE. VALUE OF RVON01 SHOULD BE 8.4. 02980080
C 02990080
IF (ICZERO) 36810,6810,36810 03000080
6810 CONTINUE 03010080
GO TO 46810 03020080
36810 IVDELE = IVDELE + 1 03030080
WRITE (I02,80003) IVTNUM 03040080
IF (ICZERO) 46810,6821,46810 03050080
46810 IF (RVON01 - 8.395) 26810,16810,46811 03060080
46811 IF (RVON01 - 8.405) 16810,16810,26810 03070080
16810 IVPASS = IVPASS + 1 03080080
WRITE (I02,80001) IVTNUM 03090080
GO TO 6821 03100080
26810 IVFAIL = IVFAIL + 1 03110080
RVCORR = 8.4 03120080
RVCOMP = RVON01 03130080
WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 03140080
6821 CONTINUE 03150080
IVTNUM = 682 03160080
C 03170080
C **** TEST 682 **** 03180080
C 03190080
C TEST 682 TESTS THE VALUE OF THE ARRAY-NAME ARGUMENT RADN3A 03200080
C FOLLOWING THE FUNCTION REFERENCE. RADN3A (2,5,2) WAS INITIALIZED 03210080
C IN MAIN PROGRAM AND INCREMENTED IN SUBPROGRAM. VALUE OF RADN3A 03220080
C (2,5,2) SHOULD BE 112.2. 03230080
C 03240080
IF (ICZERO) 36820,6820,36820 03250080
6820 CONTINUE 03260080
GO TO 46820 03270080
36820 IVDELE = IVDELE + 1 03280080
WRITE (I02,80003) IVTNUM 03290080
IF (ICZERO) 46820,6831,46820 03300080
46820 IF (RADN3A (2,5,2) - 111.7) 26820,16820,46821 03310080
46821 IF (RADN3A (2,5,2) - 112.7) 16820,16820,26820 03320080
16820 IVPASS = IVPASS + 1 03330080
WRITE (I02,80001) IVTNUM 03340080
GO TO 6831 03350080
26820 IVFAIL = IVFAIL + 1 03360080
RVCORR = 112.2 03370080
RVCOMP = RADN3A (2,5,2) 03380080
WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 03390080
6831 CONTINUE 03400080
IVTNUM = 683 03410080
C 03420080
C **** TEST 683 **** 03430080
C 03440080
C TEST 683 TESTS THE VALUE OF THE ARRAY-NAME ARGUMENT RADN3A 03450080
C FOLLOWING THE FUNCTION REFERENCE. RADN3A (1,2,1) WAS INITIALIZED 03460080
C IN THE SUBPROGRAM. THE VALUE OF RADN3A (1,2,1) SHOULD BE 612.2. 03470080
C 03480080
IF (ICZERO) 36830,6830,36830 03490080
6830 CONTINUE 03500080
GO TO 46830 03510080
36830 IVDELE = IVDELE + 1 03520080
WRITE (I02,80003) IVTNUM 03530080
IF (ICZERO) 46830,6841,46830 03540080
46830 IF (RADN3A (1,2,1) - 611.7) 26830,16830,46831 03550080
46831 IF (RADN3A (1,2,1) - 612.7) 16830,16830,26830 03560080
16830 IVPASS = IVPASS + 1 03570080
WRITE (I02,80001) IVTNUM 03580080
GO TO 6841 03590080
26830 IVFAIL = IVFAIL + 1 03600080
RVCORR = 612.2 03610080
RVCOMP = RADN3A (1,2,1) 03620080
WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 03630080
6841 CONTINUE 03640080
IVTNUM = 684 03650080
C 03660080
C **** TEST 684 **** 03670080
C 03680080
C TEST 684 TESTS THE VALUE OF THE ARRAY-ELEMENT-NAME ARGUMENT 03690080
C RADN1A FOLLOWING THE FUNCTION REFERENCE. RADN1A (5) WAS 03700080
C INITIALIZED IN THE MAIN PROGRAM AND INCREMENTED BY 18.8 IN THE 03710080
C FUNCTION SUBPROGRAM. THE VALUE OF RADN1A SHOULD BE 229.3. 03720080
C 03730080
IF (ICZERO) 36840,6840,36840 03740080
6840 CONTINUE 03750080
GO TO 46840 03760080
36840 IVDELE = IVDELE + 1 03770080
WRITE (I02,80003) IVTNUM 03780080
IF (ICZERO) 46840,6851,46840 03790080
46840 IF (RADN1A (5) - 228.8) 26840,16840,46841 03800080
46841 IF (RADN1A (5) - 229.8) 16840,16840,26840 03810080
16840 IVPASS = IVPASS + 1 03820080
WRITE (I02,80001) IVTNUM 03830080
GO TO 6851 03840080
26840 IVFAIL = IVFAIL + 1 03850080
RVCORR = 229.3 03860080
RVCOMP = RADN1A (5) 03870080
WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 03880080
6851 CONTINUE 03890080
IVTNUM = 685 03900080
C 03910080
C **** TEST 685 **** 03920080
C 03930080
C TEST 685 TESTS THE RESULTANT VALUE WHERE THE FUNCTION 03940080
C SUBPROGRAM IS DEFINED AS REAL AND THE VARIABLE TO WHICH THE 03950080
C FUNCTION VALUE IS ASSIGNED IN THE MAIN PROGRAM IS DEFINED AS 03960080
C INTEGER. 03970080
C 03980080
IF (ICZERO) 36850,6850,36850 03990080
6850 CONTINUE 04000080
RVON01 = 4.0 04010080
RADN3A (2,5,2) = 200.0 04020080
RADN1A (5) = 2.85 04030080
IVON0A = 0.0 04040080
IVON0A = FF082 (RVON01, RADN3A, RADN1A, 102.68) 04050080
GO TO 46850 04060080
36850 IVDELE = IVDELE + 1 04070080
WRITE (I02,80003) IVTNUM 04080080
IF (ICZERO) 46850,6861,46850 04090080
46850 IF (IVON0A - 309) 26850,16850,26850 04100080
16850 IVPASS = IVPASS + 1 04110080
WRITE (I02,80001) IVTNUM 04120080
GO TO 6861 04130080
26850 IVFAIL = IVFAIL + 1 04140080
IVCORR = 309 04150080
IVCOMP = IVON0A 04160080
WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 04170080
6861 CONTINUE 04180080
IVTNUM = 686 04190080
C 04200080
C TESTS 686 THRU 690 TESTS THE FUNCTION AND ARGUMENT VALUES 04210080
C FROM THE EXTERNAL FUNCTION REFERENCE TO SUBPROGRAM FF083. THE 04220080
C FUNCTION SUBPROGRAM IS AN IMPLICIT DEFINITION OF REAL. 04230080
C 04240080
C ***** TEST 686 ***** 04250080
C 04260080
C TEST 686 TESTS THE VALUE OF FUNCTION FF082. THE VALUE OF THE 04270080
C FUNCTION SHOULD BE 921.8. 04280080
C 04290080
IF (ICZERO) 36860,6860,36860 04300080
6860 CONTINUE 04310080
C 04320080
C 04330080
IVON01 = 826 04340080
IADN2A (1,1) = 77 04350080
IADN3A (2,3,4) = 10 04360080
RVON02 = 4.4 04370080
RVON03 = 0.0 04380080
C 04390080
RVON03 = FF083 (IVON01, IADN2A, IADN3A, RVON02 * 2.0) 04400080
GO TO 46860 04410080
36860 IVDELE = IVDELE + 1 04420080
WRITE (I02,80003) IVTNUM 04430080
IF (ICZERO) 46860,6871,46860 04440080
46860 IF (RVON03 - 921.3) 26860,16860,46861 04450080
46861 IF (RVON03 - 922.3) 16860,16860,26860 04460080
16860 IVPASS = IVPASS + 1 04470080
WRITE (I02,80001) IVTNUM 04480080
GO TO 6871 04490080
26860 IVFAIL = IVFAIL + 1 04500080
RVCORR = 921.8 04510080
RVCOMP = RVON03 04520080
WRITE (I02,80005) IVTNUM, RVCOMP, RVCORR 04530080
6871 CONTINUE 04540080
IVTNUM = 687 04550080
C 04560080
C **** TEST 687 ***** 04570080
C 04580080
C TEST 687 TESTS THE VALUE OF THE VARIABLE-NAME ARGUMENT IVON01 04590080
C FOLLOWING THE FUNCTION REFERENCE. THE VALUE OF IVON01 SHOULD BE 04600080
C 836. 04610080
C 04620080
IF (ICZERO) 36870,6870,36870 04630080
6870 CONTINUE 04640080
GO TO 46870 04650080
36870 IVDELE = IVDELE + 1 04660080
WRITE (I02,80003) IVTNUM 04670080
IF (ICZERO) 46870,6881,46870 04680080
46870 IF (IVON01 - 836) 26870,16870,26870 04690080
16870 IVPASS = IVPASS + 1 04700080
WRITE (I02,80001) IVTNUM 04710080
GO TO 6881 04720080
26870 IVFAIL = IVFAIL + 1 04730080
IVCORR = 836 04740080
IVCOMP = IVON01 04750080
WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 04760080
6881 CONTINUE 04770080
IVTNUM = 688 04780080
C 04790080
C **** TEST 688 ***** 04800080
C 04810080
C TEST 688 TESTS THE VALUE OF THE ARRAY-NAME ARGUMENT IADN2A 04820080
C FOLLOWING THE FUNCTION REFERENCE. THE ACTUAL ARGUMENT WAS 04830080
C INITIALIZED IN THE MAIN PROGRAM AND IS INCREMENTED IN THE 04840080
C SUBPROGRAM. THE VALUE OF IADN2A (1,1) SHOULD BE 97. 04850080
C 04860080
IF (ICZERO) 36880,6880,36880 04870080
6880 CONTINUE 04880080
GO TO 46880 04890080
36880 IVDELE = IVDELE + 1 04900080
WRITE (I02,80003) IVTNUM 04910080
IF (ICZERO) 46880,6880,46880 04920080
46880 IF (IADN2A (1,1) - 97) 26880,16880,26880 04930080
16880 IVPASS = IVPASS + 1 04940080
WRITE (I02,80001) IVTNUM 04950080
GO TO 6891 04960080
26880 IVFAIL = IVFAIL + 1 04970080
IVCORR = 97 04980080
IVCOMP = IADN2A (1,1) 04990080
WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 05000080
6891 CONTINUE 05010080
IVTNUM = 689 05020080
C 05030080
C **** TEST 689 **** 05040080
C 05050080
C TEST 689 TESTS THE VALUE OF THE ARRAY-ELEMENT-NAME ARGUMENT 05060080
C IADN3A FOLLOWING THE FUNCTION REFERENCE. IADN3A (2,3,4) 05070080
C WAS INTIALIZED IN THE MAIN PROGRAM AND INCREMENTED BY 40 IN THE 05080080
C FUNCTION SUBPROGRAM. THE VALUE OF IADN3A SHOULD BE 50. 05090080
C 05100080
IF (ICZERO) 36890,6890,36890 05110080
6890 CONTINUE 05120080
GO TO 46890 05130080
36890 IVDELE = IVDELE + 1 05140080
WRITE (I02,80003) IVTNUM 05150080
IF (ICZERO) 46890,6901,46890 05160080
46890 IF (IADN3A (2,3,4) - 50) 26890,16890,26890 05170080
16890 IVPASS = IVPASS + 1 05180080
WRITE (I02,80001) IVTNUM 05190080
GO TO 6901 05200080
26890 IVFAIL = IVFAIL + 1 05210080
IVCORR = 50 05220080
IVCOMP = IADN3A (2,3,4) 05230080
WRITE (I02,80004) IVTNUM,IVCOMP,IVCORR 05240080
6901 CONTINUE 05250080
IVTNUM = 690 05260080
C 05270080
C **** TEST 690 **** 05280080
C 05290080
C TEST 690 TESTS THE RESULTANT VALUE WHERE THE FUNCTION 05300080
C SUBPROGRAM IS IMPLICITY DEFINED AS REAL AND THE VARIABLE 05310080
C TO WHICH THE FUNCTION VALUE IS ASSIGNED IN THE MAIN PROGRAM 05320080
C IS DEFINED AS INTEGER. THE VALUE OF IVON03 SHOULD BE 329. 05330080
C 05340080
IF (ICZERO) 36900,6900,36900 05350080
6900 CONTINUE 05360080
IVON01 = 226 05370080
IADN2A (1,1) = 66 05380080
IADN3A (2,3,4) = 20 05390080
RVON02 = 8.8 05400080
IVON03 = 0 05410080
C 05420080
IVON03 = FF083 (IVON01,IADN2A,IADN3A,RVON02 * 2.0) 05430080
C 05440080
GO TO 46900 05450080
36900 IVDELE = IVDELE + 1 05460080
WRITE (I02,80003) IVTNUM 05470080
IF (ICZERO) 46900,6911,46900 05480080
46900 IF (IVON03 - 329) 26900,16900,26900 05490080
16900 IVPASS = IVPASS + 1 05500080
WRITE (I02,80001) IVTNUM 05510080
GO TO 6911 05520080
26900 IVFAIL = IVFAIL + 1 05530080
IVCORR = 329 05540080
IVCOMP = IVON03 05550080
WRITE (I02,80004) IVTNUM, IVCOMP, IVCORR 05560080
6911 CONTINUE 05570080
C 05580080
C WRITE PAGE FOOTINGS AND RUN SUMMARIES 05590080
99999 CONTINUE 05600080
WRITE (I02,90002) 05610080
WRITE (I02,90006) 05620080
WRITE (I02,90002) 05630080
WRITE (I02,90002) 05640080
WRITE (I02,90007) 05650080
WRITE (I02,90002) 05660080
WRITE (I02,90008) IVFAIL 05670080
WRITE (I02,90009) IVPASS 05680080
WRITE (I02,90010) IVDELE 05690080
C 05700080
C 05710080
C TERMINATE ROUTINE EXECUTION 05720080
STOP 05730080
C 05740080
C FORMAT STATEMENTS FOR PAGE HEADERS 05750080
90000 FORMAT ("1") 05760080
90002 FORMAT (" ") 05770080
90001 FORMAT (" ",10X,"FORTRAN COMPILER VALIDATION SYSTEM" ) 05780080
90003 FORMAT (" ",21X,"VERSION 2.1" ) 05790080
90004 FORMAT (" ",10X,"FOR OFFICIAL USE ONLY - COPYRIGHT 1978" ) 05800080
90005 FORMAT (" ",5X,"TEST",5X,"PASS/FAIL", 5X,"COMPUTED",8X,"CORRECT") 05810080
90006 FORMAT (" ",5X,"----------------------------------------------" ) 05820080
90011 FORMAT (" ",18X,"SUBSET LEVEL TEST" ) 05830080
C 05840080
C FORMAT STATEMENTS FOR RUN SUMMARIES 05850080
90008 FORMAT (" ",15X,I5," ERRORS ENCOUNTERED" ) 05860080
90009 FORMAT (" ",15X,I5," TESTS PASSED" ) 05870080
90010 FORMAT (" ",15X,I5," TESTS DELETED" ) 05880080
C 05890080
C FORMAT STATEMENTS FOR TEST RESULTS 05900080
80001 FORMAT (" ",4X,I5,7X,"PASS") 05910080
80002 FORMAT (" ",4X,I5,7X,"FAIL") 05920080
80003 FORMAT (" ",4X,I5,7X,"DELETED") 05930080
80004 FORMAT (" ",4X,I5,7X,"FAIL",10X,I6,9X,I6) 05940080
80005 FORMAT (" ",4X,I5,7X,"FAIL",4X,E12.5,3X,E12.5) 05950080
C 05960080
90007 FORMAT (" ",20X,"END OF PROGRAM FM080" ) 05970080
END 05980080
INTEGER FUNCTION FF081 (IDON01, IDDN10, IDDN20, IDON02) 00010081
C 00020081
C COMMENT SECTION 00030081
C 00040081
C FF081 00050081
C 00060081
C THIS FUNCTION SUBPROGRAM IS CALLED BY THE MAIN PROGRAM FM080. 00070081
C THE FUNCTION DUMMY ARGUMENTS IDON01, IDDN10 AND IDDN20 ARE 00080081
C INCREMENTED BY 2, 40 AND 70 RESPECTIVELY BEFORE CONTROL IS 00090081
C RETURNED TO THE CALLING PROGRAM. VALUE OF THE FUNCTION WILL BE 00100081
C THE SUM OF THE ACTUAL ARGUMENTS AS PASSED FROM CALLING PROGRAM. 00110081
C 00120081
C REFERENCES 00130081
C AMERICAN NATIONAL STANDARD PROGRAMMING LANGUAGE FORTRAN, 00140081
C X3.9-1978 00150081
C 00160081
C SECTION 15.5.1, FUNCTION SUBPROGRAM AND FUNCTION STATEMENT 00170081
C 00180081
C TEST SECTION 00190081
C 00200081
C FUNCTION SUBPROGRAM 00210081
C 00220081
DIMENSION IDDN10 (5), IDDN20 (4,4) 00230081
IVON01 = IDON01 00240081
IVON02 = IDDN10(2) 00250081
IVON03 = IDDN20(1,3) 00260081
IVON04 = IDON02 00270081
C 00280081
FF081 = IVON01 + IVON02 + IVON03 + IVON04 00290081
IDON01 = IVON01 + 2 00300081
IDDN10 (2) = IVON02 + 40 00310081
IDDN20 (1,3) = IVON03 + 70 00320081
IDDN10 (4) = IVON02 + 40 00330081
RETURN 00340081
END 00350081
REAL FUNCTION FF082 (RDON01, RDDN3A, RDDN1A, RDON02) 00010082
DIMENSION RDDN3A (3,6,3), RDDN1A (10) 00020082
C 00030082
C COMMENT SECTION 00040082
C 00050082
C FF082 00060082
C 00070082
C THIS FUNCTION SUBPROGRAM IS CALLED BY THE MAIN PROGRAM FM080. 00080082
C THE FUNCTION DUMMY ARGUMENTS RDON01, RDDN3A, AND RDDN1A ARE 00090082
C INCREMENTED BY 6.4, 12.2 AND 18.8 RESPECTIVELY BEFORE CONTROL IS 00100082
C RETURNED TO THE MAIN PROGRAM. VALUE OF THE FUNCTION WILL BE 00110082
C THE SUM OF THE ACTUAL ARGUMENTS AS PASSED TO THE SUBPROGRAM. 00120082
C 00130082
C REFERENCES 00140082
C AMERICAN NATIONAL STANDARD PROGRAMMING LANGUAGE FORTRAN, 00150082
C X3.9-1978 00160082
C 00170082
C SECTION 15.5.1, FUNCTION SUBPROGRAM AND FUNCTION STATEMENT 00180082
C 00190082
C TEST SECTION 00200082
C 00210082
C FUNCTION SUBPROGRAM 00220082
C 00230082
RVON01 = RDON01 00240082
RVON02 = RDDN3A (2,5,2) 00250082
RVON03 = RDDN1A (5) 00260082
RVON04 = RDON02 00270082
C 00280082
FF082 = RVON01 + RVON02 + RVON03 + RVON04 00290082
C 00300082
RDON01 = RVON01 + 6.4 00310082
RDDN3A (2,5,2) = RVON02 + 12.2 00320082
RDDN1A (5) = RVON03 + 18.8 00330082
RDDN3A (1,2,1) = 600.0 + 12.2 00340082
RETURN 00350082
END 00360082
FUNCTION FF083 (IDON01,IDDN2A,IDDN3A,RDON02) 00010083
DIMENSION IDDN2A (2,2), IDDN3A(3,4,5) 00020083
C 00030083
C COMMENT SECTION 00040083
C 00050083
C FF083 00060083
C 00070083
C THIS FUNCTION SUBPROGRAM IS CALLED BY THE MAIN PROGRAM FM080. 00080083
C THE TYPE DECLARATION IS IMPLICIT REAL. 00090083
C THE FUNCTION DUMMY ARGUMENTS ARE BOTH INTEGER AND REAL. DUMMY 00100083
C ARGUMENTS IDON01, IDDN2A AND IDDN3A ARE INCREMENTED BY 10, 20 AND 00110083
C 40 RESPECTIVELY BEFORE CONTROL IS RETURNED TO THE MAIN PROGRAM. 00120083
C THE VALUE OF THE FUNCTION RETURNED TO THE REFERENCING PROGRAM 00130083
C WILL BE THE SUM OF THE ACTUAL ARGUMENTS AS PASSED TO THE 00140083
C SUBPROGRAM FF083. 00150083
C DUMMY ARGUMENT IDDN2A CORRESPONDS TO AN ARRAY-NAME IN THE 00160083
C ACTUAL ARGUMENT OF THE MAIN PROGRAM. DUMMY ARGUMENT IDDN3A 00170083
C CORRESPONDS TO AN ARRAY-ELEMENT-NAME IN THE ACTUAL ARGUMENT OF THE00180083
C MAIN PROGRAM. DUMMY ARGUMENT IDON02 CORRESPONDS TO AN EXPRESSION00190083
C CONTAINING VARIABLES,ARITHMETIC OPERATORS AND CONSTANTS IN THE 00200083
C ACTUAL ARGUMENT OF THE MAIN PROGRAM. 00210083
C 00220083
C REFERENCES 00230083
C AMERICAN NATIONAL STANDARD PROGRAMMING LANGUAGE FORTRAN, 00240083
C X3.9-1978 00250083
C 00260083
C SECTION 4.1.2, TYPE RULES FOR DATA AND PROCEDURE IDENTIFIERS 00270083
C SECTION 15.5.1, FUNCTION SUBPROGRAM 00280083
C 00290083
C TEST SECTION 00300083
C 00310083
C FUNCTION SUBPROGRAM 00320083
C 00330083
IVON01 = IDON01 00340083
IVON02 = IDDN2A (1,1) 00350083
IVON03 = IDDN3A (2,3,4) 00360083
RVON04 = RDON02 00370083
C 00380083
RVON05 = IVON01 + IVON02 + IVON03 00390083
FF083 = RVON05 + RVON04 00400083
C 00410083
IDON01 = IVON01 + 10 00420083
IDDN2A (1,1) = IVON02 + 20 00430083
IDDN3A (2,3,4) = IVON03 + 40 00440083
C 00450083
RETURN 00460083
END 00470083