Annotation of 43BSDTahoe/usr.bin/f77/testf77/tests/fm020.f, revision 1.1.1.1

1.1       root        1: c
                      2: c     comment section.
                      3: c
                      4: c     fm020
                      5: c
                      6: c             this routine tests the fortran in-line statement function
                      7: c     of type logical and integer.  integer constants, logical constants
                      8: c     integer variables, logical variables, integer arithmetic express-
                      9: c     ions are all used to test the statement function definition and
                     10: c     the value returned for the statement function when it is used
                     11: c     in the main body of the program.
                     12: c
                     13: c      references
                     14: c        american national standard programming language fortran,
                     15: c              x3.9-1978
                     16: c
                     17: c        section 8.4.1, integer, real, double precision, complex, and
                     18: c                       logical type-statements
                     19: c        section 15.3.2, intrinsic function references
                     20: c        section 15.4, statement functions
                     21: c        section 15.4.1, forms of a function statement
                     22: c        section 15.4.2, referencing a statement function
                     23: c        section 15.5.2, external function references
                     24: c
                     25:       logical lftn01, ldtn01
                     26:       logical lftn02, ldtn02
                     27:       logical lftn03, ldtn03, lctn03
                     28:       logical lftn04, ldtn04, lctn04
                     29:       dimension iadn11(2)
                     30: c
                     31: c..... test 553
                     32:       ifon01(idon01) = 32767
                     33: c
                     34: c..... test 554
                     35:       lftn01(ldtn01) = .true.
                     36: c
                     37: c..... test 555
                     38:       ifon02 ( idon02 ) = idon02
                     39: c
                     40: c..... test 556
                     41:       lftn02( ldtn02 ) = ldtn02
                     42: c
                     43: c..... test 557
                     44:       ifon03 (idon03 )= idon03
                     45: c
                     46: c..... test 558
                     47:       lftn03(ldtn03) = ldtn03
                     48: c
                     49: c..... test 559
                     50:       lftn04(ldtn04) = .not. ldtn04
                     51: c
                     52: c..... test 560
                     53:       ifon04(idon04) = idon04 ** 2
                     54: c
                     55: c..... test 561
                     56:       ifon05(idon05, idon06) = idon05 + idon06
                     57: c
                     58: c..... test 562
                     59:       ifon06(idon07, idon08) = sqrt(float(idon07**2)+float(idon08**2))
                     60: c
                     61: c..... test 563
                     62:       ifon07(idon09) = idon09 ** 2
                     63:       ifon08(i,j)=sqrt(float(ifon07(i))+float(ifon07(j)))
                     64: c
                     65: c..... test 564
                     66:       ifon09(k,l) = k / l + k ** l - k * l
                     67: c
                     68: c
                     69: c
                     70: c      **********************************************************
                     71: c
                     72: c         a compiler validation system for the fortran language
                     73: c     based on specifications as defined in american national standard
                     74: c     programming language fortran x3.9-1978, has been developed by the
                     75: c     federal cobol compiler testing service.  the fortran compiler
                     76: c     validation system (fcvs) consists of audit routines, their related
                     77: c     data, and an executive system.  each audit routine is a fortran
                     78: c     program, subprogram or function which includes tests of specific
                     79: c     language elements and supporting procedures indicating the result
                     80: c     of executing these tests.
                     81: c
                     82: c         this particular program/subprogram/function contains features
                     83: c     found only in the subset as defined in x3.9-1978.
                     84: c
                     85: c         suggestions and comments should be forwarded to -
                     86: c
                     87: c                  department of the navy
                     88: c                  federal cobol compiler testing service
                     89: c                  washington, d.c.  20376
                     90: c
                     91: c      **********************************************************
                     92: c
                     93: c
                     94: c
                     95: c     initialization section
                     96: c
                     97: c     initialize constants
                     98: c      **************
                     99: c     i01 contains the logical unit number for the card reader.
                    100:       i01 = 5
                    101: c     i02 contains the logical unit number for the printer.
                    102:       i02 = 6
                    103: c     system environment section
                    104: c
                    105: cx010    this card is replaced by contents of fexec x-010 control card.
                    106: c     the cx010 card is for overriding the program default i01 = 5
                    107: c     (unit number for card reader).
                    108: cx011    this card is replaced by contents of fexec x-011 control card.
                    109: c     the cx011 card is for systems which require additional
                    110: c     fortran statements for files associated with cx010 above.
                    111: c
                    112: cx020    this card is replaced by contents of fexec x-020 control card.
                    113: c     the cx020 card is for overriding the program default i02 = 6
                    114: c     (unit number for printer).
                    115: cx021    this card is replaced by contents of fexec x-021 control card.
                    116: c     the cx021 card is for systems which require additional
                    117: c     fortran statements for files associated with cx020 above.
                    118: c
                    119:       ivpass=0
                    120:       ivfail=0
                    121:       ivdele=0
                    122:       iczero=0
                    123: c
                    124: c     write page headers
                    125:       write (i02,90000)
                    126:       write (i02,90001)
                    127:       write (i02,90002)
                    128:       write (i02, 90002)
                    129:       write (i02,90003)
                    130:       write (i02,90002)
                    131:       write (i02,90004)
                    132:       write (i02,90002)
                    133:       write (i02,90011)
                    134:       write (i02,90002)
                    135:       write (i02,90002)
                    136:       write (i02,90005)
                    137:       write (i02,90006)
                    138:       write (i02,90002)
                    139:       ivtnum = 553
                    140: c
                    141: c      ****  test 553  ****
                    142: c     test 553  -  the value of the integer function is set to a
                    143: c         constant of 32767 regardless of the value of the arguement
                    144: c     supplied to the dummy arguement.  test of positive integer
                    145: c     constants for a statement function.
                    146: c
                    147: c
                    148:       if (iczero) 35530, 5530, 35530
                    149:  5530 continue
                    150:       ivcomp = ifon01(3)
                    151:       go to 45530
                    152: 35530 ivdele = ivdele + 1
                    153:       write (i02,80003) ivtnum
                    154:       if (iczero) 45530, 5541, 45530
                    155: 45530 if ( ivcomp - 32767 )  25530, 15530, 25530
                    156: 15530 ivpass = ivpass + 1
                    157:       write (i02,80001) ivtnum
                    158:       go to 5541
                    159: 25530 ivfail = ivfail + 1
                    160:       ivcorr = 32767
                    161:       write (i02,80004) ivtnum, ivcomp ,ivcorr
                    162:  5541 continue
                    163:       ivtnum = 554
                    164: c
                    165: c      ****  test 554  ****
                    166: c     test 554  -  test of the statement function of type logical
                    167: c         set to the logical constant .true. regardless of the
                    168: c     arguement supplied to the dummy arguement.
                    169: c     a logical    if statement is used in conjunction with the logical
                    170: c     statement function.  the true path is tested.
                    171: c
                    172: c
                    173:       if (iczero) 35540, 5540, 35540
                    174:  5540 continue
                    175:       ivon01 = 0
                    176:       if ( lftn01(.false.) )  ivon01 = 1
                    177:       go to 45540
                    178: 35540 ivdele = ivdele + 1
                    179:       write (i02,80003) ivtnum
                    180:       if (iczero) 45540, 5551, 45540
                    181: 45540 if ( ivon01 - 1 )  25540, 15540, 25540
                    182: 15540 ivpass = ivpass + 1
                    183:       write (i02,80001) ivtnum
                    184:       go to 5551
                    185: 25540 ivfail = ivfail + 1
                    186:       ivcomp = ivon01
                    187:       ivcorr = 1
                    188:       write (i02,80004) ivtnum, ivcomp ,ivcorr
                    189:  5551 continue
                    190:       ivtnum = 555
                    191: c
                    192: c      ****  test 555  ****
                    193: c     test 555  -  the integer statement function is set to the value
                    194: c         of the argeument supplied.
                    195: c
                    196: c
                    197:       if (iczero) 35550, 5550, 35550
                    198:  5550 continue
                    199:       ivcomp = ifon02 ( 32767 )
                    200:       go to 45550
                    201: 35550 ivdele = ivdele + 1
                    202:       write (i02,80003) ivtnum
                    203:       if (iczero) 45550, 5561, 45550
                    204: 45550 if ( ivcomp - 32767 )  25550, 15550, 25550
                    205: 15550 ivpass = ivpass + 1
                    206:       write (i02,80001) ivtnum
                    207:       go to 5561
                    208: 25550 ivfail = ivfail + 1
                    209:       ivcorr = 32767
                    210:       write (i02,80004) ivtnum, ivcomp ,ivcorr
                    211:  5561 continue
                    212:       ivtnum = 556
                    213: c
                    214: c      ****  test 556  ****
                    215: c     test 556  -  test of a logical statement function set to the
                    216: c         value of the arguement supplied.  the false path of a logical
                    217: c            if statement is used in conjunction with the logical
                    218: c         statement function.
                    219: c
                    220: c
                    221:       if (iczero) 35560, 5560, 35560
                    222:  5560 continue
                    223:       ivon01 = 1
                    224:       if ( lftn02(.false.) )  ivon01 = 0
                    225:       go to 45560
                    226: 35560 ivdele = ivdele + 1
                    227:       write (i02,80003) ivtnum
                    228:       if (iczero) 45560, 5571, 45560
                    229: 45560 if ( ivon01 - 1 )  25560, 15560, 25560
                    230: 15560 ivpass = ivpass + 1
                    231:       write (i02,80001) ivtnum
                    232:       go to 5571
                    233: 25560 ivfail = ivfail + 1
                    234:       ivcomp = ivon01
                    235:       ivcorr = 1
                    236:       write (i02,80004) ivtnum, ivcomp ,ivcorr
                    237:  5571 continue
                    238:       ivtnum = 557
                    239: c
                    240: c      ****  test 557  ****
                    241: c     test 557  -  the value of an integer function is set equal to
                    242: c         value of the arguement supplied.  this value is an integer
                    243: c         variable set to 32767.
                    244: c
                    245: c
                    246:       if (iczero) 35570, 5570, 35570
                    247:  5570 continue
                    248:       icon01 = 32767
                    249:       ivcomp = ifon03 ( icon01 )
                    250:       go to 45570
                    251: 35570 ivdele = ivdele + 1
                    252:       write (i02,80003) ivtnum
                    253:       if (iczero) 45570, 5581, 45570
                    254: 45570 if ( ivcomp - 32767 )  25570, 15570, 25570
                    255: 15570 ivpass = ivpass + 1
                    256:       write (i02,80001) ivtnum
                    257:       go to 5581
                    258: 25570 ivfail = ivfail + 1
                    259:       ivcorr = 32767
                    260:       write (i02,80004) ivtnum, ivcomp ,ivcorr
                    261:  5581 continue
                    262:       ivtnum = 558
                    263: c
                    264: c      ****  test 558  ****
                    265: c     test 558 -  a logical statement function is set equal to the
                    266: c         value of the arguement supplied.  this value is a logical
                    267: c     variable set to .true.  the true path of a logical if
                    268: c         statement is used in conjunction with the logical statement
                    269: c         function.
                    270: c
                    271: c
                    272:       if (iczero) 35580, 5580, 35580
                    273:  5580 continue
                    274:       ivon01 = 0
                    275:       lctn03 = .true.
                    276:       if ( lftn03(lctn03) )  ivon01 = 1
                    277:       go to 45580
                    278: 35580 ivdele = ivdele + 1
                    279:       write (i02,80003) ivtnum
                    280:       if (iczero) 45580, 5591, 45580
                    281: 45580 if ( ivon01 - 1 )  25580, 15580, 25580
                    282: 15580 ivpass = ivpass + 1
                    283:       write (i02,80001) ivtnum
                    284:       go to 5591
                    285: 25580 ivfail = ivfail + 1
                    286:       ivcomp = ivon01
                    287:       ivcorr = 1
                    288:       write (i02,80004) ivtnum, ivcomp ,ivcorr
                    289:  5591 continue
                    290:       ivtnum = 559
                    291: c
                    292: c      ****  test 559  ****
                    293: c     test 559  -  like test 558 only the logical  .not.  is used
                    294: c         in the logical statement function definition  the false path
                    295: c         of a logical if statement is used in conjunction with the
                    296: c         logical statement function.
                    297: c
                    298: c
                    299:       if (iczero) 35590, 5590, 35590
                    300:  5590 continue
                    301:       ivon01 = 1
                    302:       lctn04 = .true.
                    303:       if ( lftn04(lctn04) )  ivon01 = 0
                    304:       go to 45590
                    305: 35590 ivdele = ivdele + 1
                    306:       write (i02,80003) ivtnum
                    307:       if (iczero) 45590, 5601, 45590
                    308: 45590 if ( ivon01 - 1 )  25590, 15590, 25590
                    309: 15590 ivpass = ivpass + 1
                    310:       write (i02,80001) ivtnum
                    311:       go to 5601
                    312: 25590 ivfail = ivfail + 1
                    313:       ivcomp = ivon01
                    314:       ivcorr = 1
                    315:       write (i02,80004) ivtnum, ivcomp ,ivcorr
                    316:  5601 continue
                    317:       ivtnum = 560
                    318: c
                    319: c      ****  test 560  ****
                    320: c     test 560  -  integer exponientiation used in an integer
                    321: c         statement function.
                    322: c
                    323: c
                    324:       if (iczero) 35600, 5600, 35600
                    325:  5600 continue
                    326:       icon04 = 3
                    327:       ivcomp = ifon04(icon04)
                    328:       go to 45600
                    329: 35600 ivdele = ivdele + 1
                    330:       write (i02,80003) ivtnum
                    331:       if (iczero) 45600, 5611, 45600
                    332: 45600 if ( ivcomp - 9 )  25600, 15600, 25600
                    333: 15600 ivpass = ivpass + 1
                    334:       write (i02,80001) ivtnum
                    335:       go to 5611
                    336: 25600 ivfail = ivfail + 1
                    337:       ivcorr = 9
                    338:       write (i02,80004) ivtnum, ivcomp ,ivcorr
                    339:  5611 continue
                    340:       ivtnum = 561
                    341: c
                    342: c      ****  test 561  ****
                    343: c     test 561  -  test of integer addition using two (2) dummy
                    344: c         arguements.
                    345: c
                    346: c
                    347:       if (iczero) 35610, 5610, 35610
                    348:  5610 continue
                    349:       icon05 = 9
                    350:       icon06 = 16
                    351:       ivcomp = ifon05(icon05, icon06)
                    352:       go to 45610
                    353: 35610 ivdele = ivdele + 1
                    354:       write (i02,80003) ivtnum
                    355:       if (iczero) 45610, 5621, 45610
                    356: 45610 if ( ivcomp - 25 )  25610, 15610, 25610
                    357: 15610 ivpass = ivpass + 1
                    358:       write (i02,80001) ivtnum
                    359:       go to 5621
                    360: 25610 ivfail = ivfail + 1
                    361:       ivcorr = 25
                    362:       write (i02,80004) ivtnum, ivcomp ,ivcorr
                    363:  5621 continue
                    364:       ivtnum = 562
                    365: c
                    366: c      ****  test 562  ****
                    367: c     test 562  -  this test is the solution of a right triangle
                    368: c         using integer statement functions which reference the
                    369: c         intrinsic functions  sqrt  and  float.  this is a 3-4-5
                    370: c         right triangle.
                    371: c
                    372: c
                    373:       if (iczero) 35620, 5620, 35620
                    374:  5620 continue
                    375:       icon07 = 3
                    376:       icon08 = 4
                    377:       ivcomp = ifon06(icon07, icon08)
                    378:       go to 45620
                    379: 35620 ivdele = ivdele + 1
                    380:       write (i02,80003) ivtnum
                    381:       if (iczero) 45620, 5631, 45620
                    382: 45620 if ( ivcomp - 5 )  5622, 15620, 5622
                    383:  5622 if ( ivcomp - 4 ) 25620, 15620, 25620
                    384: 15620 ivpass = ivpass + 1
                    385:       write (i02,80001) ivtnum
                    386:       go to 5631
                    387: 25620 ivfail = ivfail + 1
                    388:       ivcorr = 5
                    389:       write (i02,80004) ivtnum, ivcomp ,ivcorr
                    390:  5631 continue
                    391:       ivtnum = 563
                    392: c
                    393: c      ****  test 563  ****
                    394: c     test 563  -  solution of a 3-4-5 right triangle like test 562
                    395: c         except that both intrinsic and previously defined statement
                    396: c         functions are used.
                    397: c
                    398: c
                    399:       if (iczero) 35630, 5630, 35630
                    400:  5630 continue
                    401:       icon09 = 3
                    402:       icon10 = 4
                    403:       ivcomp = ifon08(icon09, icon10)
                    404:       go to 45630
                    405: 35630 ivdele = ivdele + 1
                    406:       write (i02,80003) ivtnum
                    407:       if (iczero) 45630, 5641, 45630
                    408: 45630 if ( ivcomp - 5 )   5632, 15630, 5632
                    409:  5632 if ( ivcomp - 4 )  25630, 15630, 25630
                    410: 15630 ivpass = ivpass + 1
                    411:       write (i02,80001) ivtnum
                    412:       go to 5641
                    413: 25630 ivfail = ivfail + 1
                    414:       ivcorr = 5
                    415:       write (i02,80004) ivtnum, ivcomp ,ivcorr
                    416:  5641 continue
                    417:       ivtnum = 564
                    418: c
                    419: c      ****  test 564  ****
                    420: c     test 564  -  use  of array elements in an integer statement
                    421: c         function which uses the operations of + - * /  .
                    422: c
                    423: c
                    424:       if (iczero) 35640, 5640, 35640
                    425:  5640 continue
                    426:       iadn11(1) = 2
                    427:       iadn11(2) = 2
                    428:       ivcomp = ifon09( iadn11(1), iadn11(2) )
                    429:       go to 45640
                    430: 35640 ivdele = ivdele + 1
                    431:       write (i02,80003) ivtnum
                    432:       if (iczero) 45640, 5651, 45640
                    433: 45640 if ( ivcomp - 1 )  25640, 15640, 25640
                    434: 15640 ivpass = ivpass + 1
                    435:       write (i02,80001) ivtnum
                    436:       go to 5651
                    437: 25640 ivfail = ivfail + 1
                    438:       ivcorr = 1
                    439:       write (i02,80004) ivtnum, ivcomp ,ivcorr
                    440:  5651 continue
                    441: c
                    442: c     write page footings and run summaries
                    443: 99999 continue
                    444:       write (i02,90002)
                    445:       write (i02,90006)
                    446:       write (i02,90002)
                    447:       write (i02,90002)
                    448:       write (i02,90007)
                    449:       write (i02,90002)
                    450:       write (i02,90008)  ivfail
                    451:       write (i02,90009) ivpass
                    452:       write (i02,90010) ivdele
                    453: c
                    454: c
                    455: c     terminate routine execution
                    456:       stop
                    457: c
                    458: c     format statements for page headers
                    459: 90000 format (1h1)
                    460: 90002 format (1h )
                    461: 90001 format (1h ,10x,34hfortran compiler validation system)
                    462: 90003 format (1h ,21x,11hversion 1.0)
                    463: 90004 format (1h ,10x,38hfor official use only - copyright 1978)
                    464: 90005 format (1h ,5x,4htest,5x,9hpass/fail, 5x,8hcomputed,8x,7hcorrect)
                    465: 90006 format (1h ,5x,46h----------------------------------------------)
                    466: 90011 format (1h ,18x,17hsubset level test)
                    467: c
                    468: c     format statements for run summaries
                    469: 90008 format (1h ,15x,i5,19h errors encountered)
                    470: 90009 format (1h ,15x,i5,13h tests passed)
                    471: 90010 format (1h ,15x,i5,14h tests deleted)
                    472: c
                    473: c     format statements for test results
                    474: 80001 format (1h ,4x,i5,7x,4hpass)
                    475: 80002 format (1h ,4x,i5,7x,4hfail)
                    476: 80003 format (1h ,4x,i5,7x,7hdeleted)
                    477: 80004 format (1h ,4x,i5,7x,4hfail,10x,i6,9x,i6)
                    478: 80005 format (1h ,4x,i5,7x,4hfail,4x,e12.5,3x,e12.5)
                    479: c
                    480: 90007 format (1h ,20x,20hend of program fm020)
                    481:       end

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.