1c comment section 2c 3c fm006 4c 5c this routine tests arithmetic assignment statements of 6c the form 7c integer variable = integer constant 8c integer variable = integer variable 9c the integer constant may be unsigned, positive or negative. 10c 11c an integer datum is always an exact representation of an 12c integer value. it may assume positive, negative and zero values. 13c it may only assume integral values. 14c 15c an integer constant is written as a nonempty string of digits. 16c the constant is the digit string interpreted as a decimal number. 17c 18c this routine also contains tests which check on the use of 19c at least 16 bits for representing integer data values. the 20c constant values 32767 and -32766 are used in these tests. 21c 22c references 23c american national standard programming language fortran, 24c x3.9-1978 25c 26c section 4.3, integer type 27c section 4.3.1, integer constant 28c section 10.1, arithmetic assignment statements 29c 30c 31c ********************************************************** 32c 33c a compiler validation system for the fortran language 34c based on specifications as defined in american national standard 35c programming language fortran x3.9-1978, has been developed by the 36c federal cobol compiler testing service. the fortran compiler 37c validation system (fcvs) consists of audit routines, their related 38c data, and an executive system. each audit routine is a fortran 39c program, subprogram or function which includes tests of specific 40c language elements and supporting procedures indicating the result 41c of executing these tests. 42c 43c this particular program/subprogram/function contains features 44c found only in the subset as defined in x3.9-1978. 45c 46c suggestions and comments should be forwarded to - 47c 48c department of the navy 49c federal cobol compiler testing service 50c washington, d.c. 20376 51c 52c ********************************************************** 53c 54c 55c 56c initialization section 57c 58c initialize constants 59c ************** 60c i01 contains the logical unit number for the card reader. 61 i01 = 5 62c i02 contains the logical unit number for the printer. 63 i02 = 6 64c system environment section 65c 66cx010 this card is replaced by contents of fexec x-010 control card. 67c the cx010 card is for overriding the program default i01 = 5 68c (unit number for card reader). 69cx011 this card is replaced by contents of fexec x-011 control card. 70c the cx011 card is for systems which require additional 71c fortran statements for files associated with cx010 above. 72c 73cx020 this card is replaced by contents of fexec x-020 control card. 74c the cx020 card is for overriding the program default i02 = 6 75c (unit number for printer). 76cx021 this card is replaced by contents of fexec x-021 control card. 77c the cx021 card is for systems which require additional 78c fortran statements for files associated with cx020 above. 79c 80 ivpass=0 81 ivfail=0 82 ivdele=0 83 iczero=0 84c 85c write page headers 86 write (i02,90000) 87 write (i02,90001) 88 write (i02,90002) 89 write (i02, 90002) 90 write (i02,90003) 91 write (i02,90002) 92 write (i02,90004) 93 write (i02,90002) 94 write (i02,90011) 95 write (i02,90002) 96 write (i02,90002) 97 write (i02,90005) 98 write (i02,90006) 99 write (i02,90002) 100c test section 101c 102c arithmetic assignment statement 103c 104c test 50 through test 61 contain statement of form 105c integer variable = integer constant 106c 107c tests 50 through 53 contain unsigned integer constant. 108c 109 501 continue 110 ivtnum = 50 111c 112c **** test 50 **** 113c 114 if (iczero) 30500, 500, 30500 115 500 continue 116 ivcomp=3 117 go to 40500 11830500 ivdele = ivdele + 1 119 write (i02,80003) ivtnum 120 if (iczero) 40500, 511, 40500 12140500 if (ivcomp - 3) 20500, 10500, 20500 12210500 ivpass = ivpass + 1 123 write (i02,80001) ivtnum 124 go to 511 12520500 ivfail = ivfail + 1 126 ivcorr = 3 127 write (i02,80004) ivtnum, ivcomp ,ivcorr 128 511 continue 129 ivtnum = 51 130c 131c **** test 51 **** 132c 133 if (iczero) 30510, 510, 30510 134 510 continue 135 ivcomp = 76 136 go to 40510 13730510 ivdele = ivdele + 1 138 write (i02,80003) ivtnum 139 if (iczero) 40510, 521, 40510 14040510 if (ivcomp - 76) 20510, 10510, 20510 14110510 ivpass = ivpass + 1 142 write (i02,80001) ivtnum 143 go to 521 14420510 ivfail = ivfail + 1 145 ivcorr = 76 146 write (i02,80004) ivtnum, ivcomp ,ivcorr 147 521 continue 148 ivtnum = 52 149c 150c **** test 52 **** 151c 152 if (iczero) 30520, 520, 30520 153 520 continue 154 ivcomp = 587 155 go to 40520 15630520 ivdele = ivdele + 1 157 write (i02,80003) ivtnum 158 if (iczero) 40520, 531, 40520 15940520 if (ivcomp - 587) 20520, 10520, 20520 16010520 ivpass = ivpass + 1 161 write (i02,80001) ivtnum 162 go to 531 16320520 ivfail = ivfail + 1 164 ivcorr = 587 165 write (i02,80004) ivtnum, ivcomp ,ivcorr 166 531 continue 167 ivtnum = 53 168c 169c **** test 53 **** 170c 171 if (iczero) 30530, 530, 30530 172 530 continue 173 ivcomp = 9999 174 go to 40530 17530530 ivdele = ivdele + 1 176 write (i02,80003) ivtnum 177 if (iczero) 40530, 541, 40530 17840530 if (ivcomp - 9999) 20530, 10530, 20530 17910530 ivpass = ivpass + 1 180 write (i02,80001) ivtnum 181 go to 541 18220530 ivfail = ivfail + 1 183 ivcorr = 9999 184 write (i02,80004) ivtnum, ivcomp ,ivcorr 185c 186c tests 54 through 57 contain positive signed integers 187c 188 541 continue 189 ivtnum = 54 190c 191c **** test 54 **** 192c 193 if (iczero) 30540, 540, 30540 194 540 continue 195 ivcomp = +3 196 go to 40540 19730540 ivdele = ivdele + 1 198 write (i02,80003) ivtnum 199 if (iczero) 40540, 551, 40540 20040540 if (ivcomp - 3) 20540, 10540, 20540 20110540 ivpass = ivpass + 1 202 write (i02,80001) ivtnum 203 go to 551 20420540 ivfail = ivfail + 1 205 ivcorr = 3 206 write (i02,80004) ivtnum, ivcomp ,ivcorr 207 551 continue 208 ivtnum = 55 209c 210c **** test 55 **** 211c 212 if (iczero) 30550, 550, 30550 213 550 continue 214 ivcomp = +76 215 go to 40550 21630550 ivdele = ivdele + 1 217 write (i02,80003) ivtnum 218 if (iczero) 40550, 561, 40550 21940550 if (ivcomp - 76) 20550, 10550, 20550 22010550 ivpass = ivpass + 1 221 write (i02,80001) ivtnum 222 go to 561 22320550 ivfail = ivfail + 1 224 ivcorr = 76 225 write (i02,80004) ivtnum, ivcomp ,ivcorr 226 561 continue 227 ivtnum = 56 228c 229c **** test 56 **** 230c 231 if (iczero) 30560, 560, 30560 232 560 continue 233 ivcomp = +587 234 go to 40560 23530560 ivdele = ivdele + 1 236 write (i02,80003) ivtnum 237 if (iczero) 40560, 571, 40560 23840560 if (ivcomp - 587) 20560, 10560, 20560 23910560 ivpass = ivpass + 1 240 write (i02,80001) ivtnum 241 go to 571 24220560 ivfail = ivfail + 1 243 ivcorr = 587 244 write (i02,80004) ivtnum, ivcomp ,ivcorr 245 571 continue 246 ivtnum = 57 247c 248c **** test 57 **** 249c 250 if (iczero) 30570, 570, 30570 251 570 continue 252 ivcomp = +9999 253 go to 40570 25430570 ivdele = ivdele + 1 255 write (i02,80003) ivtnum 256 if (iczero) 40570, 581, 40570 25740570 if (ivcomp - 9999) 20570, 10570, 20570 25810570 ivpass = ivpass + 1 259 write (i02,80001) ivtnum 260 go to 581 26120570 ivfail = ivfail + 1 262 ivcorr = 9999 263 write (i02,80004) ivtnum, ivcomp ,ivcorr 264c 265c tests 58 through 61 contain signed negative integers 266c 267 581 continue 268 ivtnum = 58 269c 270c **** test 58 **** 271c 272 if (iczero) 30580, 580, 30580 273 580 continue 274 ivcomp = -3 275 go to 40580 27630580 ivdele = ivdele + 1 277 write (i02,80003) ivtnum 278 if (iczero) 40580, 591, 40580 27940580 if (ivcomp + 3) 20580, 10580, 20580 28010580 ivpass = ivpass + 1 281 write (i02,80001) ivtnum 282 go to 591 28320580 ivfail = ivfail + 1 284 ivcorr = -3 285 write (i02,80004) ivtnum, ivcomp ,ivcorr 286 591 continue 287 ivtnum = 59 288c 289c **** test 59 **** 290c 291 if (iczero) 30590, 590, 30590 292 590 continue 293 ivcomp = -76 294 go to 40590 29530590 ivdele = ivdele + 1 296 write (i02,80003) ivtnum 297 if (iczero) 40590, 601, 40590 29840590 if (ivcomp + 76) 20590, 10590, 20590 29910590 ivpass = ivpass + 1 300 write (i02,80001) ivtnum 301 go to 601 30220590 ivfail = ivfail + 1 303 ivcorr = -76 304 write (i02,80004) ivtnum, ivcomp ,ivcorr 305 601 continue 306 ivtnum = 60 307c 308c **** test 60 **** 309c 310 if (iczero) 30600, 600, 30600 311 600 continue 312 ivcomp = -587 313 go to 40600 31430600 ivdele = ivdele + 1 315 write (i02,80003) ivtnum 316 if (iczero) 40600, 611, 40600 31740600 if (ivcomp + 587) 20600,10600,20600 31810600 ivpass = ivpass + 1 319 write (i02,80001) ivtnum 320 go to 611 32120600 ivfail = ivfail + 1 322 ivcorr = -587 323 write (i02,80004) ivtnum, ivcomp ,ivcorr 324 611 continue 325 ivtnum = 61 326c 327c **** test 61 **** 328c 329 if (iczero) 30610, 610, 30610 330 610 continue 331 ivcomp = -9999 332 go to 40610 33330610 ivdele = ivdele + 1 334 write (i02,80003) ivtnum 335 if (iczero) 40610, 621, 40610 33640610 if (ivcomp + 9999) 20610, 10610, 20610 33710610 ivpass = ivpass + 1 338 write (i02,80001) ivtnum 339 go to 621 34020610 ivfail = ivfail + 1 341 ivcorr = -9999 342 write (i02,80004) ivtnum, ivcomp ,ivcorr 343c 344c test 62 through test 73 contain statement of form 345c integer variable = integer variable 346c 347c tests 62 through 65 contain unsigned values. 348c 349 621 continue 350 ivtnum = 62 351c 352c **** test 62 **** 353c 354 if (iczero) 30620, 620, 30620 355 620 continue 356 ivon01 = 3 357 ivcomp = ivon01 358 go to 40620 35930620 ivdele = ivdele + 1 360 write (i02,80003) ivtnum 361 if (iczero) 40620, 631, 40620 36240620 if (ivcomp - 3) 20620, 10620, 20620 36310620 ivpass = ivpass + 1 364 write (i02,80001) ivtnum 365 go to 631 36620620 ivfail = ivfail + 1 367 ivcorr = 3 368 write (i02,80004) ivtnum, ivcomp ,ivcorr 369 631 continue 370 ivtnum = 63 371c 372c **** test 63 **** 373c 374 if (iczero) 30630, 630, 30630 375 630 continue 376 ivon01 = 76 377 ivcomp = ivon01 378 go to 40630 37930630 ivdele = ivdele + 1 380 write (i02,80003) ivtnum 381 if (iczero) 40630, 641, 40630 38240630 if (ivcomp - 76) 20630, 10630, 20630 38310630 ivpass = ivpass + 1 384 write (i02,80001) ivtnum 385 go to 641 38620630 ivfail = ivfail + 1 387 ivcorr = 76 388 write (i02,80004) ivtnum, ivcomp ,ivcorr 389 641 continue 390 ivtnum = 64 391c 392c **** test 64 **** 393c 394 if (iczero) 30640, 640, 30640 395 640 continue 396 ivon01 = 587 397 ivcomp = ivon01 398 go to 40640 39930640 ivdele = ivdele + 1 400 write (i02,80003) ivtnum 401 if (iczero) 40640, 651, 40640 40240640 if (ivcomp - 587) 20640, 10640, 20640 40310640 ivpass = ivpass + 1 404 write (i02,80001) ivtnum 405 go to 651 40620640 ivfail = ivfail + 1 407 ivcorr = 587 408 write (i02,80004) ivtnum, ivcomp ,ivcorr 409 651 continue 410 ivtnum = 65 411c 412c **** test 65 **** 413c 414 if (iczero) 30650, 650, 30650 415 650 continue 416 ivon01 = 9999 417 ivcomp = ivon01 418 go to 40650 41930650 ivdele = ivdele + 1 420 write (i02,80003) ivtnum 421 if (iczero) 40650, 661, 40650 42240650 if (ivcomp - 9999) 20650, 10650, 20650 42310650 ivpass = ivpass + 1 424 write (i02,80001) ivtnum 425 go to 661 42620650 ivfail = ivfail + 1 427 ivcorr = 9999 428 write (i02,80004) ivtnum, ivcomp ,ivcorr 429c 430c tests 66 through 69 contain positive values. 431c 432 661 continue 433 ivtnum = 66 434c 435c **** test 66 **** 436c 437 if (iczero) 30660, 660, 30660 438 660 continue 439 ivon01 = +3 440 ivcomp = ivon01 441 go to 40660 44230660 ivdele = ivdele + 1 443 write (i02,80003) ivtnum 444 if (iczero) 40660, 671, 40660 44540660 if (ivcomp - 3) 20660,10660,20660 44610660 ivpass = ivpass + 1 447 write (i02,80001) ivtnum 448 go to 671 44920660 ivfail = ivfail + 1 450 ivcorr = 3 451 write (i02,80004) ivtnum, ivcomp ,ivcorr 452 671 continue 453 ivtnum = 67 454c 455c **** test 67 **** 456c 457 if (iczero) 30670, 670, 30670 458 670 continue 459 ivon01 = +76 460 ivcomp = ivon01 461 go to 40670 46230670 ivdele = ivdele + 1 463 write (i02,80003) ivtnum 464 if (iczero) 40670, 681, 40670 46540670 if (ivcomp - 76) 20670, 10670, 20670 46610670 ivpass = ivpass + 1 467 write (i02,80001) ivtnum 468 go to 681 46920670 ivfail = ivfail + 1 470 ivcorr = 76 471 write (i02,80004) ivtnum, ivcomp ,ivcorr 472 681 continue 473 ivtnum = 68 474c 475c **** test 68 **** 476c 477 if (iczero) 30680, 680, 30680 478 680 continue 479 ivon01 = +587 480 ivcomp = ivon01 481 go to 40680 48230680 ivdele = ivdele + 1 483 write (i02,80003) ivtnum 484 if (iczero) 40680, 691, 40680 48540680 if (ivcomp - 587) 20680, 10680, 20680 48610680 ivpass = ivpass + 1 487 write (i02,80001) ivtnum 488 go to 691 48920680 ivfail = ivfail + 1 490 ivcorr = 587 491 write (i02,80004) ivtnum, ivcomp ,ivcorr 492 691 continue 493 ivtnum = 69 494c 495c **** test 69 **** 496c 497 if (iczero) 30690, 690, 30690 498 690 continue 499 ivon01 = +9999 500 ivcomp = ivon01 501 go to 40690 50230690 ivdele = ivdele + 1 503 write (i02,80003) ivtnum 504 if (iczero) 40690, 701, 40690 50540690 if (ivcomp - 9999) 20690, 10690, 20690 50610690 ivpass = ivpass + 1 507 write (i02,80001) ivtnum 508 go to 701 50920690 ivfail = ivfail + 1 510 ivcorr = 9999 511 write (i02,80004) ivtnum, ivcomp ,ivcorr 512c 513c tests 70 through 73 contain negative values. 514c 515 701 continue 516 ivtnum = 70 517c 518c **** test 70 **** 519c 520 if (iczero) 30700, 700, 30700 521 700 continue 522 ivon01 = -3 523 ivcomp = ivon01 524 go to 40700 52530700 ivdele = ivdele + 1 526 write (i02,80003) ivtnum 527 if (iczero) 40700, 711, 40700 52840700 if (ivcomp + 3) 20700, 10700, 20700 52910700 ivpass = ivpass + 1 530 write (i02,80001) ivtnum 531 go to 711 53220700 ivfail = ivfail + 1 533 ivcorr = -3 534 write (i02,80004) ivtnum, ivcomp ,ivcorr 535 711 continue 536 ivtnum = 71 537c 538c **** test 71 **** 539c 540 if (iczero) 30710, 710, 30710 541 710 continue 542 ivon01 = -76 543 ivcomp = ivon01 544 go to 40710 54530710 ivdele = ivdele + 1 546 write (i02,80003) ivtnum 547 if (iczero) 40710, 721, 40710 54840710 if (ivcomp + 76) 20710, 10710, 20710 54910710 ivpass = ivpass + 1 550 write (i02,80001) ivtnum 551 go to 721 55220710 ivfail = ivfail + 1 553 ivcorr = -76 554 write (i02,80004) ivtnum, ivcomp ,ivcorr 555 721 continue 556 ivtnum = 72 557c 558c **** test 72 **** 559c 560 if (iczero) 30720, 720, 30720 561 720 continue 562 ivon01 = -587 563 ivcomp = ivon01 564 go to 40720 56530720 ivdele = ivdele + 1 566 write (i02,80003) ivtnum 567 if (iczero) 40720, 731, 40720 56840720 if (ivcomp + 587) 20720, 10720, 20720 56910720 ivpass = ivpass + 1 570 write (i02,80001) ivtnum 571 go to 731 57220720 ivfail = ivfail + 1 573 ivcorr = -587 574 write (i02,80004) ivtnum, ivcomp ,ivcorr 575 731 continue 576 ivtnum = 73 577c 578c **** test 73 **** 579c 580 if (iczero) 30730, 730, 30730 581 730 continue 582 ivon01 = -9999 583 ivcomp = ivon01 584 go to 40730 58530730 ivdele = ivdele + 1 586 write (i02,80003) ivtnum 587 if (iczero) 40730, 741, 40730 58840730 if (ivcomp + 9999) 20730, 10730, 20730 58910730 ivpass = ivpass + 1 590 write (i02,80001) ivtnum 591 go to 741 59220730 ivfail = ivfail + 1 593 ivcorr = -9999 594 write (i02,80004) ivtnum, ivcomp ,ivcorr 595c 596c tests 74 through 79 check that at least 16 bits are used in the 597c internal representation of an integer datum. this includes one 598c bit for the sign. the largest integer used is 32767 =2**15 - 1, 599c and the smallest integer used is -32766. 600c 601 741 continue 602 ivtnum = 74 603c 604c **** test 74 **** 605c unsigned constant 32767 606c 607 if (iczero) 30740, 740, 30740 608 740 continue 609 ivcomp = 32767 610 go to 40740 61130740 ivdele = ivdele + 1 612 write (i02,80003) ivtnum 613 if (iczero) 40740, 751, 40740 61440740 if (ivcomp - 32767) 20740, 10740, 20740 61510740 ivpass = ivpass + 1 616 write (i02,80001) ivtnum 617 go to 751 61820740 ivfail = ivfail + 1 619 ivcorr = 32767 620 write (i02,80004) ivtnum, ivcomp ,ivcorr 621 751 continue 622 ivtnum = 75 623c 624c **** test 75 **** 625c signed positive constant +32767 626c 627 if (iczero) 30750, 750, 30750 628 750 continue 629 ivcomp = +32767 630 go to 40750 63130750 ivdele = ivdele + 1 632 write (i02,80003) ivtnum 633 if (iczero) 40750, 761, 40750 63440750 if (ivcomp - 32767) 20750, 10750, 20750 63510750 ivpass = ivpass + 1 636 write (i02,80001) ivtnum 637 go to 761 63820750 ivfail = ivfail + 1 639 ivcorr = 32767 640 write (i02,80004) ivtnum, ivcomp ,ivcorr 641 761 continue 642 ivtnum = 76 643c 644c **** test 76 **** 645c signed negative constant -32766 646c 647 if (iczero) 30760, 760, 30760 648 760 continue 649 ivcomp = - 32766 650 go to 40760 65130760 ivdele = ivdele + 1 652 write (i02,80003) ivtnum 653 if (iczero) 40760, 771, 40760 65440760 if (ivcomp + 32766) 20760, 10760, 20760 65510760 ivpass = ivpass + 1 656 write (i02,80001) ivtnum 657 go to 771 65820760 ivfail = ivfail + 1 659 ivcorr = -32766 660 write (i02,80004) ivtnum, ivcomp ,ivcorr 661 771 continue 662 ivtnum = 77 663c 664c **** test 77 **** 665c 666 if (iczero) 30770, 770, 30770 667 770 continue 668 ivon01 = 32767 669 ivcomp = ivon01 670 go to 40770 67130770 ivdele = ivdele + 1 672 write (i02,80003) ivtnum 673 if (iczero) 40770, 781, 40770 67440770 if (ivcomp - 32767) 20770, 10770, 20770 67510770 ivpass = ivpass + 1 676 write (i02,80001) ivtnum 677 go to 781 67820770 ivfail = ivfail + 1 679 ivcorr = 32767 680 write (i02,80004) ivtnum, ivcomp ,ivcorr 681 781 continue 682 ivtnum = 78 683c 684c **** test 78 **** 685c 686 if (iczero) 30780, 780, 30780 687 780 continue 688 ivon01 = +32767 689 ivcomp = ivon01 690 go to 40780 69130780 ivdele = ivdele + 1 692 write (i02,80003) ivtnum 693 if (iczero) 40780, 791, 40780 69440780 if (ivcomp - 32767) 20780, 10780, 20780 69510780 ivpass = ivpass + 1 696 write (i02,80001) ivtnum 697 go to 791 69820780 ivfail = ivfail + 1 699 ivcorr = 32767 700 write (i02,80004) ivtnum, ivcomp ,ivcorr 701 791 continue 702 ivtnum = 79 703c 704c **** test 79 **** 705c 706 if (iczero) 30790, 790, 30790 707 790 continue 708 ivon01 = -32766 709 ivcomp=ivon01 710 go to 40790 71130790 ivdele = ivdele + 1 712 write (i02,80003) ivtnum 713 if (iczero) 40790, 801, 40790 71440790 if (ivcomp + 32766) 20790, 10790, 20790 71510790 ivpass = ivpass + 1 716 write (i02,80001) ivtnum 717 go to 801 71820790 ivfail = ivfail + 1 719 ivcorr = -32766 720 write (i02,80004) ivtnum, ivcomp ,ivcorr 721 801 continue 722c 723c write page footings and run summaries 72499999 continue 725 write (i02,90002) 726 write (i02,90006) 727 write (i02,90002) 728 write (i02,90002) 729 write (i02,90007) 730 write (i02,90002) 731 write (i02,90008) ivfail 732 write (i02,90009) ivpass 733 write (i02,90010) ivdele 734c 735c 736c terminate routine execution 737 stop 738c 739c format statements for page headers 74090000 format (1h1) 74190002 format (1h ) 74290001 format (1h ,10x,34hfortran compiler validation system) 74390003 format (1h ,21x,11hversion 1.0) 74490004 format (1h ,10x,38hfor official use only - copyright 1978) 74590005 format (1h ,5x,4htest,5x,9hpass/fail, 5x,8hcomputed,8x,7hcorrect) 74690006 format (1h ,5x,46h----------------------------------------------) 74790011 format (1h ,18x,17hsubset level test) 748c 749c format statements for run summaries 75090008 format (1h ,15x,i5,19h errors encountered) 75190009 format (1h ,15x,i5,13h tests passed) 75290010 format (1h ,15x,i5,14h tests deleted) 753c 754c format statements for test results 75580001 format (1h ,4x,i5,7x,4hpass) 75680002 format (1h ,4x,i5,7x,4hfail) 75780003 format (1h ,4x,i5,7x,7hdeleted) 75880004 format (1h ,4x,i5,7x,4hfail,10x,i6,9x,i6) 75980005 format (1h ,4x,i5,7x,4hfail,4x,e12.5,3x,e12.5) 760c 76190007 format (1h ,20x,20hend of program fm006) 762 end 763