|
|
BSD 4.3tahoe
c comment section
c
c fm045
c
c this routine tests arithmetic assignments using integer
c variables connected by a series of arithmetic operators.
c different combinations of parenthetical notation are exercized.
c
c
c references
c american national standard programming language fortran,
c x3.9-1978
c
c section 4.3, integer type
c section 4.3.1, integer constant
c section 6.1, arithmetic expressions
c section 6.6, evaluation of expressions
c section 10.1, arithmetic assignment statement
c
c
c
c **********************************************************
c
c a compiler validation system for the fortran language
c based on specifications as defined in american national standard
c programming language fortran x3.9-1978, has been developed by the
c federal cobol compiler testing service. the fortran compiler
c validation system (fcvs) consists of audit routines, their related
c data, and an executive system. each audit routine is a fortran
c program, subprogram or function which includes tests of specific
c language elements and supporting procedures indicating the result
c of executing these tests.
c
c this particular program/subprogram/function contains features
c found only in the subset as defined in x3.9-1978.
c
c suggestions and comments should be forwarded to -
c
c department of the navy
c federal cobol compiler testing service
c washington, d.c. 20376
c
c **********************************************************
c
c
c
c initialization section
c
c initialize constants
c **************
c i01 contains the logical unit number for the card reader.
i01 = 5
c i02 contains the logical unit number for the printer.
i02 = 6
c system environment section
c
cx010 this card is replaced by contents of fexec x-010 control card.
c the cx010 card is for overriding the program default i01 = 5
c (unit number for card reader).
cx011 this card is replaced by contents of fexec x-011 control card.
c the cx011 card is for systems which require additional
c fortran statements for files associated with cx010 above.
c
cx020 this card is replaced by contents of fexec x-020 control card.
c the cx020 card is for overriding the program default i02 = 6
c (unit number for printer).
cx021 this card is replaced by contents of fexec x-021 control card.
c the cx021 card is for systems which require additional
c fortran statements for files associated with cx020 above.
c
ivpass=0
ivfail=0
ivdele=0
iczero=0
c
c write page headers
write (i02,90000)
write (i02,90001)
write (i02,90002)
write (i02, 90002)
write (i02,90003)
write (i02,90002)
write (i02,90004)
write (i02,90002)
write (i02,90011)
write (i02,90002)
write (i02,90002)
write (i02,90005)
write (i02,90006)
write (i02,90002)
c
c
c test section
c
c arithmetic assignment statement
c
c
c tests 747 through 755 use the same string of variables and
c operators, but use different combinations of parenthetical
c notation to alter priorities in order of evaluation.
c
c tests 756 through 759 check the capability to enclose the entire
c right hand side of an assignment statement in parentheses or sets
c of nested parentheses.
c
c
c
c
c
c
c
ivtnum = 747
c
c **** test 747 ****
c
if (iczero) 37470, 7470, 37470
7470 continue
ivon01 = 15
ivon02 = 9
ivon03 = 4
ivon04 = 18
ivon05 = 6
ivon06 = 2
ivcomp = ivon01 + ivon02 - ivon03 * ivon04 / ivon05 ** ivon06
go to 47470
37470 ivdele = ivdele + 1
write (i02,80003) ivtnum
if (iczero) 47470, 7481, 47470
47470 if (ivcomp - 22) 27470,17470,27470
17470 ivpass = ivpass + 1
write (i02,80001) ivtnum
go to 7481
27470 ivfail = ivfail + 1
ivcorr = 22
write (i02,80004) ivtnum, ivcomp, ivcorr
7481 continue
ivtnum = 748
c
c **** test 748 ****
c
if (iczero) 37480, 7480, 37480
7480 continue
ivon01 = 15
ivon02 = 9
ivon03 = 4
ivon04 = 18
ivon05 = 6
ivon06 = 2
ivcomp = ((((ivon01 + ivon02) - ivon03) * ivon04) / ivon05)
* ** ivon06
go to 47480
37480 ivdele = ivdele + 1
write (i02,80003) ivtnum
if (iczero) 47480, 7491, 47480
47480 if (ivcomp - 3600) 27480,17480,27480
17480 ivpass = ivpass + 1
write (i02,80001) ivtnum
go to 7491
27480 ivfail = ivfail + 1
ivcorr = 3600
write (i02,80004) ivtnum, ivcomp, ivcorr
7491 continue
ivtnum = 749
c
c **** test 749 ****
c
if (iczero) 37490, 7490, 37490
7490 continue
ivon01 = 15
ivon02 = 9
ivon03 = 4
ivon04 = 36
ivon05 = 6
ivon06 = 2
ivcomp = (ivon01 + ivon02 - ivon03) * (ivon04 / ivon05 ** ivon06)
go to 47490
37490 ivdele = ivdele + 1
write (i02,80003) ivtnum
if (iczero) 47490, 7501, 47490
47490 if (ivcomp - 20) 27490,17490,27490
17490 ivpass = ivpass + 1
write (i02,80001) ivtnum
go to 7501
27490 ivfail = ivfail + 1
ivcorr = 20
write (i02,80004) ivtnum, ivcomp, ivcorr
7501 continue
ivtnum = 750
c
c **** test 750 ****
c
if (iczero) 37500, 7500, 37500
7500 continue
ivon01 = 15
ivon02 = 9
ivon03 = 4
ivon04 = 36
ivon05 = 6
ivon06 = 2
ivcomp = (ivon01 + ivon02) - (ivon03 * ivon04) / (ivon05 **
* ivon06)
go to 47500
37500 ivdele = ivdele + 1
write (i02,80003) ivtnum
if (iczero) 47500, 7511, 47500
47500 if (ivcomp - 20) 27500,17500,27500
17500 ivpass = ivpass + 1
write (i02,80001) ivtnum
go to 7511
27500 ivfail = ivfail + 1
ivcorr = 20
write (i02,80004) ivtnum, ivcomp, ivcorr
7511 continue
ivtnum = 751
c
c **** test 751 ****
c
if (iczero) 37510, 7510, 37510
7510 continue
ivon01 = 15
ivon02 = 9
ivon03 = 4
ivon04 = 36
ivon05 = 6
ivon06 = 2
ivcomp = ((ivon01 + ivon02) - (ivon03 * ivon04)) / (ivon05 **
* ivon06)
go to 47510
37510 ivdele = ivdele + 1
write (i02,80003) ivtnum
if (iczero) 47510, 7521, 47510
47510 if (ivcomp + 3) 27510,17510,27510
17510 ivpass = ivpass + 1
write (i02,80001) ivtnum
go to 7521
27510 ivfail = ivfail + 1
ivcorr = -3
c actual answer is -3.333333... truncation is necessary
write (i02,80004) ivtnum, ivcomp, ivcorr
7521 continue
ivtnum = 752
c
c **** test 752 ****
c
if (iczero) 37520, 7520, 37520
7520 continue
ivon01 = 15
ivon02 = 9
ivon03 = 4
ivon04 = 36
ivon05 = 6
ivon06 = 2
ivcomp = (ivon01 + ivon02) - (ivon03 * ivon04 / ivon05) ** ivon06
go to 47520
37520 ivdele = ivdele + 1
write (i02,80003) ivtnum
if (iczero) 47520, 7531, 47520
47520 if (ivcomp + 552) 27520,17520,27520
17520 ivpass = ivpass + 1
write (i02,80001) ivtnum
go to 7531
27520 ivfail = ivfail + 1
ivcorr = -552
write (i02,80004) ivtnum, ivcomp, ivcorr
7531 continue
ivtnum = 753
c
c **** test 753 ****
c
if (iczero) 37530, 7530, 37530
7530 continue
ivon01 = 15
ivon02 = 9
ivon03 = 4
ivon04 = 36
ivon05 = 6
ivon06 = 2
ivcomp = ivon01 + (ivon02 - ivon03 * ivon04) / ivon05 ** ivon06
go to 47530
37530 ivdele = ivdele + 1
write (i02,80003) ivtnum
if (iczero) 47530, 7541, 47530
47530 if (ivcomp - 12) 27530,17530,27530
17530 ivpass = ivpass + 1
write (i02,80001) ivtnum
go to 7541
27530 ivfail = ivfail + 1
ivcorr = 12
c actual answer is 11.25 truncation is necessary
c during an intermediate step
write (i02,80004) ivtnum, ivcomp, ivcorr
7541 continue
ivtnum = 754
c
c **** test 754 ****
c
if (iczero) 37540, 7540, 37540
7540 continue
ivon01 = 15
ivon02 = 9
ivon03 = 4
ivon04 = 36
ivon05 = 6
ivon06 = 2
ivcomp = ivon01 + (ivon02 - ivon03) * (ivon04 / ivon05) ** ivon06
go to 47540
37540 ivdele = ivdele + 1
write (i02,80003) ivtnum
if (iczero) 47540, 7551, 47540
47540 if (ivcomp - 195) 27540,17540,27540
17540 ivpass = ivpass + 1
write (i02,80001) ivtnum
go to 7551
27540 ivfail = ivfail + 1
ivcorr = 195
write (i02,80004) ivtnum, ivcomp, ivcorr
7551 continue
ivtnum = 755
c
c **** test 755 ****
c
if (iczero) 37550, 7550, 37550
7550 continue
ivon01 = 15
ivon02 = 9
ivon03 = 4
ivon04 = 36
ivon05 = 6
ivon06 = 2
ivcomp = ((ivon01 + (ivon02 - ivon03) * ivon04) / ivon05) **
* ivon06
go to 47550
37550 ivdele = ivdele + 1
write (i02,80003) ivtnum
if (iczero) 47550, 7561, 47550
47550 if (ivcomp - 1024) 27550,17550,27550
17550 ivpass = ivpass + 1
write (i02,80001) ivtnum
go to 7561
27550 ivfail = ivfail + 1
ivcorr = 1024
c actual answer is 1056.25 truncation is necessary
c during an intermediate step
write (i02,80004) ivtnum, ivcomp, ivcorr
7561 continue
ivtnum = 756
c
c **** test 756 ****
c single parentheses
c
if (iczero) 37560, 7560, 37560
7560 continue
ivon01 = 13
ivon02 = 37
ivcomp = (ivon01 + ivon02)
go to 47560
37560 ivdele = ivdele + 1
write (i02,80003) ivtnum
if (iczero) 47560, 7571, 47560
47560 if (ivcomp - 50) 27560,17560,27560
17560 ivpass = ivpass + 1
write (i02,80001) ivtnum
go to 7571
27560 ivfail = ivfail + 1
ivcorr = 50
write (i02,80004) ivtnum, ivcomp, ivcorr
7571 continue
ivtnum = 757
c
c **** test 757 ****
c nested parentheses (two sets)
c
if (iczero) 37570, 7570, 37570
7570 continue
ivon01 = 13
ivon02 = 37
ivcomp = ((ivon01 - ivon02))
go to 47570
37570 ivdele = ivdele + 1
write (i02,80003) ivtnum
if (iczero) 47570, 7581, 47570
47570 if (ivcomp + 24) 27570,17570,27570
17570 ivpass = ivpass + 1
write (i02,80001) ivtnum
go to 7581
27570 ivfail = ivfail + 1
ivcorr = -24
write (i02,80004) ivtnum, ivcomp, ivcorr
7581 continue
ivtnum = 758
c
c **** test 758 ****
c nested parentheses (21 sets - same line)
c
if (iczero) 37580, 7580, 37580
7580 continue
ivon01 = 13
ivon02 = 37
ivcomp = (((((((((((((((((((((ivon01 * ivon02)))))))))))))))))))))
go to 47580
37580 ivdele = ivdele + 1
write (i02,80003) ivtnum
if (iczero) 47580, 7591, 47580
47580 if (ivcomp - 481) 27580,17580,27580
17580 ivpass = ivpass + 1
write (i02,80001) ivtnum
go to 7591
27580 ivfail = ivfail + 1
ivcorr = 481
write (i02,80004) ivtnum, ivcomp, ivcorr
7591 continue
ivtnum = 759
c
c **** test 759 ****
c nested parentheses (57 sets - multiple lines)
c
if (iczero) 37590, 7590, 37590
7590 continue
ivon01 = 13
ivon02 = 37
ivcomp = (((((((((((((((((((((((((((((((((((((((((((((((((((((((((
* ivon01 / ivon02
* )))))))))))))))))))))))))))))))))))))))))))))))))))))))))
go to 47590
37590 ivdele = ivdele + 1
write (i02,80003) ivtnum
if (iczero) 47590, 7601, 47590
47590 if (ivcomp) 27590,17590,27590
17590 ivpass = ivpass + 1
write (i02,80001) ivtnum
go to 7601
27590 ivfail = ivfail + 1
ivcorr = 0
write (i02,80004) ivtnum, ivcomp, ivcorr
7601 continue
c
c write page footings and run summaries
99999 continue
write (i02,90002)
write (i02,90006)
write (i02,90002)
write (i02,90002)
write (i02,90007)
write (i02,90002)
write (i02,90008) ivfail
write (i02,90009) ivpass
write (i02,90010) ivdele
c
c
c terminate routine execution
stop
c
c format statements for page headers
90000 format (1h1)
90002 format (1h )
90001 format (1h ,10x,34hfortran compiler validation system)
90003 format (1h ,21x,11hversion 1.0)
90004 format (1h ,10x,38hfor official use only - copyright 1978)
90005 format (1h ,5x,4htest,5x,9hpass/fail, 5x,8hcomputed,8x,7hcorrect)
90006 format (1h ,5x,46h----------------------------------------------)
90011 format (1h ,18x,17hsubset level test)
c
c format statements for run summaries
90008 format (1h ,15x,i5,19h errors encountered)
90009 format (1h ,15x,i5,13h tests passed)
90010 format (1h ,15x,i5,14h tests deleted)
c
c format statements for test results
80001 format (1h ,4x,i5,7x,4hpass)
80002 format (1h ,4x,i5,7x,4hfail)
80003 format (1h ,4x,i5,7x,7hdeleted)
80004 format (1h ,4x,i5,7x,4hfail,10x,i6,9x,i6)
80005 format (1h ,4x,i5,7x,4hfail,4x,e12.5,3x,e12.5)
c
90007 format (1h ,20x,20hend of program fm045)
end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.