| PROGRAM FM800 |
| |
| C***********************************************************************00010800 |
| C***** FORTRAN 77 00020800 |
| C***** FM800 YIDINT - (151) 00030800 |
| C***** 00040800 |
| C***********************************************************************00050800 |
| C***** GENERAL PURPOSE ANS REF 00060800 |
| C***** TEST INTRINSIC FUNCTION IDINT -- 15.3 00070800 |
| C***** TRUNCATION (SIGN OF A * LARGEST INTEGER LE ABS(A) ) (TABLE 5)00080800 |
| C***** 00090800 |
| CBB** ********************** BBCCOMNT **********************************00100800 |
| C**** 00110800 |
| C**** 1978 FORTRAN COMPILER VALIDATION SYSTEM 00120800 |
| C**** VERSION 2.1 00130800 |
| C**** 00140800 |
| C**** 00150800 |
| C**** SUGGESTIONS AND COMMENTS SHOULD BE FORWARDED TO 00160800 |
| C**** NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY 00170800 |
| C**** SOFTWARE STANDARDS VALIDATION GROUP 00180800 |
| C**** BUILDING 225 RM A266 00190800 |
| C**** GAITHERSBURG, MD 20899 00200800 |
| C**** 00210800 |
| C**** 00220800 |
| C**** 00230800 |
| CBE** ********************** BBCCOMNT **********************************00240800 |
| C***** S P E C I F I C A T I O N S SEGMENT 151 00250800 |
| C***** 00260800 |
| DOUBLE PRECISION DLAVD, DLBVD 00270800 |
| C***** 00280800 |
| CBB** ********************** BBCINITA **********************************00290800 |
| C**** SPECIFICATION STATEMENTS 00300800 |
| C**** 00310800 |
| CHARACTER ZVERS*13, ZVERSD*17, ZDATE*17, ZPROG*5, ZCOMPL*20, 00320800 |
| 1 ZNAME*20, ZTAPE*10, ZPROJ*13, REMRKS*31, ZTAPED*13 00330800 |
| CBE** ********************** BBCINITA **********************************00340800 |
| CBB** ********************** BBCINITB **********************************00350800 |
| C**** INITIALIZE SECTION 00360800 |
| DATA ZVERS, ZVERSD, ZDATE 00370800 |
| 1 /'VERSION 2.1 ', '93/10/21*21.02.00', '*NO DATE*TIME'/ 00380800 |
| DATA ZCOMPL, ZNAME, ZTAPE 00390800 |
| 1 /'*NONE SPECIFIED*', '*NO COMPANY NAME*', '*NO TAPE*'/ 00400800 |
| DATA ZPROJ, ZTAPED, ZPROG 00410800 |
| 1 /'*NO PROJECT*', '*NO TAPE DATE', 'XXXXX'/ 00420800 |
| DATA REMRKS /' '/ 00430800 |
| C**** THE FOLLOWING 9 COMMENT LINES (CZ01, CZ02, ...) CAN BE REPLACED 00440800 |
| C**** FOR IDENTIFYING THE TEST ENVIRONMENT 00450800 |
| C**** 00460800 |
| CZ01 ZVERS = 'VERSION OF THE COMPILER VALIDATION SYSTEM' 00470800 |
| CZ02 ZVERSD = 'CREATION DATE/TIME OF THE COMPILER VALIDATION SYSTEM' 00480800 |
| CZ03 ZPROG = 'PROGRAM NAME' 00490800 |
| CZ04 ZDATE = 'DATE OF TEST' 00500800 |
| CZ05 ZCOMPL = 'COMPILER IDENTIFICATION' 00510800 |
| CZ06 ZPROJ = 'PROJECT NUMBER/IDENTIFICATION' 00520800 |
| CZ07 ZNAME = 'NAME OF USER' 00530800 |
| CZ08 ZTAPE = 'TAPE OWNER/ID' 00540800 |
| CZ09 ZTAPED = 'DATE TAPE COPIED' 00550800 |
| C 00560800 |
| IVPASS = 0 00570800 |
| IVFAIL = 0 00580800 |
| IVDELE = 0 00590800 |
| IVINSP = 0 00600800 |
| IVTOTL = 0 00610800 |
| IVTOTN = 0 00620800 |
| ICZERO = 0 00630800 |
| C 00640800 |
| C I01 CONTAINS THE LOGICAL UNIT NUMBER FOR THE CARD READER. 00650800 |
| I01 = 05 00660800 |
| C I02 CONTAINS THE LOGICAL UNIT NUMBER FOR THE PRINTER. 00670800 |
| I02 = 06 00680800 |
| C 00690800 |
| CX010 REPLACED BY FEXEC X-010 CONTROL CARD (CARD-READER UNIT NUMBER). 00700800 |
| C THE CX010 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I01 = 5 00710800 |
| CX011 REPLACED BY FEXEC X-011 CONTROL CARD. CX011 IS FOR SYSTEMS 00720800 |
| C REQUIRING ADDITIONAL STATEMENTS FOR FILES ASSOCIATED WITH CX010. 00730800 |
| C 00740800 |
| CX020 REPLACED BY FEXEC X-020 CONTROL CARD (PRINTER UNIT NUMBER). 00750800 |
| C THE CX020 CARD IS FOR OVERRIDING THE PROGRAM DEFAULT I02= 6 00760800 |
| CX021 REPLACED BY FEXEC X-021 CONTROL CARD. CX021 IS FOR SYSTEMS 00770800 |
| C REQUIRING ADDITIONAL STATEMENTS FOR FILES ASSOCIATED WITH CX020. 00780800 |
| C 00790800 |
| CBE** ********************** BBCINITB **********************************00800800 |
| NUVI = I02 00810800 |
| IVTOTL = 12 00820800 |
| ZPROG = 'FM800' 00830800 |
| CBB** ********************** BBCHED0A **********************************00840800 |
| C**** 00850800 |
| C**** WRITE REPORT TITLE 00860800 |
| C**** 00870800 |
| WRITE (I02, 90002) 00880800 |
| WRITE (I02, 90006) 00890800 |
| WRITE (I02, 90007) 00900800 |
| WRITE (I02, 90008) ZVERS, ZVERSD 00910800 |
| WRITE (I02, 90009) ZPROG, ZPROG 00920800 |
| WRITE (I02, 90010) ZDATE, ZCOMPL 00930800 |
| CBE** ********************** BBCHED0A **********************************00940800 |
| C***** 00950800 |
| C***** HEADER FOR SEGMENT 151 WRITTEN 00960800 |
| WRITE (NUVI,15101) 00970800 |
| 15101 FORMAT (" ", // 1X,"YIDINT - (151) INTRINSIC FUNCTION--" //17X, 00980800 |
| 1 "IDINT (TYPE CONVERSION)" //" ANS REF. - 15.3" ) 00990800 |
| CBB** ********************** BBCHED0B **********************************01000800 |
| C**** WRITE DETAIL REPORT HEADERS 01010800 |
| C**** 01020800 |
| WRITE (I02,90004) 01030800 |
| WRITE (I02,90004) 01040800 |
| WRITE (I02,90013) 01050800 |
| WRITE (I02,90014) 01060800 |
| WRITE (I02,90015) IVTOTL 01070800 |
| CBE** ********************** BBCHED0B **********************************01080800 |
| C***** 01090800 |
| CT001* TEST 1 THE VALUE ZERO 01100800 |
| IVTNUM = 1 01110800 |
| DLBVD = 0.0D0 01120800 |
| ILAVI = IDINT(DLBVD) 01130800 |
| IF (ILAVI - 0) 20010, 10010, 20010 01140800 |
| 10010 IVPASS = IVPASS + 1 01150800 |
| WRITE (NUVI, 80002) IVTNUM 01160800 |
| GO TO 0011 01170800 |
| 20010 IVFAIL = IVFAIL + 1 01180800 |
| IVCORR = 0 01190800 |
| WRITE (NUVI, 80010) IVTNUM, ILAVI, IVCORR 01200800 |
| 0011 CONTINUE 01210800 |
| CT002* TEST 2 A VALUE IN (0,1) 01220800 |
| IVTNUM = 2 01230800 |
| DLBVD = 3.57D-1 01240800 |
| ILAVI = IDINT(DLBVD) 01250800 |
| IF (ILAVI - 0) 20020, 10020, 20020 01260800 |
| 10020 IVPASS = IVPASS + 1 01270800 |
| WRITE (NUVI, 80002) IVTNUM 01280800 |
| GO TO 0021 01290800 |
| 20020 IVFAIL = IVFAIL + 1 01300800 |
| IVCORR = 0 01310800 |
| WRITE (NUVI, 80010) IVTNUM, ILAVI, IVCORR 01320800 |
| 0021 CONTINUE 01330800 |
| CT003* TEST 3 THE VALUE ONE 01340800 |
| IVTNUM = 3 01350800 |
| DLBVD = 1.00001D0 01360800 |
| ILAVI = IDINT(DLBVD) 01370800 |
| IF (ILAVI - 1) 20030, 10030, 20030 01380800 |
| 10030 IVPASS = IVPASS + 1 01390800 |
| WRITE (NUVI, 80002) IVTNUM 01400800 |
| GO TO 0031 01410800 |
| 20030 IVFAIL = IVFAIL + 1 01420800 |
| IVCORR = 1 01430800 |
| WRITE (NUVI, 80010) IVTNUM, ILAVI, IVCORR 01440800 |
| 0031 CONTINUE 01450800 |
| CT004* TEST 4 A INTEGRAL VALUE OTHER THAN O, 1 01460800 |
| IVTNUM = 4 01470800 |
| DLBVD = 6.00001D0 01480800 |
| ILAVI = IDINT(DLBVD) 01490800 |
| IF (ILAVI - 6) 20040, 10040, 20040 01500800 |
| 10040 IVPASS = IVPASS + 1 01510800 |
| WRITE (NUVI, 80002) IVTNUM 01520800 |
| GO TO 0041 01530800 |
| 20040 IVFAIL = IVFAIL + 1 01540800 |
| IVCORR = 6 01550800 |
| WRITE (NUVI, 80010) IVTNUM, ILAVI, IVCORR 01560800 |
| 0041 CONTINUE 01570800 |
| CT005* TEST 5 A VALUE IN (X,X+1) 01580800 |
| IVTNUM = 5 01590800 |
| DLBVD = 0.375D1 01600800 |
| ILAVI = IDINT(DLBVD) 01610800 |
| IF (ILAVI - 3) 20050, 10050, 20050 01620800 |
| 10050 IVPASS = IVPASS + 1 01630800 |
| WRITE (NUVI, 80002) IVTNUM 01640800 |
| GO TO 0051 01650800 |
| 20050 IVFAIL = IVFAIL + 1 01660800 |
| IVCORR = 3 01670800 |
| WRITE (NUVI, 80010) IVTNUM, ILAVI, IVCORR 01680800 |
| 0051 CONTINUE 01690800 |
| CT006* TEST 6 A NEGATIVE VALUE WITH MAGNITUDE IN (0,1) 01700800 |
| IVTNUM = 6 01710800 |
| DLBVD = -0.375D0 01720800 |
| ILAVI = IDINT(DLBVD) 01730800 |
| IF (ILAVI - 0) 20060, 10060, 20060 01740800 |
| 10060 IVPASS = IVPASS + 1 01750800 |
| WRITE (NUVI, 80002) IVTNUM 01760800 |
| GO TO 0061 01770800 |
| 20060 IVFAIL = IVFAIL + 1 01780800 |
| IVCORR = 0 01790800 |
| WRITE (NUVI, 80010) IVTNUM, ILAVI, IVCORR 01800800 |
| 0061 CONTINUE 01810800 |
| CT007* TEST 7 THE VALUE -1 01820800 |
| IVTNUM = 7 01830800 |
| DLBVD = -0.100001D1 01840800 |
| ILAVI = IDINT(DLBVD) 01850800 |
| IF (ILAVI + 1) 20070, 10070, 20070 01860800 |
| 10070 IVPASS = IVPASS + 1 01870800 |
| WRITE (NUVI, 80002) IVTNUM 01880800 |
| GO TO 0071 01890800 |
| 20070 IVFAIL = IVFAIL + 1 01900800 |
| IVCORR = -1 01910800 |
| WRITE (NUVI, 80010) IVTNUM, ILAVI, IVCORR 01920800 |
| 0071 CONTINUE 01930800 |
| CT008* TEST 8 A NEGATIVE INTEGRAL VALUE 01940800 |
| IVTNUM = 8 01950800 |
| DLBVD = -6.00001D0 01960800 |
| ILAVI = IDINT(DLBVD) 01970800 |
| IF (ILAVI + 6) 20080, 10080, 20080 01980800 |
| 10080 IVPASS = IVPASS + 1 01990800 |
| WRITE (NUVI, 80002) IVTNUM 02000800 |
| GO TO 0081 02010800 |
| 20080 IVFAIL = IVFAIL + 1 02020800 |
| IVCORR = -6 02030800 |
| WRITE (NUVI, 80010) IVTNUM, ILAVI, IVCORR 02040800 |
| 0081 CONTINUE 02050800 |
| CT009* TEST 9 A NEGATIVE VALUE WITH MAGNITUDE IN (X,X+1) 02060800 |
| IVTNUM = 9 02070800 |
| DLBVD = -0.375D1 02080800 |
| ILAVI = IDINT(DLBVD) 02090800 |
| IF (ILAVI + 3) 20090, 10090, 20090 02100800 |
| 10090 IVPASS = IVPASS + 1 02110800 |
| WRITE (NUVI, 80002) IVTNUM 02120800 |
| GO TO 0091 02130800 |
| 20090 IVFAIL = IVFAIL + 1 02140800 |
| IVCORR = -3 02150800 |
| WRITE (NUVI, 80010) IVTNUM, ILAVI, IVCORR 02160800 |
| 0091 CONTINUE 02170800 |
| CT010* TEST 10 ZERO PREFIXED WITH A MINUS SIGN 02180800 |
| IVTNUM = 10 02190800 |
| DLAVD = 0.0D0 02200800 |
| ILAVI = IDINT(-DLAVD) 02210800 |
| IF (ILAVI + 0) 20100, 10100, 20100 02220800 |
| 10100 IVPASS = IVPASS + 1 02230800 |
| WRITE (NUVI, 80002) IVTNUM 02240800 |
| GO TO 0101 02250800 |
| 20100 IVFAIL = IVFAIL + 1 02260800 |
| IVCORR = 0 02270800 |
| WRITE (NUVI, 80010) IVTNUM, ILAVI, IVCORR 02280800 |
| 0101 CONTINUE 02290800 |
| CT011* TEST 11 AN ARITHMETIC EXPRESSION PRESENTED TO IDINT 02300800 |
| IVTNUM = 11 02310800 |
| DLAVD = 0.375D1 02320800 |
| DLBVD = 3.5D0 02330800 |
| ILAVI = (IDINT(DLAVD + DLBVD * 0.5D1)) 02340800 |
| IF (ILAVI - 21) 20110, 10110, 20110 02350800 |
| 10110 IVPASS = IVPASS + 1 02360800 |
| WRITE (NUVI, 80002) IVTNUM 02370800 |
| GO TO 0111 02380800 |
| 20110 IVFAIL = IVFAIL + 1 02390800 |
| IVCORR = 21 02400800 |
| WRITE (NUVI, 80010) IVTNUM, ILAVI, IVCORR 02410800 |
| 0111 CONTINUE 02420800 |
| CT012* TEST 12 COMPARE AUTOMATIC TYPE CONVERSION TO EXPLICIT 02430800 |
| IVTNUM = 12 02440800 |
| DLAVD = 3.5D0 02450800 |
| ILAVI = IDINT(DLAVD ** 2.5) 02460800 |
| ILBVI = DLAVD ** 2.5 02470800 |
| IF (ILAVI - ILBVI) 20120, 10120, 20120 02480800 |
| 10120 IVPASS = IVPASS + 1 02490800 |
| WRITE (NUVI, 80002) IVTNUM 02500800 |
| GO TO 0121 02510800 |
| 20120 IVFAIL = IVFAIL + 1 02520800 |
| IVCORR = ILBVI 02530800 |
| WRITE (NUVI, 80010) IVTNUM, ILAVI, IVCORR 02540800 |
| 0121 CONTINUE 02550800 |
| CBB** ********************** BBCSUM0 **********************************02560800 |
| C**** WRITE OUT TEST SUMMARY 02570800 |
| C**** 02580800 |
| IVTOTN = IVPASS + IVFAIL + IVDELE + IVINSP 02590800 |
| WRITE (I02, 90004) 02600800 |
| WRITE (I02, 90014) 02610800 |
| WRITE (I02, 90004) 02620800 |
| WRITE (I02, 90020) IVPASS 02630800 |
| WRITE (I02, 90022) IVFAIL 02640800 |
| WRITE (I02, 90024) IVDELE 02650800 |
| WRITE (I02, 90026) IVINSP 02660800 |
| WRITE (I02, 90028) IVTOTN, IVTOTL 02670800 |
| CBE** ********************** BBCSUM0 **********************************02680800 |
| CBB** ********************** BBCFOOT0 **********************************02690800 |
| C**** WRITE OUT REPORT FOOTINGS 02700800 |
| C**** 02710800 |
| WRITE (I02,90016) ZPROG, ZPROG 02720800 |
| WRITE (I02,90018) ZPROJ, ZNAME, ZTAPE, ZTAPED 02730800 |
| WRITE (I02,90019) 02740800 |
| CBE** ********************** BBCFOOT0 **********************************02750800 |
| CBB** ********************** BBCFMT0A **********************************02760800 |
| C**** FORMATS FOR TEST DETAIL LINES 02770800 |
| C**** 02780800 |
| 80000 FORMAT (" ",2X,I3,4X,"DELETED",32X,A31) 02790800 |
| 80002 FORMAT (" ",2X,I3,4X," PASS ",32X,A31) 02800800 |
| 80004 FORMAT (" ",2X,I3,4X,"INSPECT",32X,A31) 02810800 |
| 80008 FORMAT (" ",2X,I3,4X," FAIL ",32X,A31) 02820800 |
| 80010 FORMAT (" ",2X,I3,4X," FAIL ",/," ",15X,"COMPUTED= " , 02830800 |
| 1I6,/," ",15X,"CORRECT= " ,I6) 02840800 |
| 80012 FORMAT (" ",2X,I3,4X," FAIL ",/," ",16X,"COMPUTED= " , 02850800 |
| 1E12.5,/," ",16X,"CORRECT= " ,E12.5) 02860800 |
| 80018 FORMAT (" ",2X,I3,4X," FAIL ",/," ",16X,"COMPUTED= " , 02870800 |
| 1A21,/," ",16X,"CORRECT= " ,A21) 02880800 |
| 80020 FORMAT (" ",16X,"COMPUTED= " ,A21,1X,A31) 02890800 |
| 80022 FORMAT (" ",16X,"CORRECT= " ,A21,1X,A31) 02900800 |
| 80024 FORMAT (" ",16X,"COMPUTED= " ,I6,16X,A31) 02910800 |
| 80026 FORMAT (" ",16X,"CORRECT= " ,I6,16X,A31) 02920800 |
| 80028 FORMAT (" ",16X,"COMPUTED= " ,E12.5,10X,A31) 02930800 |
| 80030 FORMAT (" ",16X,"CORRECT= " ,E12.5,10X,A31) 02940800 |
| 80050 FORMAT (" ",48X,A31) 02950800 |
| CBE** ********************** BBCFMT0A **********************************02960800 |
| CBB** ********************** BBCFMAT1 **********************************02970800 |
| C**** FORMATS FOR TEST DETAIL LINES - FULL LANGUAGE 02980800 |
| C**** 02990800 |
| 80031 FORMAT (" ",2X,I3,4X," FAIL ",/," ",16X,"COMPUTED= " , 03000800 |
| 1D17.10,/," ",16X,"CORRECT= " ,D17.10) 03010800 |
| 80033 FORMAT (" ",16X,"COMPUTED= " ,D17.10,10X,A31) 03020800 |
| 80035 FORMAT (" ",16X,"CORRECT= " ,D17.10,10X,A31) 03030800 |
| 80037 FORMAT (" ",16X,"COMPUTED= " ,"(",E12.5,", ",E12.5,")",6X,A31) 03040800 |
| 80039 FORMAT (" ",16X,"CORRECT= " ,"(",E12.5,", ",E12.5,")",6X,A31) 03050800 |
| 80041 FORMAT (" ",16X,"COMPUTED= " ,"(",F12.5,", ",F12.5,")",6X,A31) 03060800 |
| 80043 FORMAT (" ",16X,"CORRECT= " ,"(",F12.5,", ",F12.5,")",6X,A31) 03070800 |
| 80045 FORMAT (" ",2X,I3,4X," FAIL ",/," ",16X,"COMPUTED= " , 03080800 |
| 1"(",F12.5,", ",F12.5,")"/," ",16X,"CORRECT= " , 03090800 |
| 2"(",F12.5,", ",F12.5,")") 03100800 |
| CBE** ********************** BBCFMAT1 **********************************03110800 |
| CBB** ********************** BBCFMT0B **********************************03120800 |
| C**** FORMAT STATEMENTS FOR PAGE HEADERS 03130800 |
| C**** 03140800 |
| 90002 FORMAT ("1") 03150800 |
| 90004 FORMAT (" ") 03160800 |
| 90006 FORMAT (" ",20X,"NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY" )03170800 |
| 90007 FORMAT (" ",19X,"FORTRAN COMPILER VALIDATION SYSTEM" ) 03180800 |
| 90008 FORMAT (" ",21X,A13,A17) 03190800 |
| 90009 FORMAT (" ",/," *",A5,"BEGIN*",12X,"TEST RESULTS - " ,A5,/) 03200800 |
| 90010 FORMAT (" ",8X,"TEST DATE*TIME= " ,A17," - COMPILER= " ,A20) 03210800 |
| 90013 FORMAT (" "," TEST ","PASS/FAIL " ,6X,"DISPLAYED RESULTS" , 03220800 |
| 1 7X,"REMARKS",24X) 03230800 |
| 90014 FORMAT (" ","----------------------------------------------" , 03240800 |
| 1 "---------------------------------" ) 03250800 |
| 90015 FORMAT (" ",48X,"THIS PROGRAM HAS " ,I3," TESTS",/) 03260800 |
| C**** 03270800 |
| C**** FORMAT STATEMENTS FOR REPORT FOOTINGS 03280800 |
| C**** 03290800 |
| 90016 FORMAT (" ",/," *",A5,"END*",14X,"END OF TEST - " ,A5,/) 03300800 |
| 90018 FORMAT (" ",A13,13X,A20," * ",A10,"/", 03310800 |
| 1 A13) 03320800 |
| 90019 FORMAT (" ","FOR OFFICIAL USE ONLY " ,35X,"COPYRIGHT 1982" ) 03330800 |
| C**** 03340800 |
| C**** FORMAT STATEMENTS FOR RUN SUMMARY 03350800 |
| C**** 03360800 |
| 90020 FORMAT (" ",21X,I5," TESTS PASSED" ) 03370800 |
| 90022 FORMAT (" ",21X,I5," TESTS FAILED" ) 03380800 |
| 90024 FORMAT (" ",21X,I5," TESTS DELETED" ) 03390800 |
| 90026 FORMAT (" ",21X,I5," TESTS REQUIRE INSPECTION" ) 03400800 |
| 90028 FORMAT (" ",21X,I5," OF ",I3," TESTS EXECUTED" ) 03410800 |
| CBE** ********************** BBCFMT0B **********************************03420800 |
| C***** 03430800 |
| C***** END OF TEST SEGMENT 151 03440800 |
| STOP 03450800 |
| END 03460800 |
| 03470800 |