|
|
1.1 ! root 1: c comment section. ! 2: c ! 3: c fm023 ! 4: c ! 5: c two dimensioned arrays are used in this routine. ! 6: c this routine tests arrays with fixed dimension and size limits ! 7: c set either in a blank common or dimension statement. the values ! 8: c of the array elements are set in various ways such as simple ! 9: c assignment statements, set to the values of other array elements ! 10: c (either positive or negative), set by integer to real or real to ! 11: c integer conversion, set by arithmetic expressions, or set by ! 12: c use of the equivalence statement. ! 13: c ! 14: c ! 15: c references ! 16: c american national standard programming language fortran, ! 17: c x3.9-1978 ! 18: c ! 19: c section 8, specification statements ! 20: c section 8.1, dimension statement ! 21: c section 8.2, equivalence statement ! 22: c section 8.3, common statement ! 23: c section 8.4, type-statements ! 24: c section 9, data statement ! 25: c ! 26: common iadn22(2,2), radn22(2,2), icoe01, rcoe01 ! 27: dimension iadn21(2,2), radn21(2,2) ! 28: dimension iade23(2,2), iade24(2,2), rade23(2,2), rade24(2,2) ! 29: equivalence (iade23(2,2),iadn22(2,2),iade24(2,2)) ! 30: equivalence (rade23(2,2),radn22(2,2),rade24(2,2)) ! 31: equivalence (icoe01,icoe02,icoe03,icoe04), (rcoe01,rcoe02,rcoe03) ! 32: integer radn11(2), radn25(2,2) ! 33: logical ladn21(2,2) ! 34: data radn21(2,2)/-512./ ! 35: data ladn21/4*.true./ ! 36: c ! 37: c ********************************************************** ! 38: c ! 39: c a compiler validation system for the fortran language ! 40: c based on specifications as defined in american national standard ! 41: c programming language fortran x3.9-1978, has been developed by the ! 42: c federal cobol compiler testing service. the fortran compiler ! 43: c validation system (fcvs) consists of audit routines, their related ! 44: c data, and an executive system. each audit routine is a fortran ! 45: c program, subprogram or function which includes tests of specific ! 46: c language elements and supporting procedures indicating the result ! 47: c of executing these tests. ! 48: c ! 49: c this particular program/subprogram/function contains features ! 50: c found only in the subset as defined in x3.9-1978. ! 51: c ! 52: c suggestions and comments should be forwarded to - ! 53: c ! 54: c department of the navy ! 55: c federal cobol compiler testing service ! 56: c washington, d.c. 20376 ! 57: c ! 58: c ********************************************************** ! 59: c ! 60: c ! 61: c ! 62: c initialization section ! 63: c ! 64: c initialize constants ! 65: c ************** ! 66: c i01 contains the logical unit number for the card reader. ! 67: i01 = 5 ! 68: c i02 contains the logical unit number for the printer. ! 69: i02 = 6 ! 70: c system environment section ! 71: c ! 72: cx010 this card is replaced by contents of fexec x-010 control card. ! 73: c the cx010 card is for overriding the program default i01 = 5 ! 74: c (unit number for card reader). ! 75: cx011 this card is replaced by contents of fexec x-011 control card. ! 76: c the cx011 card is for systems which require additional ! 77: c fortran statements for files associated with cx010 above. ! 78: c ! 79: cx020 this card is replaced by contents of fexec x-020 control card. ! 80: c the cx020 card is for overriding the program default i02 = 6 ! 81: c (unit number for printer). ! 82: cx021 this card is replaced by contents of fexec x-021 control card. ! 83: c the cx021 card is for systems which require additional ! 84: c fortran statements for files associated with cx020 above. ! 85: c ! 86: ivpass=0 ! 87: ivfail=0 ! 88: ivdele=0 ! 89: iczero=0 ! 90: c ! 91: c write page headers ! 92: write (i02,90000) ! 93: write (i02,90001) ! 94: write (i02,90002) ! 95: write (i02, 90002) ! 96: write (i02,90003) ! 97: write (i02,90002) ! 98: write (i02,90004) ! 99: write (i02,90002) ! 100: write (i02,90011) ! 101: write (i02,90002) ! 102: write (i02,90002) ! 103: write (i02,90005) ! 104: write (i02,90006) ! 105: write (i02,90002) ! 106: ivtnum = 632 ! 107: c ! 108: c **** test 632 **** ! 109: c test 632 - tests setting an integer array element by a ! 110: c simple assignment statement to the value 9999. ! 111: c ! 112: if (iczero) 36320, 6320, 36320 ! 113: 6320 continue ! 114: iadn21(1,1) = 9999 ! 115: ivcomp = iadn21(1,1) ! 116: go to 46320 ! 117: 36320 ivdele = ivdele + 1 ! 118: write (i02,80003) ivtnum ! 119: if (iczero) 46320, 6331, 46320 ! 120: 46320 if ( ivcomp - 9999 ) 26320, 16320, 26320 ! 121: 16320 ivpass = ivpass + 1 ! 122: write (i02,80001) ivtnum ! 123: go to 6331 ! 124: 26320 ivfail = ivfail + 1 ! 125: ivcorr = 9999 ! 126: write (i02,80004) ivtnum, ivcomp ,ivcorr ! 127: 6331 continue ! 128: ivtnum = 633 ! 129: c ! 130: c **** test 633 **** ! 131: c test 633 - tests setting a real array element by a simple ! 132: c assignment statement to the value -32766. ! 133: c ! 134: if (iczero) 36330, 6330, 36330 ! 135: 6330 continue ! 136: radn21(1,2) = -32766. ! 137: ivcomp = radn21(1,2) ! 138: go to 46330 ! 139: 36330 ivdele = ivdele + 1 ! 140: write (i02,80003) ivtnum ! 141: if (iczero) 46330, 6341, 46330 ! 142: 46330 if ( ivcomp + 32766 ) 26330, 16330, 26330 ! 143: 16330 ivpass = ivpass + 1 ! 144: write (i02,80001) ivtnum ! 145: go to 6341 ! 146: 26330 ivfail = ivfail + 1 ! 147: ivcorr = -32766 ! 148: write (i02,80004) ivtnum, ivcomp ,ivcorr ! 149: 6341 continue ! 150: ivtnum = 634 ! 151: c ! 152: c **** test 634 **** ! 153: c test 634 - test of the data initialization statement and setting ! 154: c an integer array element equal to the value of a real array ! 155: c element. the value used is -512. ! 156: c ! 157: if (iczero) 36340, 6340, 36340 ! 158: 6340 continue ! 159: iadn21(2,2) = radn21(2,2) ! 160: ivcomp = iadn21(2,2) ! 161: go to 46340 ! 162: 36340 ivdele = ivdele + 1 ! 163: write (i02,80003) ivtnum ! 164: if (iczero) 46340, 6351, 46340 ! 165: 46340 if ( ivcomp + 512 ) 26340, 16340, 26340 ! 166: 16340 ivpass = ivpass + 1 ! 167: write (i02,80001) ivtnum ! 168: go to 6351 ! 169: 26340 ivfail = ivfail + 1 ! 170: ivcorr = -512 ! 171: write (i02,80004) ivtnum, ivcomp ,ivcorr ! 172: 6351 continue ! 173: ivtnum = 635 ! 174: c ! 175: c **** test 635 **** ! 176: c test 635 - test of setting a two dimensioned array element ! 177: c equal to the value of a one dimensioned array element. ! 178: c both arrays are set integer by the type statement and the two ! 179: c dimensioned array element is minus the value of the one dimension ! 180: c element. the value used is 3. ! 181: c ! 182: if (iczero) 36350, 6350, 36350 ! 183: 6350 continue ! 184: radn11(1) = 3 ! 185: radn25(2,2) = - radn11(1) ! 186: ivcomp = radn25(2,2) ! 187: go to 46350 ! 188: 36350 ivdele = ivdele + 1 ! 189: write (i02,80003) ivtnum ! 190: if (iczero) 46350, 6361, 46350 ! 191: 46350 if ( ivcomp + 3 ) 26350, 16350, 26350 ! 192: 16350 ivpass = ivpass + 1 ! 193: write (i02,80001) ivtnum ! 194: go to 6361 ! 195: 26350 ivfail = ivfail + 1 ! 196: ivcorr = -3 ! 197: write (i02,80004) ivtnum, ivcomp ,ivcorr ! 198: 6361 continue ! 199: ivtnum = 636 ! 200: c ! 201: c **** test 636 **** ! 202: c test 636 - test of logical array elements set by data statements ! 203: c ! 204: if (iczero) 36360, 6360, 36360 ! 205: 6360 continue ! 206: icon01 = 0 ! 207: if ( ladn21(2,1) ) icon01 = 1 ! 208: go to 46360 ! 209: 36360 ivdele = ivdele + 1 ! 210: write (i02,80003) ivtnum ! 211: if (iczero) 46360, 6371, 46360 ! 212: 46360 if ( icon01 - 1 ) 26360, 16360, 26360 ! 213: 16360 ivpass = ivpass + 1 ! 214: write (i02,80001) ivtnum ! 215: go to 6371 ! 216: 26360 ivfail = ivfail + 1 ! 217: ivcomp = icon01 ! 218: ivcorr = 1 ! 219: write (i02,80004) ivtnum, ivcomp ,ivcorr ! 220: 6371 continue ! 221: ivtnum = 637 ! 222: c ! 223: c **** test 637 **** ! 224: c test 637 - test of real to integer conversion and setting ! 225: c integer array elements to the value obtained in an arithmetic ! 226: c expression using real array elements. .5 + .5 = 1 ! 227: c ! 228: if (iczero) 36370, 6370, 36370 ! 229: 6370 continue ! 230: radn21(1,2) = 00000.5 ! 231: radn21(2,1) = .500000 ! 232: iadn21(2,1) = radn21(1,2) + radn21(2,1) ! 233: ivcomp = iadn21(2,1) ! 234: go to 46370 ! 235: 36370 ivdele = ivdele + 1 ! 236: write (i02,80003) ivtnum ! 237: if (iczero) 46370, 6381, 46370 ! 238: 46370 if ( ivcomp - 1 ) 26370, 16370, 26370 ! 239: 16370 ivpass = ivpass + 1 ! 240: write (i02,80001) ivtnum ! 241: go to 6381 ! 242: 26370 ivfail = ivfail + 1 ! 243: ivcorr = 1 ! 244: write (i02,80004) ivtnum, ivcomp ,ivcorr ! 245: 6381 continue ! 246: ivtnum = 638 ! 247: c ! 248: c **** test 638 **** ! 249: c test 638 - test of equivalence of three integer arrays one of ! 250: c which is in common. ! 251: c ! 252: if (iczero) 36380, 6380, 36380 ! 253: 6380 continue ! 254: iadn22(2,1) = -9999 ! 255: ivcomp = iade23(2,1) ! 256: go to 46380 ! 257: 36380 ivdele = ivdele + 1 ! 258: write (i02,80003) ivtnum ! 259: if (iczero) 46380, 6391, 46380 ! 260: 46380 if ( ivcomp + 9999 ) 26380, 16380, 26380 ! 261: 16380 ivpass = ivpass + 1 ! 262: write (i02,80001) ivtnum ! 263: go to 6391 ! 264: 26380 ivfail = ivfail + 1 ! 265: ivcorr = -9999 ! 266: write (i02,80004) ivtnum, ivcomp ,ivcorr ! 267: 6391 continue ! 268: ivtnum = 639 ! 269: c ! 270: c **** test 639 **** ! 271: c test 639 - like test 638 only the other equivalenced array is ! 272: c tested for the value -9999. ! 273: c ! 274: if (iczero) 36390, 6390, 36390 ! 275: 6390 continue ! 276: iade23(2,1) = -9999 ! 277: ivcomp = iade24(2,1) ! 278: go to 46390 ! 279: 36390 ivdele = ivdele + 1 ! 280: write (i02,80003) ivtnum ! 281: if (iczero) 46390, 6401, 46390 ! 282: 46390 if ( ivcomp + 9999 ) 26390, 16390, 26390 ! 283: 16390 ivpass = ivpass + 1 ! 284: write (i02,80001) ivtnum ! 285: go to 6401 ! 286: 26390 ivfail = ivfail + 1 ! 287: ivcorr = -9999 ! 288: write (i02,80004) ivtnum, ivcomp ,ivcorr ! 289: 6401 continue ! 290: ivtnum = 640 ! 291: c ! 292: c **** test 640 **** ! 293: c test 640 - test of three real arrays that are equivalenced. ! 294: c one of the arrays is in common. the value 512 is set into one of ! 295: c the dimensioned array elements by an integer to real conversion ! 296: c assignment statement. ! 297: c ! 298: if (iczero) 36400, 6400, 36400 ! 299: 6400 continue ! 300: rade24(2,2) = 512 ! 301: ivcomp = radn22(2,2) ! 302: go to 46400 ! 303: 36400 ivdele = ivdele + 1 ! 304: write (i02,80003) ivtnum ! 305: if (iczero) 46400, 6411, 46400 ! 306: 46400 if ( ivcomp - 512 ) 26400, 16400, 26400 ! 307: 16400 ivpass = ivpass + 1 ! 308: write (i02,80001) ivtnum ! 309: go to 6411 ! 310: 26400 ivfail = ivfail + 1 ! 311: ivcorr = 512 ! 312: write (i02,80004) ivtnum, ivcomp ,ivcorr ! 313: 6411 continue ! 314: ivtnum = 641 ! 315: c ! 316: c **** test 641 **** ! 317: c test 641 - like test 640 only the other equivalenced array is ! 318: c tested for the value 512. ! 319: c ! 320: if (iczero) 36410, 6410, 36410 ! 321: 6410 continue ! 322: radn22(2,2) = 512 ! 323: ivcomp = rade23(2,2) ! 324: go to 46410 ! 325: 36410 ivdele = ivdele + 1 ! 326: write (i02,80003) ivtnum ! 327: if (iczero) 46410, 6421, 46410 ! 328: 46410 if ( ivcomp - 512 ) 26410, 16410, 26410 ! 329: 16410 ivpass = ivpass + 1 ! 330: write (i02,80001) ivtnum ! 331: go to 6421 ! 332: 26410 ivfail = ivfail + 1 ! 333: ivcorr = 512 ! 334: write (i02,80004) ivtnum, ivcomp ,ivcorr ! 335: 6421 continue ! 336: ivtnum = 642 ! 337: c ! 338: c **** test 642 **** ! 339: c test 642 - test of four integer variables that are equivalenced. ! 340: c one of the integer variables is in blank common. the value used ! 341: c is 3 set by an assignment statement. ! 342: c ! 343: if (iczero) 36420, 6420, 36420 ! 344: 6420 continue ! 345: icoe03 = 3 ! 346: ivcomp = icoe01 ! 347: go to 46420 ! 348: 36420 ivdele = ivdele + 1 ! 349: write (i02,80003) ivtnum ! 350: if (iczero) 46420, 6431, 46420 ! 351: 46420 if ( ivcomp - 3 ) 26420, 16420, 26420 ! 352: 16420 ivpass = ivpass + 1 ! 353: write (i02,80001) ivtnum ! 354: go to 6431 ! 355: 26420 ivfail = ivfail + 1 ! 356: ivcorr = 3 ! 357: write (i02,80004) ivtnum, ivcomp ,ivcorr ! 358: 6431 continue ! 359: ivtnum = 643 ! 360: c ! 361: c **** test 643 **** ! 362: c test 643 - like test 642 but another of the elements is tested ! 363: c by an arithmetic expression using the equivalenced elements. ! 364: c the value of all of the elements should inititially be 3 since ! 365: c they all should share the same storage location. icoe04 = 3+3+3+3 ! 366: c icoe04 = 12 then the element icoe02 is tested for the value 12. ! 367: c ! 368: if (iczero) 36430, 6430, 36430 ! 369: 6430 continue ! 370: icoe01 = 3 ! 371: icoe04 = icoe01 + icoe02 + icoe03 + icoe04 ! 372: ivcomp = icoe02 ! 373: go to 46430 ! 374: 36430 ivdele = ivdele + 1 ! 375: write (i02,80003) ivtnum ! 376: if (iczero) 46430, 6441, 46430 ! 377: 46430 if ( ivcomp - 12 ) 26430, 16430, 26430 ! 378: 16430 ivpass = ivpass + 1 ! 379: write (i02,80001) ivtnum ! 380: go to 6441 ! 381: 26430 ivfail = ivfail + 1 ! 382: ivcorr = 12 ! 383: write (i02,80004) ivtnum, ivcomp ,ivcorr ! 384: 6441 continue ! 385: ivtnum = 644 ! 386: c ! 387: c **** test 644 **** ! 388: c test 644 - test of equivalence with three real variables one ! 389: c of which is in blank common. the elements are set initially to .5 ! 390: c then all of the elements are used in an arithmetic expression ! 391: c rcoe01 =(.5 + .5 + .5) * 2. so rcoe01 = 3. element rcoe02 ! 392: c is tested for the value 3. ! 393: c ! 394: if (iczero) 36440, 6440, 36440 ! 395: 6440 continue ! 396: rcoe02 = 0.5 ! 397: rcoe01 = ( rcoe01 + rcoe02 + rcoe03 ) * 2. ! 398: ivcomp = rcoe02 ! 399: go to 46440 ! 400: 36440 ivdele = ivdele + 1 ! 401: write (i02,80003) ivtnum ! 402: if (iczero) 46440, 6451, 46440 ! 403: 46440 if ( ivcomp - 3 ) 26440, 16440, 26440 ! 404: 16440 ivpass = ivpass + 1 ! 405: write (i02,80001) ivtnum ! 406: go to 6451 ! 407: 26440 ivfail = ivfail + 1 ! 408: ivcorr = 3 ! 409: write (i02,80004) ivtnum, ivcomp ,ivcorr ! 410: 6451 continue ! 411: c ! 412: c write page footings and run summaries ! 413: 99999 continue ! 414: write (i02,90002) ! 415: write (i02,90006) ! 416: write (i02,90002) ! 417: write (i02,90002) ! 418: write (i02,90007) ! 419: write (i02,90002) ! 420: write (i02,90008) ivfail ! 421: write (i02,90009) ivpass ! 422: write (i02,90010) ivdele ! 423: c ! 424: c ! 425: c terminate routine execution ! 426: stop ! 427: c ! 428: c format statements for page headers ! 429: 90000 format (1h1) ! 430: 90002 format (1h ) ! 431: 90001 format (1h ,10x,34hfortran compiler validation system) ! 432: 90003 format (1h ,21x,11hversion 1.0) ! 433: 90004 format (1h ,10x,38hfor official use only - copyright 1978) ! 434: 90005 format (1h ,5x,4htest,5x,9hpass/fail, 5x,8hcomputed,8x,7hcorrect) ! 435: 90006 format (1h ,5x,46h----------------------------------------------) ! 436: 90011 format (1h ,18x,17hsubset level test) ! 437: c ! 438: c format statements for run summaries ! 439: 90008 format (1h ,15x,i5,19h errors encountered) ! 440: 90009 format (1h ,15x,i5,13h tests passed) ! 441: 90010 format (1h ,15x,i5,14h tests deleted) ! 442: c ! 443: c format statements for test results ! 444: 80001 format (1h ,4x,i5,7x,4hpass) ! 445: 80002 format (1h ,4x,i5,7x,4hfail) ! 446: 80003 format (1h ,4x,i5,7x,7hdeleted) ! 447: 80004 format (1h ,4x,i5,7x,4hfail,10x,i6,9x,i6) ! 448: 80005 format (1h ,4x,i5,7x,4hfail,4x,e12.5,3x,e12.5) ! 449: c ! 450: 90007 format (1h ,20x,20hend of program fm023) ! 451: end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.