PROGRAM FM722 C C ************************************************************* C THE FULL LANGUAGE SET ALLOWS DATA TYPES TO BE DECLARED DOUBLE C PRECISION AND COMPLEX. C (FSTC TEST/PROGRAM IDENTIFICATION S04AF-2P) C ************************************************************* C REFERENCES. C AMERICAN NATIONAL STANDARD PROGRAMMING LANGUAGE FORTRAN, C X3.9-1978 C C SECTION 4 DATA TYPES AND CONSTANTS C PARAGRAPHS: C C 4.1 C 4.1.2 C C SECTION 8 SPECIFICATION STATEMENTS C PARAGRAPHS: C 8.4.1 C 8.6 C C TEST DATA TYPES DOUBLE PRECISION AND COMPLEX USING: C C TYP V [,V1] C C TYP = DOUBLE PRECISION OR COMPLEX C V = VARIABLE NAME, ARRAY NAME, ARRAY DECLARATOR, C SYMBOLIC NAME OF A CONSTANT, FUNCTION NAME, C OR DUMMY PROCEDURE NAME C C FM722 USES FUNCTIONS DF723, ZF724 AND SUBROUTINE SN725 C **************************************************************** C CBB** ********************** BBCCOMNT ********************************** C**** C**** 1978 FORTRAN COMPILER VALIDATION SYSTEM C**** VERSION 2.0 C**** C**** C**** SUGGESTIONS AND COMMENTS SHOULD BE FORWARDED TO C**** GENERAL SERVICES ADMINISTRATION C**** FEDERAL SOFTWARE TESTING CENTER C**** 5203 LEESBURG PIKE, SUITE 1100 C**** FALLS CHURCH, VA. 22041 C**** C**** (703) 756-6153 C**** CBE** ********************** BBCCOMNT ********************************** IMPLICIT DOUBLE PRECISION (D), COMPLEX (Z), LOGICAL (L) IMPLICIT CHARACTER*27 (C) C CBB** ********************** BBCINITA ********************************** C**** SPECIFICATION STATEMENTS C**** CHARACTER ZVERS*13, ZVERSD*17, ZDATE*17, ZPROG*5, ZCOMPL*20, 1 ZNAME*20, ZTAPE*10, ZPROJ*13, REMRKS*31, ZTAPED*13 CBE** ********************** BBCINITA ********************************** DOUBLE PRECISION NVCOMP,DF723 COMPLEX ICP001,I2N002(2),ZF724 REAL R2NN02(2) EQUIVALENCE (ZVCOMP,R2NN02) PARAMETER (DPN001=5.834D6,IPN001=2,DCN004=1.456D3) PARAMETER (ICP001=(3.2, 2.3)) DIMENSION D2N001(IPN001) EXTERNAL DF723,ZF724 COMMON /BVN001/ DVC006 DATA D2N001(1),D2N001(2) / IPN001*DCN004 / DATA I2N002(1),I2N002(2) / IPN001*(3.2, 2.3) / DSN001(DVN003,DVN004) = DVN003 + DVN004 DSN006(DVN007,DVN008) = (DSN001(DVN007,DVN007) + DVN008) ZSN001(RVN001,RVN002) = CMPLX(RVN001,RVN002) + 1CMPLX(RVN002,RVN002) C C CBB** ********************** BBCINITB ********************************** C**** INITIALIZE SECTION DATA ZVERS, ZVERSD, ZDATE 1 /'VERSION 2.0 ', '82/08/02*18.33.46', '*NO DATE*TIME'/ DATA ZCOMPL, ZNAME, ZTAPE 1 /'*NONE SPECIFIED*', '*NO COMPANY NAME*', '*NO TAPE*'/ DATA ZPROJ, ZTAPED, ZPROG 1 /'*NO PROJECT*', '*NO TAPE DATE', 'XXXXX'/ DATA REMRKS /' '/ C**** THE FOLLOWING 9 COMMENT LINES (CZ01, CZ02, ...) CAN BE REPLACED C**** FOR IDENTIFYING THE TEST ENVIRONMENT C**** CZ01 ZVERS = 'VERSION OF THE COMPILER VALIDATION SYSTEM' CZ02 ZVERSD = 'CREATION DATE/TIME OF THE COMPILER VALIDATION SYSTEM' CZ03 ZPROG = 'PROGRAM NAME' ZDATE = ' DEC. 1983 ' ZCOMPL = ' ICL VME FORTRAN77 ' ZPROJ = ' LANG. CENTRE' ZNAME = 'ICL ' ZTAPE = 'M999 ' ZTAPED = '831005 ' C IVPASS = 0 IVFAIL = 0 IVDELE = 0 IVINSP = 0 IVTOTL = 0 IVTOTN = 0 ICZERO = 0 C C I01 CONTAINS THE LOGICAL UNIT NUMBER FOR THE CARD READER. I01 = 05 C I02 CONTAINS THE LOGICAL UNIT NUMBER FOR THE PRINTER. I02 = 06 C CX010 REPLACED BY FEXEC X-010 CONTROL CARD (CARD-READER UNIT NUMBER). C THE CX010 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I01 = 5 CX011 REPLACED BY FEXEC X-011 CONTROL CARD. CX011 IS FOR SYSTEMS C REQUIRING ADDITIONAL STATEMENTS FOR FILES ASSOCIATED WITH CX010. C CX020 REPLACED BY FEXEC X-020 CONTROL CARD (PRINTER UNIT NUMBER). C THE CX020 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I02= 6 CX021 REPLACED BY FEXEC X-021 CONTROL CARD. CX021 IS FOR SYSTEMS C REQUIRING ADDITIONAL STATEMENTS FOR FILES ASSOCIATED WITH CX020. C CBE** ********************** BBCINITB ********************************** ZPROG='FM722' IVTOTL = 12 CBB** ********************** BBCHED0A ********************************** C**** C**** WRITE REPORT TITLE C**** WRITE (I02, 90002) WRITE (I02, 90006) WRITE (I02, 90007) WRITE (I02, 90008) ZVERS, ZVERSD WRITE (I02, 90009) ZPROG, ZPROG WRITE (I02, 90010) ZDATE, ZCOMPL CBE** ********************** BBCHED0A ********************************** CBB** ********************** BBCHED0B ********************************** C**** WRITE DETAIL REPORT HEADERS C**** WRITE (I02,90004) WRITE (I02,90004) WRITE (I02,90013) WRITE (I02,90014) WRITE (I02,90015) IVTOTL CBE** ********************** BBCHED0B ********************************** C CT001* TEST 001 **** FCVS PROGRAM 722 **** C C TEST 001 IS DESIGNED TO TEST A DOUBLE PRECISION CONSTANT C VALUE SET WITH PARAMETER STATEMENT C IVTNUM = 1 DVCOMP=0.0D0 DVCOMP=DPN001 DVCORR=5.834D6 IF (DPN001 - 5.833999997D6) 20010,10010,40010 40010 IF (DPN001 - 5.834000003D6) 10010,10010,20010 10010 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0011 20010 IVFAIL = IVFAIL + 1 WRITE (I02,80031) IVTNUM, DVCOMP, DVCORR 0011 CONTINUE C CT002* TEST 002 **** FCVS PROGRAM 722 **** C C TEST 002 IS DESIGNED TO TEST A DOUBLE PRECISION VARIABLE C IVTNUM = 2 DVCOMP=0.0D0 NVCOMP=.1212345D2 DVCOMP=NVCOMP DVCORR=.1212345D2 IF (NVCOMP - .1212344999D2) 20020,40021,40020 40020 IF (NVCOMP - .1212345001D2) 40021,40021,20020 40021 DVCOMP = DVCOMP + .1212345D2 DVCORR=.2424690D2 IF (DVCOMP - .2424689998D2) 20020,10020,40022 40022 IF (DVCOMP - .2424690002D2) 10020,10020,20020 10020 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0021 20020 IVFAIL = IVFAIL + 1 WRITE (I02,80031) IVTNUM, DVCOMP, DVCORR 0021 CONTINUE C CT003* TEST 003 **** FCVS PROGRAM 722 **** C C TEST 003 A DOUBLE PRECISION ARRAY C IVTNUM = 3 DVCOMP=0.0D0 DVCORR=2.912D3 DVCOMP=D2N001(1) + D2N001(2) IF (DVCOMP - 2.911999998D3) 20030,10030,40030 40030 IF (DVCOMP - 2.912000002D3) 10030,10030,20030 10030 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0031 20030 IVFAIL = IVFAIL + 1 WRITE (I02,80031) IVTNUM, DVCOMP, DVCORR 0031 CONTINUE C CT004* TEST 004 **** FCVS PROGRAM 722 **** C C TEST 004 IS DESIGNED TO TEST A DOUBLE PRECISION FUNCTION C DF723 C IVTNUM = 4 DVCOMP=0.0D0 DVN009=.1211D2 DVCOMP=DF723(DVN009) DVCORR=1.001211D4 IF (DVCOMP - 1.001210999D4) 20040,10040,40040 40040 IF (DVCOMP - 1.001211001D4) 10040,10040,20040 10040 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0041 20040 IVFAIL = IVFAIL + 1 WRITE (I02,80031) IVTNUM, DVCOMP, DVCORR 0041 CONTINUE C CT005* TEST 005 **** FCVS PROGRAM 722 **** C C TEST 005 IS DESIGNED TO TEST A DOUBLE PRECISION DUMMY C PROCEDURE (DF723 USED AS DUMMY ARGUMENT FOR SUBROUTINE C FS528 C IVTNUM = 5 DVCOMP=0.0D0 DVCORR=1200000.0D-2 DVN009=0.0D0 DVN009=10D2 CALL SN725(DF723,DVN009) DVCOMP=DVC006 IF (DVCOMP - .1199999999D5) 20050,10050,40050 40050 IF (DVCOMP - .1200000001D5) 10050,10050,20050 10050 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0051 20050 IVFAIL = IVFAIL + 1 WRITE (I02,80031) IVTNUM, DVCOMP, DVCORR 0051 CONTINUE C CT006* TEST 006 **** FCVS PROGRAM 722 **** C C TEST 006 DOUBLE PRECISION FUNCTION NAME USING C STATEMENT FUNCTION STATEMENT C IVTNUM = 6 DVCOMP=0.0D0 DVCORR=20D2 DVN009=10D2 DVN010=10D2 DVCOMP=DSN001(DVN009,DVN010) IF (DVCOMP - 19.99999999D2) 20060,10060,40060 40060 IF (DVCOMP - 20.00000001D2) 10060,10060,20060 10060 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0061 20060 IVFAIL = IVFAIL + 1 WRITE (I02,80031) IVTNUM, DVCOMP, DVCORR 0061 CONTINUE C CT007* TEST 007 **** FCVS PROGRAM 722 **** C C TEST 007 DOUBLE PRECISION FUNCTION NAME USED IN C A STATEMENT FUNCTION STATEMENT AS A DUMMY ARGUMENT C IVTNUM = 7 DVCOMP=0.0D0 DVCORR=30D2 DVN009=10D2 DVN010=10D2 DVCOMP=DSN006(DVN009,DVN010) IF (DVCOMP - 29.99999998D2) 20070,10070,40070 40070 IF (DVCOMP - 30.00000002D2) 10070,10070,20070 10070 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0071 20070 IVFAIL = IVFAIL + 1 WRITE (I02,80031) IVTNUM, DVCOMP, DVCORR 0071 CONTINUE C C THE FOLLOWING GROUP OF TESTS ARE DESIGNED TO C TEST COMPLEX DATA TYPES C C CT008* TEST 008 **** FCVS PROGRAM 722 **** C C TEST 008 DATA TYPE CAN BE A COMPLEX VARIABLE C IVTNUM = 8 ZVCOMP=(0.0, 0.0) ZVCORR=(1.0, 1.0) ZVN001=(6.5, 2.2) ZVN002=(5.5, 1.2) ZVCOMP=ZVN001-ZVN002 IF (R2NN02(1) - 0.9995) 20080,40081,40080 40080 IF (R2NN02(1) - 1.0001) 40081,40081,20080 40081 IF (R2NN02(2) - 0.9995) 20080,10080,40082 40082 IF (R2NN02(2) - 1.0001) 10080,10080,20080 10080 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0081 20080 IVFAIL = IVFAIL + 1 WRITE (I02,80045) IVTNUM, ZVCOMP, ZVCORR 0081 CONTINUE C CT009* TEST 009 **** FCVS PROGRAM 722 **** C C TEST 009 COMPLEX CONSTANT C IVTNUM = 9 ZVCOMP=(0.0, 0.0) ZVCORR=(6.4, 4.6) ZVCOMP=ICP001+ICP001 IF (R2NN02(1) - 6.3996) 20090,10090,40090 40090 IF (R2NN02(1) - 6.4004) 40091,40091,20090 40091 IF (R2NN02(2) - 4.5997) 20090,10090,40092 40092 IF (R2NN02(2) - 4.6003) 10090,10090,20090 10090 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0091 20090 IVFAIL = IVFAIL + 1 WRITE (I02,80045) IVTNUM, ZVCOMP, ZVCORR 0091 CONTINUE C CT010* TEST 010 **** FCVS PROGRAM 722 **** C C TEST 010 COMPLEX ARRAY C IVTNUM = 10 ZVCOMP=(0.0, 0.0) ZVCORR=(6.4, 4.6) ZVCOMP=I2N002(1)+I2N002(2) IF (R2NN02(1) - 6.3996) 20100,10100,40100 40100 IF (R2NN02(1) - 6.4004) 40101,40101,20100 40101 IF (R2NN02(2) - 4.5997) 20100,10100,40102 40102 IF (R2NN02(2) - 4.6003) 10100,10100,20100 10100 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0101 20100 IVFAIL = IVFAIL + 1 WRITE (I02,80045) IVTNUM, ZVCOMP, ZVCORR 0101 CONTINUE C CT011* TEST 011 **** FCVS PROGRAM 722 **** C C TEST 011 COMPLEX FUNCTION NAME (USING STATEMENT FUNCTION) C FUNCTION NAME CAN BE COMPLEX C IVTNUM = 11 ZVCORR=(3.0, 4.0) ZVCOMP=(0.0, 0.0) RVN004=1.0 RVN005=2.0 ZVCOMP=(ZSN001(RVN004,RVN005)) IF (R2NN02(1) - 2.9998) 20110,10110,40110 40110 IF (R2NN02(1) - 3.0002) 40111,40111,20110 40111 IF (R2NN02(2) - 3.9998) 20110,10110,40112 40112 IF (R2NN02(2) - 4.0002) 10110,10110,20110 10110 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0111 20110 IVFAIL = IVFAIL + 1 WRITE (I02,80045) IVTNUM, ZVCOMP, ZVCORR 0111 CONTINUE C CT012* TEST 012 **** FCVS PROGRAM 722 **** C C TEST 012 TEST COMPLEX FUNCTION NAME IN A FUNCTION SUBPROGRAM C IVTNUM = 12 ZVCORR=(3.0, 4.0) ZVCOMP=(0.0, 0.0) RVN004=1.0 RVN005=2.0 ZVCOMP=ZF724(RVN004,RVN005) IF (R2NN02(1) - 2.9998) 20120,10120,40120 40120 IF (R2NN02(1) - 3.0002) 40121,40121,20120 40121 IF (R2NN02(2) - 3.9998) 20120,10120,40122 40122 IF (R2NN02(2) - 4.0002) 10120,10120,20120 10120 IVPASS = IVPASS + 1 WRITE (I02,80002) IVTNUM GO TO 0121 20120 IVFAIL = IVFAIL + 1 WRITE (I02,80045) IVTNUM, ZVCOMP, ZVCORR 0121 CONTINUE C CBB** ********************** BBCSUM0 ********************************** C**** WRITE OUT TEST SUMMARY C**** IVTOTN = IVPASS + IVFAIL + IVDELE + IVINSP WRITE (I02, 90004) WRITE (I02, 90014) WRITE (I02, 90004) WRITE (I02, 90020) IVPASS WRITE (I02, 90022) IVFAIL WRITE (I02, 90024) IVDELE WRITE (I02, 90026) IVINSP WRITE (I02, 90028) IVTOTN, IVTOTL CBE** ********************** BBCSUM0 ********************************** CBB** ********************** BBCFOOT0 ********************************** C**** WRITE OUT REPORT FOOTINGS C**** WRITE (I02,90016) ZPROG, ZPROG WRITE (I02,90018) ZPROJ, ZNAME, ZTAPE, ZTAPED WRITE (I02,90019) CBE** ********************** BBCFOOT0 ********************************** 90001 FORMAT (1H ,56X,5HFM722) 90000 FORMAT (1H ,50X,20HEND OF PROGRAM FM722) CBB** ********************** BBCFMT0A ********************************** C**** FORMATS FOR TEST DETAIL LINES C**** 80000 FORMAT (1H ,2X,I3,4X,7HDELETED,32X,A31) 80002 FORMAT (1H ,2X,I3,4X,7H PASS ,32X,A31) 80004 FORMAT (1H ,2X,I3,4X,7HINSPECT,32X,A31) 80008 FORMAT (1H ,2X,I3,4X,7H FAIL ,32X,A31) 80010 FORMAT (1H ,2X,I3,4X,7H FAIL ,/,1H ,15X,10HCOMPUTED= , 1I6,/,1H ,15X,10HCORRECT= ,I6) 80012 FORMAT (1H ,2X,I3,4X,7H FAIL ,/,1H ,16X,10HCOMPUTED= , 1E12.5,/,1H ,16X,10HCORRECT= ,E12.5) 80018 FORMAT (1H ,2X,I3,4X,7H FAIL ,/,1H ,16X,10HCOMPUTED= , 1A21,/,1H ,16X,10HCORRECT= ,A21) 80020 FORMAT (1H ,16X,10HCOMPUTED= ,A21,1X,A31) 80022 FORMAT (1H ,16X,10HCORRECT= ,A21,1X,A31) 80024 FORMAT (1H ,16X,10HCOMPUTED= ,I6,16X,A31) 80026 FORMAT (1H ,16X,10HCORRECT= ,I6,16X,A31) 80028 FORMAT (1H ,16X,10HCOMPUTED= ,E12.5,10X,A31) 80030 FORMAT (1H ,16X,10HCORRECT= ,E12.5,10X,A31) 80050 FORMAT (1H ,48X,A31) CBE** ********************** BBCFMT0A ********************************** CBB** ********************** BBCFMAT1 ********************************** C**** FORMATS FOR TEST DETAIL LINES - FULL LANGUAGE C**** 80031 FORMAT (1H ,2X,I3,4X,7H FAIL ,/,1H ,16X,10HCOMPUTED= , 1D17.10,/,1H ,16X,10HCORRECT= ,D17.10) 80033 FORMAT (1H ,16X,10HCOMPUTED= ,D17.10,10X,A31) 80035 FORMAT (1H ,16X,10HCORRECT= ,D17.10,10X,A31) 80037 FORMAT (1H ,16X,10HCOMPUTED= ,1H(,E12.5,2H, ,E12.5,1H),6X,A31) 80039 FORMAT (1H ,16X,10HCORRECT= ,1H(,E12.5,2H, ,E12.5,1H),6X,A31) 80041 FORMAT (1H ,16X,10HCOMPUTED= ,1H(,F12.5,2H, ,F12.5,1H),6X,A31) 80043 FORMAT (1H ,16X,10HCORRECT= ,1H(,F12.5,2H, ,F12.5,1H),6X,A31) 80045 FORMAT (1H ,2X,I3,4X,7H FAIL ,/,1H ,16X,10HCOMPUTED= , 11H(,F12.5,2H, ,F12.5,1H)/,1H ,16X,10HCORRECT= , 21H(,F12.5,2H, ,F12.5,1H)) CBE** ********************** BBCFMAT1 ********************************** CBB** ********************** BBCFMT0B ********************************** C**** FORMAT STATEMENTS FOR PAGE HEADERS C**** 90002 FORMAT (1H1) 90004 FORMAT (1H ) 90006 FORMAT (1H ,20X,31HFEDERAL SOFTWARE TESTING CENTER) 90007 FORMAT (1H ,19X,34HFORTRAN COMPILER VALIDATION SYSTEM) 90008 FORMAT (1H ,21X,A13,A17) 90009 FORMAT (1H ,/,2H *,A5,6HBEGIN*,12X,15HTEST RESULTS - ,A5,/) 90010 FORMAT (1H ,8X,16HTEST DATE*TIME= ,A17,15H - COMPILER= ,A20) 90013 FORMAT (1H ,8H TEST ,10HPASS/FAIL ,6X,17HDISPLAYED RESULTS, 1 7X,7HREMARKS,24X) 90014 FORMAT (1H ,46H----------------------------------------------, 1 33H---------------------------------) 90015 FORMAT (1H ,48X,17HTHIS PROGRAM HAS ,I3,6H TESTS,/) C**** C**** FORMAT STATEMENTS FOR REPORT FOOTINGS C**** 90016 FORMAT (1H ,/,2H *,A5,4HEND*,14X,14HEND OF TEST - ,A5,/) 90018 FORMAT (1H ,A13,13X,A20,7H * ,A10,1H/, 1 A13) 90019 FORMAT (1H ,26HFOR OFFICIAL USE ONLY ,35X,15HCOPYRIGHT 1982) C**** C**** FORMAT STATEMENTS FOR RUN SUMMARY C**** 90020 FORMAT (1H ,21X,I5,13H TESTS PASSED) 90022 FORMAT (1H ,21X,I5,13H TESTS FAILED) 90024 FORMAT (1H ,21X,I5,14H TESTS DELETED) 90026 FORMAT (1H ,21X,I5,25H TESTS REQUIRE INSPECTION) 90028 FORMAT (1H ,21X,I5,4H OF ,I3,15H TESTS EXECUTED) CBE** ********************** BBCFMT0B ********************************** END DOUBLE PRECISION FUNCTION DF723(DVN008) C THIS FUNCTION IS USED BY PROGRAM FM722 TO TEST C DOUBLE PRECISION FUNCTIONS IMPLICIT DOUBLE PRECISION (D) DF723=DVN008 + 100D2 RETURN END COMPLEX FUNCTION ZF724(RVN006,RVN007) C THIS FUNCTION IS USED BY PROGRAM FM722 TO TEST C COMPLEX FUNCTION NAME IMPLICIT COMPLEX (Z) ZF724= CMPLX(RVN006,RVN007) + CMPLX(RVN007,RVN007) RETURN END SUBROUTINE SN725(DTINT, DVN008) C THIS ROUTINE IS USED BY PROGRAM FM722 C TO TEST A DOUBLE PRECISION FUNCTION NAME USED AS AN C ACTUAL ARGUMENT IMPLICIT DOUBLE PRECISION (D) COMMON /BVN001/ DVC006 DVC006=DTINT(DVN008) + 10D2 RETURN END