C***************************************************************************** C C Test of Arithmetic syslib routines. C Importable Functions C C----------------------------------------------------------------------------- C C Author : John Malcolmson C Date : June 1986 C Language : Fortran 77 C Note : Uses subroutines imported from both syslib and RTNS C libraries. C C***************************************************************************** C--------------------------------- AJFLT ------------------------------------- Function TstAjflt Integer*4 TstAjflt Real*4 AJFLT Real*4 Value Integer*4 i Call CenterString( '--- Testing AJFLT ---\' ) Call WriteLn Call CenterString( 'Integer*4 to Real*4 w/o result codes\' ) Call WriteLn TstAjflt = 0 Value = 0.0 DO 10 i = 0, 1000 Value = Value + AJFLT( i ) 10 Continue IF ( Value .ne. 500500.0 ) THEN Call MtFail( 'valsum', 1 ) Call WriteReal( 500500.0, 10, 1 ) Call WriteReal( Value, 10, 1 ) Call WriteLn TstAjflt = TstAjflt + 2**1 END IF Value = 0.0 DO 20 i = -1000, 0 Value = Value + AJFLT( i ) 20 Continue IF ( Value .ne. -500500.0 ) THEN Call MtFail( 'valsum', 2 ) Call WriteReal( -500500.0, 10, 1 ) Call WriteReal( Value, 10, 1 ) Call WriteLn TstAjflt = TstAjflt + 2**2 END IF Value = 0.0 DO 30 i = -1000, 1000 Value = Value + AJFLT( i ) 30 Continue IF ( Value .ne. 0.0 ) THEN Call MtFail( 'valsum', 3 ) Call WriteReal( 0.0, 10, 1 ) Call WriteReal( Value, 10, 1 ) Call WriteLn TstAjflt = TstAjflt + 2**3 END IF Call TestFail( TstAjflt ) Call CenterString( '--- Testing AJFLT completed ---\' ) Call WriteLn Call WriteLn Return END C----------------------------------------------------------------------------- C--------------------------------- DJFLT ------------------------------------- Function TstDjflt Integer*4 TstDjflt Real*8 DJFLT Real*8 Value Integer*4 i Call CenterString( '--- Testing DJFLT ---\' ) Call WriteLn Call CenterString( 'Integer*4 to Real*8 w/o result codes\' ) Call WriteLn TstDjflt = 0.0 Value = 0.0 DO 10 i = 0, 1000 Value = Value + DJFLT( i ) 10 Continue IF ( Value .ne. 500500.0 ) THEN Call MtFail( 'valsum', 1 ) Call WriteDfloat( 500500.0, 10, 1 ) Call WriteDfloat( Value, 10, 1 ) Call WriteLn TstDjflt = TstDjflt + 2**1 END IF Value = 0.0 DO 20 i = -1000, 0 Value = Value + DJFLT( i ) 20 Continue IF ( Value .ne. -500500.0 ) THEN Call MtFail( 'valsum', 2 ) Call WriteDfloat( -500500.0, 10, 1 ) Call WriteDfloat( Value, 10, 1 ) Call WriteLn TstDjflt = TstDjflt + 2**2 END IF Value = 0.0 DO 30 i = -1000, 1000 Value = Value + DJFLT( i ) 30 Continue IF ( Value .ne. 0.0 ) THEN Call MtFail( 'valsum', 3 ) Call WriteDfloat( 0.0, 10, 1 ) Call WriteDfloat( Value, 10, 1 ) Call WriteLn TstDjflt = TstDjflt + 2**3 END IF Call TestFail( TstDjflt ) Call CenterString( '--- Testing DJFLT completed ---\' ) Call WriteLn Call writeLn Return END C----------------------------------------------------------------------------- C--------------------------------- IAJFLT ------------------------------------ Function TstIAjflt Integer*4 TstIAjflt Integer*2 IAJFLT Integer*2 errval, err Real*4 Value, temp Integer*4 i, failval Logical fail2, fail4 Call CenterString( '--- Testing IAJFLT ---\' ) Call WriteLn Call CenterString( 'Integer*4 to Real*4 with result codes\' ) Call WriteLn TstIAjflt = 0 Value = 0.0 err = 0 fail2 = .FALSE. DO 10 i = 1, 1000 err = IAJFLT( i, temp ) IF ((err .ne. 1) .and. (fail2 .eq. .false.))THEN fail2 = .TRUE. Failval = i errval = err END IF Value = Value + temp 10 Continue IF ( Value .ne. 500500.0 ) THEN Call MtFail( 'valsum', 1 ) Call WriteReal( 500500.0, 10, 1 ) Call WriteReal( Value, 10, 1 ) Call WriteLn TstIAjflt = TstIAjflt + 2**1 END IF IF (fail2 .eq. .TRUE.) THEN Call IRsltFail( 2 ) Call WriteInt( failval, 6 ) Call Write2Int( 1, 10 ) Call Write2Int( errval, 10 ) Call WriteLn TstIAjflt = TstIAjflt + 2**2 END IF Value = 0.0 err = 0 fail4 = .False. DO 20 i = -1000, -1 err = IAJFLT( i, temp ) IF ((err .ne. -1) .and. (fail4 .eq. .false.))THEN fail4 = .TRUE. Failval = i Errval = err END IF Value = Value + temp 20 Continue IF (Value .ne. -500500.0) THEN Call MtFail( 'valsum', 3 ) Call WriteReal( -500500.0, 10, 1 ) Call WriteReal( Value, 10, 1 ) Call WriteLn TstIAjflt = TstIAjflt + 2**3 END IF IF (fail4) THEN Call IRsltFail( 4 ) Call WriteInt( failval, 6 ) Call Write2Int( -1, 10 ) Call Write2Int( errval, 10 ) Call WriteLn TstIAjflt = TstIAjflt + 2**4 END IF Value = 0.0 DO 30 i= -1000, 1000 err = IAJFLT( i, temp ) Value = Value + temp 30 Continue IF (Value .ne. 0.0) THEN Call MtFail( 'valsum', 5 ) Call WriteReal( 0.0, 10, 1 ) Call WriteReal( Value, 10, 1 ) Call WriteLn TstIAjflt = TstIAJflt + 2**5 END IF i = 0 err = IAJFLT( i, value ) IF (err .ne. 0) THEN Call RsltFail( 6 ) Call Write2Int( 0, 10 ) Call Write2Int( err, 10 ) Call WriteLn TstIAjflt = TstIAjflt + 2**6 END IF C i = -2097997979 C err = IAJFLT( i, value ) C IF (err .ne. -2) THEN C Call RsltFail( 7 ) C Call Write2Int( -2, 10 ) C Call Write2Int( err, 10 ) C Call WriteLn C TstIAjflt = TstIAjflt + 2**7 C END IF Call TestFail( TstIAjflt ) Call CenterString( '--- Testing IAJFLT completed ---\' ) Call WriteLn Call writeLn Return END C----------------------------------------------------------------------------- C--------------------------------- IDJFLT ------------------------------------ Function TstIDjflt Integer*4 TstIDjflt Integer*2 IDJFLT Integer*2 errval, err Real*8 Value, temp Integer*4 i, failval Logical fail2, fail4 Call CenterString( '--- Testing IDJFLT ---\' ) Call WriteLn Call CenterString( 'Integer*4 to Real*8 with result codes\' ) Call WriteLn TstDAjflt = 0 Value = 0.0 err = 0 fail2 = .FALSE. DO 10 i = 1, 1000 err = IDJFLT( i, temp ) IF ((err .ne. 1) .and. (fail2 .eq. .false.))THEN fail2 = .TRUE. Failval = i errval = err END IF Value = Value + temp 10 Continue IF ( Value .ne. 500500.0 ) THEN Call MtFail( 'valsum', 1 ) Call WriteDfloat( 500500.0, 10, 1 ) Call WriteDfloat( Value, 10, 1 ) Call WriteLn TstIDjflt = TstIDjflt + 2**1 END IF IF (fail2) THEN Call IRsltFail( 2 ) Call WriteInt( failval, 6 ) Call Write2Int( 1, 10 ) Call Write2Int( errval, 10 ) Call WriteLn TstIDjflt = TstIDjflt + 2**2 END IF Value = 0 err = 0 fail4 = .False. DO 20 i = -1000, -1 err = IDJFLT( i, temp ) IF ((err .ne. -1) .and. (fail4 .eq. .false.))THEN fail4 = .true. Failval = i Errval = err END IF Value = Value + temp 20 Continue IF (Value .ne. -500500.0) THEN Call MtFail( 'valsum', 3 ) Call WriteDfloat( -500500.0, 10, 1 ) Call WriteDfloat( Value, 10, 1 ) Call WriteLn TstIDjflt = TstIDjflt + 2**3 END IF IF (fail4) THEN Call IRsltFail( 4 ) Call WriteInt( failval, 6 ) Call Write2Int( -1, 10 ) Call Write2Int( errval, 10 ) Call WriteLn TstIDjflt = TstIDjflt + 2**4 END IF Value = 0 DO 30 i= -1000, 1000 err = IDJFLT( i, temp ) Value = Value + temp 30 Continue IF (Value .ne. 0.0) THEN Call MtFail( 'valsum', 5 ) Call WriteDfloat( 0.0, 10, 1 ) Call WriteDfloat( Value, 10, 1 ) Call WriteLn TstIDjflt = TstIDJflt + 2**5 END IF i = 0 err = IDJFLT( i, value ) IF (err .ne. 0) THEN Call RsltFail( 6 ) Call Write2Int( 0, 10 ) Call Write2Int( err, 10 ) Call WriteLn TstIDjflt = TstIDjflt + 2**6 END IF Call TestFail( TstIDjflt ) Call CenterString( '--- Testing IDJFLT completed ---\' ) Call WriteLn Call writeLn Return END C----------------------------------------------------------------------------- C--------------------------------- IJCVT ------------------------------------- Function TstIjcvt Integer*4 TstIjcvt Integer*2 IJCVT Integer*4 Value Integer*2 Result, count Integer*4 i Logical*1 Fconv, Flt, Fgt, Feq Integer*4 Findx, R1indx, R2indx Integer*2 Fres, R1err, R2err, R3err Call CenterString( '--- Testing IJCVT ---\' ) Call WriteLn Call CenterString( 'Integer*4 to Integer*2 with result codes\' ) Call WriteLn TstIjcvt = 0 Fconv = .TRUE. Flt = .TRUE. Feq = .TRUE. Fgt = .TRUE. Count = -1000 DO 10 i = -1000, 1000 err = IJCVT( i, Result ) IF ((Count .ne. Result) .and. (Fconv)) THEN Fconv = .FALSE. Findx = i Fres = Result END IF IF ((i .lt. 0) .and. (err .ne. -1) .and. (Flt)) THEN Flt = .FALSE. R1indx = i R1err = err END IF IF ((i .gt. 0) .and. (err .ne. 1) .and. (Fgt)) THEN Fgt = .FALSE. R2indx = i R2err = err END IF IF ((i .eq. 0) .and. (err .ne. 0) .and. (Feq)) THEN Feq = .FALSE. R3err = err END IF Count = Count + 1 10 Continue IF ( Fconv .ne. .TRUE. ) THEN Call MtFail( 'convrt', 1 ) Call WriteInt( Findx, 10 ) Call Write2Int( Fres, 10 ) Call WriteLn TstIjcvt = TstIjcvt + 2**1 END IF IF ( Flt .ne. .TRUE. ) THEN Call IRsltFail( 2 ) Call WriteInt( R1indx, 6 ) Call Write2Int( -1, 10 ) Call Write2Int( R1err, 10 ) Call WriteLn TstIjcvt = TstIjcvt + 2**2 END IF IF ( Feq .ne. .TRUE. ) THEN Call IRsltFail( 3 ) Call WriteInt( R2indx, 6 ) Call Write2Int( 0, 10 ) Call Write2Int( R2err, 10 ) Call WriteLn TstIjcvt = TstIjcvt + 2**3 END IF IF ( Fgt .ne. .TRUE. ) THEN Call IRsltFail( 4 ) Call WriteInt( R3indx, 6 ) Call Write2Int( 1, 10 ) Call Write2Int( R2err, 10 ) Call WriteLn TstIjcvt = TstIjcvt + 2**4 END IF Value = 64000 Result = 0 err = IJCVT(value, result) IF (err .ne. -2) THEN Call RsltFail( 5 ) Call Write2Int( -2, 10 ) Call Write2Int( err, 10 ) Call WriteLn TstIjcvt = TstIjcvt + 2**5 END IF Call TestFail( TstIjcvt ) Call CenterString( '--- Testing IJCVT completed ---\' ) Call WriteLn Call WriteLn Return END C----------------------------------------------------------------------------- C---------------------------------- JADD ------------------------------------- Function TstJadd Integer*4 TstJadd Integer*2 JADD Integer*4 Result, i Logical*1 Fadd, Fadd1, Flt, Fgt, Feq Integer*4 R1indx, R2indx Integer*4 Fexp, Fexp1 Integer*2 err, Fres, R1err, R2err, R3err Call CenterString( '--- Testing JADD ---\' ) Call WriteLn Call CenterString( 'Integer*4 + Integer*4 with result codes\') Call WriteLn TstJadd = 0 Fadd = .TRUE. Fadd1 = .TRUE. Flt = .TRUE. Feq = .TRUE. Fgt = .TRUE. DO 10 i = -1000, 1000 err = JADD( i, i, Result ) IF ((2*i .ne. Result) .and. (Fadd))THEN Fadd = .FALSE. Fexp = 2*i Fres = Result END IF IF ((i .lt. 0) .and. (err .ne. -1) .and. (Flt)) THEN Flt = .FALSE. R1indx = i R1err = err END IF IF ((i .gt. 0) .and. (err .ne. 1) .and. (Fgt)) THEN Fgt = .FALSE. R2indx = i R2err = err END IF IF ((i .eq. 0) .and. (err .ne. 0) .and. (Feq)) THEN Feq = .FALSE. R3err = err END IF err = JADD( i, -i, Result ) IF ((Result .ne. 0) .and. (Fadd1))THEN Fadd1 = .FALSE. Fexp1 = 0 Fres1 = Result END IF 10 Continue IF ( Fadd .ne. .TRUE. ) THEN Call MtFail( 'additn', 1 ) Call WriteInt( Fexp, 10 ) Call Write2Int( Fres, 10 ) Call WriteLn TstJadd = TstJadd + 2**1 END IF IF ( Flt .ne. .TRUE. ) THEN Call IRsltFail( 2 ) Call WriteInt( R1indx, 6 ) Call Write2Int( -1, 10 ) Call Write2Int( R1err, 10 ) Call WriteLn TstJadd = TstJadd + 2**2 END IF IF ( Feq .ne. .TRUE. ) THEN Call IRsltFail( 3 ) Call WriteInt( R2indx, 6 ) Call Write2Int( 0, 10 ) Call Write2Int( R2err, 10 ) Call WriteLn TstJadd = TstJadd + 2**3 END IF IF ( Fgt .ne. .TRUE. ) THEN Call IRsltFail( 3 ) Call WriteInt( R3indx, 6 ) Call Write2Int( 1, 10 ) Call Write2Int( R2err, 10 ) Call WriteLn TstJadd = TstJadd + 2**4 END IF i = -2147483648 err = JADD( i, i, result ) IF (err .ne. -2) THEN Call RsltFail( 5 ) Call Write2Int( -2, 10 ) Call Write2Int( err, 10 ) Call WriteLn TstJadd = TstJadd + 2**5 END IF IF ( Fadd1 .ne. .TRUE. ) THEN Call MtFail( 'additn', 6 ) Call WriteInt( Fexp1, 10 ) Call Write2Int( Fres1, 10 ) Call WriteLn TstJadd = TstJadd + 2**6 END IF Call TestFail( TstJadd ) Call CenterString( '--- Testing JADD completed ---\' ) Call WriteLn Call WriteLn Return END C----------------------------------------------------------------------------- C---------------------------------- JAFIX ------------------------------------ Function TstJafix Integer*2 JAFIX Integer*2 errval, err Integer*4 Value, temp Real*4 Count Integer*4 TstJafix Integer*4 i, failval Logical*1 fail2, fail4 Call CenterString( '--- Testing JAFIX ---\' ) Call WriteLn Call CenterString( 'Real*4 to Integer*4 with result codes\' ) Call WriteLn TstJafix = 0 Count = 1 Value = 0 err = 0 fail2 = .FALSE. DO 10 i = 1, 1000 err = JAFIX( Count, temp ) IF ((err .ne. 1) .and. (fail2 .eq. .false.))THEN fail2 = .true. Failval = i errval = err END IF Value = Value + temp Count = Count + 1 10 Continue IF ( Value .ne. 500500 ) THEN Call MtFail( 'sumval', 1 ) Call WriteInt( 500500, 10 ) Call WriteInt( Value, 10 ) Call WriteLn TstJafix = TstJafix + 2**1 END IF IF (fail2) THEN Call IRsltFail( 2 ) Call WriteInt( failval, 6 ) Call Write2Int( 1, 10 ) Call Write2Int( errval, 10 ) Call WriteLn TstJafix = TstJafix + 2**2 END IF Value = 0 err = 0 Count = -1000 fail4 = .False. DO 20 i = -1000, -1 err = JAFIX( Count, temp ) IF ((err .ne. -1) .and. (fail4 .eq. .false.))THEN fail4 = .true. Failval = i Errval = err END IF Value = Value + temp Count = Count + 1 20 Continue IF (Value .ne. -500500) THEN Call MtFail( 'sumval', 3 ) Call WriteInt( -500500, 10 ) Call WriteInt( Value, 10 ) Call WriteLn TstJafix = TstJafix + 2**3 END IF IF (fail4) THEN Call IRsltFail( 4 ) Call WriteInt( failval, 6 ) Call Write2Int( -1, 10 ) Call Write2Int( errval, 10 ) Call WriteLn TstJafix = TstJafix + 2**4 END IF Value = 0 Count = -1000 DO 30 i= -1000, 1000 err = JAFIX( Count, temp ) Value = Value + temp Count = Count + 1 30 Continue IF (Value .ne. 0) THEN Call MtFail( 'sumval', 5 ) Call WriteInt( 0, 10 ) Call WriteInt( Value, 10 ) Call WriteLn TstJafix = TstJafix + 2**5 END IF Count = 0 err = JAFIX( Count, value ) IF (err .ne. 0) THEN Call RsltFail( 6 ) Call Write2Int( 0, 10 ) Call Write2Int( err, 10 ) Call WriteLn TstJafix = TstJafix + 2**6 END IF Count = 1E+35 err = JAFIX( Count, value ) IF (err .ne. -2) THEN Call RsltFail( 7 ) Call Write2Int( -2, 10 ) Call Write2Int( err, 10 ) Call WriteLn TstJafix = TstJafix + 2**7 END IF Call TestFail( TstJafix ) Call CenterString( '--- Testing JAFIX completed ---\' ) Call WriteLn Call writeLn Return END C----------------------------------------------------------------------------- C---------------------------------- JDFIX ------------------------------------ Function TstJdfix Integer*2 JDFIX Integer*2 errval, err Integer*4 Value, temp Real*8 Count Integer*4 TstJdfix Integer*4 i, failval Logical fail2, fail4 Call CenterString( '--- Testing JDFIX ---\' ) Call WriteLn Call CenterString( 'Real*8 to Integer*4 with result codes\' ) Call WriteLn TstJdfix = 0 Count = 1 Value = 0 err = 0 fail2 = .FALSE. DO 10 i = 1, 1000 err = JDFIX( Count, temp ) IF ((err .ne. 1) .and. (fail2 .eq. .false.))THEN fail2 = .true. Failval = i errval = err END IF Value = Value + temp Count = Count + 1 10 Continue IF ( Value .ne. 500500 ) THEN Call MtFail( 'sumval', 1 ) Call WriteInt( 500500, 10 ) Call WriteInt( Value, 10 ) Call WriteLn TstJdfix = TstJdfix + 2**1 END IF IF (fail2) THEN Call IRsltFail( 2 ) Call WriteInt( failval, 6 ) Call Write2Int( 1, 10 ) Call Write2Int( errval, 10 ) Call WriteLn TstJdfix = TstJdfix + 2**2 END IF Value = 0 err = 0 Count = -1000 fail4 = .False. DO 20 i = -1000, -1 err = JDFIX( Count, temp ) IF ((err .ne. -1) .and. (fail4 .eq. .false.))THEN fail4 = .true. Failval = i Errval = err END IF Value = Value + temp Count = Count + 1 20 Continue IF (Value .ne. -500500) THEN Call MtFail( 'sumval', 3 ) Call WriteInt( -500500, 10 ) Call WriteInt( Value, 10 ) Call WriteLn TstJdfix = TstJdfix + 2**3 END IF IF (fail4) THEN Call IRsltFail( 2 ) Call WriteInt( failval, 6 ) Call Write2Int( -1, 10 ) Call Write2Int( errval, 10 ) Call WriteLn TstJdfix = TstJdfix + 2**4 END IF Value = 0 Count = -1000 DO 30 i= -1000, 1000 err = JDFIX( Count, temp ) Value = Value + temp Count = Count + 1 30 Continue IF (Value .ne. 0.0) THEN Call MtFail( 'sumval', 5 ) Call WriteInt( 0, 10 ) Call WriteInt( Value, 10 ) Call WriteLn TstJdfix = TstJdfix + 2**5 END IF Count = 0 err = JDFIX( Count, value ) IF (err .ne. 0) THEN Call RsltFail( 6 ) Call Write2Int( 0, 10 ) Call Write2Int( err, 10 ) Call WriteLn TstJdfix = TstJdfix + 2**6 END IF Count = 1E+35 err = JDFIX( Count, value ) IF (err .ne. -2) THEN Call RsltFail( 7 ) Call Write2Int( -2, 10 ) Call Write2Int( err, 10 ) Call WriteLn TstJdfix = TstJdfix + 2**7 END IF Call TestFail( TstJdfix ) Call CenterString( '--- Testing JDFIX completed ---\' ) Call WriteLn Call writeLn Return END C----------------------------------------------------------------------------- C----------------------------------- JCMP ------------------------------------ Function TstJcmp Integer*4 TstJcmp Integer*2 JCMP Integer*2 err, errv1, errv2 Integer*4 i, j, ival1, ival2, jval1, jval2 Logical Fail1, Fail2 Call CenterString( '--- Testing JCMP ---\' ) Call WriteLn Call CenterString( 'Integer*4 comparison with result codes\' ) Call WriteLn Fail1 = .TRUE. Fail2 = .TRUE. DO 20 i = -100, -1 DO 10 j = 0, 100 err = JCMP( 10*i, 10*j ) IF (( err .ne. -1 ) .and. (fail1)) THEN fail1 = .FALSE. ival1 = i jval1 = j errv1 = err END IF err = JCMP( j, i ) IF (( err .ne. 1 ) .and. (fail2)) THEN fail2 = .FALSE. ival2 = i jval2 = j errv2 = err END IF 10 Continue 20 Continue IF (fail1 .eq. .FALSE.) THEN Call WriteString( 'Failed comp on pass 1.',0,0) Call WriteString( ' -- I/J/Exp/Act => ',0,0) Call WriteInt( ival1, 6 ) Call WriteInt( jval1, 6 ) Call writeInt( -1, 3 ) Call Write2Int( errv1, 6 ) Call WriteLn TstJcmp = TstJcmp + 2**1 END IF IF (fail2 .eq. .FALSE.) THEN Call WriteString( 'Failed comp on pass 2.',0,0) Call WriteString( ' -- I/J/Exp/Act => ',0,0) Call WriteInt( ival2, 6 ) Call WriteInt( jval2, 6 ) Call writeInt( 1, 3 ) Call Write2Int( errv2, 6 ) Call WriteLn TstJcmp = TstJcmp + 2**2 END IF fail1 = .TRUE. DO 30 i = -1000, 1000 err = JCMP( i, i ) IF ((err .ne. 0).and.(fail1)) THEN fail1 = .FALSE. errv1 = err ival = i END IF 30 Continue IF (fail1 .eq. .FALSE.) THEN Call WriteString( 'Failed comp on pass 3.',0,0) Call WriteString( ' -- I/J/Exp/Act => ',0,0) Call WriteInt( ival1, 6 ) Call WriteInt( ival1, 6 ) Call writeInt( 0, 3 ) Call Write2Int( errv1, 6 ) Call WriteLn TstJcmp = TstJcmp + 2**3 END IF Call TestFail( TstJcmp ) Call CenterString( '--- Testing JCMP completed ---\' ) Call WriteLn Call writeLn Return END C----------------------------------------------------------------------------- C----------------------------------- JDIV ------------------------------------ Function TstJdiv Integer*4 TstJdiv Integer*2 JDIV Integer*2 err, errv1, errv2 Integer*4 i, j, resv3, ival1, ival2, ival3, ival4, resv4 Integer*4 Result, rem, remv3, remv4 Logical Fail1, Fail2, Fail3, Fail4 Call CenterString( '--- Testing JDIV ---\' ) Call WriteLn Call CenterString( 'Integer*4 division with result codes\' ) Call WriteLn Fail1 = .TRUE. Fail2 = .TRUE. Fail3 = .TRUE. Fail4 = .TRUE. DO 20 i = 1, 1000 err = JDIV( i*i, i, Result, rem ) IF (( err .ne. 1 ) .and. (fail1)) THEN fail1 = .FALSE. ival1 = i errv1 = err END IF IF (((Result .ne. i).or.(rem .ne.0)).and.(Fail3)) THEN fail3 = .FALSE. ival3 = i resv3 = Result remv3 = rem END IF err = JDIV( i, 2*i, Result, rem ) IF (((rem .ne. i).or.(Result .ne.0)).and.(Fail4)) THEN fail4 = .FALSE. ival4 = i resv4 = Result remv4 = rem END IF err = JDIV( i*i, -1, Result, rem ) IF (( err .ne. -1 ) .and. (fail2)) THEN fail2 = .FALSE. ival2 = i errv2 = err END IF 20 Continue IF (fail1 .eq. .FALSE.) THEN Call IRsltFail( 1 ) Call WriteInt( ival1, 6 ) Call writeInt( 1, 10 ) Call Write2Int( errv1, 10 ) Call WriteLn TstJdiv = TstJdiv + 2**1 END IF IF (fail2 .eq. .FALSE.) THEN Call IRsltFail( 2 ) Call WriteInt( ival2, 6 ) Call writeInt( -1, 10 ) Call Write2Int( errv2, 10 ) Call WriteLn TstJdiv = TstJdiv + 2**2 END IF IF (fail3 .eq. .FALSE.) THEN Call MtFail( 'divide', 3 ) Call WriteInt( Ival3, 6 ) Call WriteInt( resv3, 10 ) Call WriteInt( remv3, 10 ) CAll WriteLn TstJdiv = TstJdiv + 2**3 END IF i = 0 j = 5 err = JDIV( i, j, result, rem ) IF (err .ne. 0) THEN Call RsltFail( 4 ) Call write2Int( 0, 10 ) Call Write2Int( err, 10 ) Call WriteLn TstJdiv = TstJdiv + 2**4 END IF i = 5 j = 0 err = JDIV( i, j, result, rem ) IF (err .ne. -3) THEN Call RsltFail( 5 ) Call Write2Int( -3, 10 ) Call write2Int( err, 10 ) Call WriteLn TstJdiv = TstJdiv + 2**5 END IF IF (fail4 .eq. .FALSE.) THEN Call RsltFail( 6 ) Call WriteInt( Ival4, 10 ) C Call WriteInt( resv4, 10 ) Call WriteInt( remv4, 10 ) CAll WriteLn TstJdiv = TstJdiv + 2**3 END IF Call TestFail( TstJdiv ) Call CenterString( '--- Testing JDIV completed ---\' ) Call WriteLn Call writeLn Return END C----------------------------------------------------------------------------- C--------------------------------- JICVT ------------------------------------- Function TstJicvt Integer*4 TstJicvt Integer*2 JICVT Integer*2 Value Integer*4 Result, count, Fres Integer*2 i Logical Fconv, Flt, Fgt, Feq Integer*2 Findx, R1indx, R2indx Integer*2 R1err, R2err, R3err Call CenterString( '--- Testing JICVT ---\' ) Call WriteLn Call CenterString('Integer*2 to Integer*4 with result codes\') Call WriteLn TstJicvt = 0 Fconv = .TRUE. Flt = .TRUE. Feq = .TRUE. Fgt = .TRUE. Count = -1000 DO 10 i = -1000, 1000 err = JICVT( i, Result ) IF ((Count .ne. Result) .and. (Fconv))THEN Fconv = .FALSE. Findx = i Fres = Result END IF IF ((i .lt. 0) .and. (err .ne. -1) .and. (Flt)) THEN Flt = .FALSE. R1indx = i R1err = err END IF IF ((i .gt. 0) .and. (err .ne. 1) .and. (Fgt)) THEN Fgt = .FALSE. R2indx = i R2err = err END IF IF ((i .eq. 0) .and. (err .ne. 0) .and. (Feq)) THEN Feq = .FALSE. R3err = err END IF Count = Count + 1 10 Continue IF ( Fconv .ne. .TRUE. ) THEN Call MtFail( 'convrt', 1 ) Call Write2Int( Findx, 10 ) Call WriteInt( Fres, 10 ) Call WriteLn TstJicvt = TstJicvt + 2**1 END IF IF ( Flt .ne. .TRUE. ) THEN Call IRsltFail( 1 ) Call Write2Int( R1indx, 6 ) Call Write2Int( -1, 10 ) Call Write2Int( R1err, 10 ) Call WriteLn TstJicvt = TstJicvt + 2**2 END IF IF ( Feq .ne. .TRUE. ) THEN Call IRsltFail( 3 ) Call Write2Int( R2indx, 6 ) Call Write2Int( 0, 10 ) Call Write2Int( R2err, 10 ) Call WriteLn TstJicvt = TstJicvt + 2**3 END IF IF ( Fgt .ne. .TRUE. ) THEN Call IRsltFail( 4 ) Call Write2Int( R3indx, 6 ) Call Write2Int( 1, 10 ) Call Write2Int( R2err, 10 ) Call WriteLn TstJicvt = TstJicvt + 2**4 END IF Call TestFail( TstJicvt ) Call CenterString( '--- Testing JICVT completed ---\' ) Call WriteLn Call WriteLn Return END C----------------------------------------------------------------------------- C---------------------------------- JMOV ------------------------------------- Function TstJmov Integer*4 TstJmov Integer*2 JMOV Integer*4 i, Value, Result Logical Fmov, Flt, Fgt, Feq Integer*4 Findx, R1indx, R2indx, Fres Integer*2 R1err, R2err, R3err Call CenterString( '--- Testing JMOV ---\' ) Call WriteLn Call CenterString( 'Move Integer*4 to Integer*4 with result codes\' ) Call WriteLn TstIjcvt = 0 Fmov = .TRUE. Flt = .TRUE. Feq = .TRUE. Fgt = .TRUE. DO 10 i = -1000, 1000 err = JMOV( i, Result ) IF ((i .ne. Result) .and. (Fmov))THEN Fmov = .FALSE. Findx = i Fres = Result END IF IF ((i .lt. 0) .and. (err .ne. -1) .and. (Flt)) THEN Flt = .FALSE. R1indx = i R1err = err END IF IF ((i .gt. 0) .and. (err .ne. 1) .and. (Fgt)) THEN Fgt = .FALSE. R2indx = i R2err = err END IF IF ((i .eq. 0) .and. (err .ne. 0) .and. (Feq)) THEN Feq = .FALSE. R3err = err END IF 10 Continue IF ( Fmov .ne. .TRUE. ) THEN Call MtFail( 'move v', 1 ) Call WriteInt( Findx, 10 ) Call WriteInt( Fres, 10 ) Call WriteLn TstJmov = TstJmov + 2**1 END IF IF ( Flt .ne. .TRUE. ) THEN Call IRsltFail( 2 ) Call WriteInt( R1indx, 6 ) Call Write2Int( -1, 10 ) Call Write2Int( R1err, 10 ) Call WriteLn TstJmov = TstJmov + 2**2 END IF IF ( Feq .ne. .TRUE. ) THEN Call IRsltFail( 3 ) Call WriteInt( R2indx, 6 ) Call Write2Int( 0, 10 ) Call Write2Int( R2err, 10 ) Call WriteLn TstJmov = TstJmov + 2**3 END IF IF ( Fgt .ne. .TRUE. ) THEN Call IRsltFail( 4 ) Call WriteInt( R3indx, 6 ) Call Write2Int( 1, 10 ) Call Write2Int( R2err, 10 ) Call WriteLn TstJmov = TstJmov + 2**4 END IF Call TestFail( TstJmov ) Call CenterString( '--- Testing JMOV completed ---\' ) Call WriteLn Call WriteLn Return END C----------------------------------------------------------------------------- C---------------------------------- JMUL ------------------------------------- Function TstJMul Integer*4 TstJMul Integer*2 JMUL Integer*4 Result, i Logical*1 Fmul, Fmul1, Flt, Fgt, Feq Integer*4 R1indx, R2indx Integer*4 Fexp, Fexp1, Findx1 Integer*2 err, Fres, R1err, R2err, R3err Call CenterString( '--- Testing JMUL ---\' ) Call WriteLn Call CenterString( 'Integer*4 * Integer*4 with result codes\') Call WriteLn TstJmul = 0 Fmul = .TRUE. Fmul1 = .TRUE. Flt = .TRUE. Feq = .TRUE. Fgt = .TRUE. DO 10 i = -1000, 1000 err = JMUL( i, 2, Result ) IF ((i+i .ne. Result) .and. (Fmul))THEN FMul = .FALSE. Fexp = i+i Fres = Result END IF IF ((i .lt. 0) .and. (err .ne. -1) .and. (Flt)) THEN Flt = .FALSE. R1indx = i R1err = err END IF IF ((i .gt. 0) .and. (err .ne. 1) .and. (Fgt)) THEN Fgt = .FALSE. R2indx = i R2err = err END IF IF ((i .eq. 0) .and. (err .ne. 0) .and. (Feq)) THEN Feq = .FALSE. R3err = err END IF err = JMUL( 0, -i, Result ) IF ((err .ne. 0) .and. (Fmul1))THEN Fmul1 = .FALSE. Findx1 = i Fexp1 = 0 Fres1 = err END IF 10 Continue IF ( Fmul .ne. .TRUE. ) THEN Call MtFail( 'mult v', 1 ) Call WriteInt( Fexp, 10 ) Call Write2Int( Fres, 10 ) Call WriteLn TstJmul = TstJamul + 2**1 END IF IF ( Flt .ne. .TRUE. ) THEN Call IRsltFail( 2 ) Call WriteInt( R1indx, 6 ) Call Write2Int( -1, 10 ) Call Write2Int( R1err, 10 ) Call WriteLn TstJmul = TstJmul + 2**2 END IF IF ( Feq .ne. .TRUE. ) THEN Call IRsltFail( 3 ) Call WriteInt( R2indx, 6 ) Call Write2Int( 0, 10 ) Call Write2Int( R2err, 10 ) Call WriteLn TstJmul = TstJmul + 2**3 END IF IF ( Fgt .ne. .TRUE. ) THEN Call IRsltFail( 4 ) Call WriteInt( R3indx, 6 ) Call Write2Int( 1, 10 ) Call Write2Int( R2err, 10 ) Call WriteLn TstJmul = TstJmul + 2**4 END IF i = -2147483648 err = JMUL( i, i, result ) IF (err .ne. -2) THEN Call RsltFail( 5 ) Call Write2Int( -2, 10 ) Call Write2Int( err, 10 ) Call WriteLn TstJmul = TstJmul + 2**5 END IF IF ( Fmul1 .ne. .TRUE. ) THEN Call IRsltFail( 6 ) Call WriteInt( Findx1, 6 ) Call WriteInt( Fexp1, 10 ) Call Write2Int( Fres1, 10 ) Call WriteLn TstJmul = TstJmul + 2**6 END IF Call TestFail( TstJmul ) Call CenterString( '--- Testing JMUL completed ---\' ) Call WriteLn Call WriteLn Return END C----------------------------------------------------------------------------- C---------------------------------- JSUB ------------------------------------- Function TstJsub Integer*4 TstJsub Integer*2 JSUB Integer*4 Result, i Logical*1 Fsub, Fsub1, Flt, Fgt, Feq Integer*4 R1indx, R2indx Integer*4 Fexp, Fexp1 Integer*2 err, Fres, R1err, R2err, R3err Call CenterString( '--- Testing JSUB ---\' ) Call WriteLn Call CenterString( 'Integer*4 - Integer*4 with result codes\') Call WriteLn TstJsub = 0 Fsub = .TRUE. Fsub1 = .TRUE. Flt = .TRUE. Feq = .TRUE. Fgt = .TRUE. DO 10 i = -1000, 1000 err = JSUB( i, -i, Result ) IF ((2*i .ne. Result) .and. (Fsub))THEN Fsub = .FALSE. Fexp = 2*i Fres = Result END IF IF ((i .lt. 0) .and. (err .ne. -1) .and. (Flt)) THEN Flt = .FALSE. R1indx = i R1err = err END IF IF ((i .gt. 0) .and. (err .ne. 1) .and. (Fgt)) THEN Fgt = .FALSE. R2indx = i R2err = err END IF IF ((i .eq. 0) .and. (err .ne. 0) .and. (Feq)) THEN Feq = .FALSE. R3err = err END IF err = JSUB( i, i, Result ) IF ((Result .ne. 0) .and. (Fsub1))THEN Fsub1 = .FALSE. Fexp1 = 0 Fres1 = Result END IF 10 Continue IF ( Fsub .ne. .TRUE. ) THEN Call MtFail( 'sub vr', 1 ) Call WriteInt( Fexp, 10 ) Call Write2Int( Fres, 10 ) Call WriteLn TstJsub = TstJsub + 2**1 END IF IF ( Flt .ne. .TRUE. ) THEN Call IRsltFail( 2 ) Call WriteInt( R1indx, 6 ) Call Write2Int( -1, 10 ) Call Write2Int( R1err, 10 ) Call WriteLn TstJsub = TstJsub + 2**2 END IF IF ( Feq .ne. .TRUE. ) THEN Call IRsltFail( 3 ) Call WriteInt( R2indx, 6 ) Call Write2Int( 0, 10 ) Call Write2Int( R2err, 10 ) Call WriteLn TstJsub = TstJsub + 2**3 END IF IF ( Fgt .ne. .TRUE. ) THEN Call IRsltFail( 4 ) Call WriteInt( R3indx, 6 ) Call Write2Int( 1, 10 ) Call Write2Int( R2err, 10 ) Call WriteLn TstJsub = TstJsub + 2**4 END IF i = -2147483600 err = JSUB( i, -i, result ) IF (err .ne. -2) THEN Call RsltFail( 5 ) Call Write2Int( -2, 10 ) Call Write2Int( err, 10 ) Call WriteLn TstJsub = TstJsub + 2**5 END IF IF ( Fsub1 .ne. .TRUE. ) THEN Call RsltFail( 6 ) Call WriteInt( Fexp1, 10 ) Call Write2Int( Fres1, 10 ) Call WriteLn TstJsub = TstJsub + 2**6 END IF Call TestFail( TstJsub ) Call CenterString( '--- Testing JSUB completed ---\' ) Call WriteLn Call WriteLn Return END C-----------------------------------------------------------------------------