* test whether complex operators properly handle
* full and partial aliasing.
* (libf2c/libF77 routines used to assume no aliasing,
* then were changed to accommodate full aliasing, while
* the libg2c/libF77 versions were changed to accommodate
* both full and partial aliasing.)
*
* NOTE: this (19990325-0.f) is the single-precision version.
* See 19990325-1.f for the double-precision version.

      program complexalias
      implicit none

* Make sure non-aliased cases work.  (Catch roundoff/precision
* problems, etc., here.  Modify subroutine check if they occur.)

      call tryfull (1, 3, 5)

* Now check various combinations of aliasing.

* Full aliasing.
      call tryfull (1, 1, 5)

* Partial aliasing.
      call trypart (2, 3, 5)
      call trypart (2, 1, 5)
      call trypart (2, 5, 3)
      call trypart (2, 5, 1)

      end

      subroutine tryfull (xout, xin1, xin2)
      implicit none
      integer xout, xin1, xin2

* out, in1, and in2 are the desired indexes into the REAL array (array).

      complex expect
      integer pwr
      integer out, in1, in2

      real array(6)
      complex carray(3)
      equivalence (carray(1), array(1))

* Make sure the indexes can be accommodated by the equivalences above.

      if (mod (xout, 2) .ne. 1) call abort
      if (mod (xin1, 2) .ne. 1) call abort
      if (mod (xin2, 2) .ne. 1) call abort

* Convert the indexes into ones suitable for the COMPLEX array (carray).

      out = (xout + 1) / 2
      in1 = (xin1 + 1) / 2
      in2 = (xin2 + 1) / 2

* Check some open-coded stuff, just in case.

      call prepare1 (carray(in1))
      expect = + carray(in1)
      carray(out) = + carray(in1)
      call check (expect, carray(out))

      call prepare1 (carray(in1))
      expect = - carray(in1)
      carray(out) = - carray(in1)
      call check (expect, carray(out))

      call prepare2 (carray(in1), carray(in2))
      expect = carray(in1) + carray(in2)
      carray(out) = carray(in1) + carray(in2)
      call check (expect, carray(out))

      call prepare2 (carray(in1), carray(in2))
      expect = carray(in1) - carray(in2)
      carray(out) = carray(in1) - carray(in2)
      call check (expect, carray(out))

      call prepare2 (carray(in1), carray(in2))
      expect = carray(in1) * carray(in2)
      carray(out) = carray(in1) * carray(in2)
      call check (expect, carray(out))

      call prepare1 (carray(in1))
      expect = carray(in1) ** 2
      carray(out) = carray(in1) ** 2
      call check (expect, carray(out))

      call prepare1 (carray(in1))
      expect = carray(in1) ** 3
      carray(out) = carray(in1) ** 3
      call check (expect, carray(out))

      call prepare1 (carray(in1))
      expect = abs (carray(in1))
      array(out*2-1) = abs (carray(in1))
      array(out*2) = 0
      call check (expect, carray(out))

* Now check the stuff implemented in libF77.

      call prepare1 (carray(in1))
      expect = cos (carray(in1))
      carray(out) = cos (carray(in1))
      call check (expect, carray(out))

      call prepare1 (carray(in1))
      expect = exp (carray(in1))
      carray(out) = exp (carray(in1))
      call check (expect, carray(out))

      call prepare1 (carray(in1))
      expect = log (carray(in1))
      carray(out) = log (carray(in1))
      call check (expect, carray(out))

      call prepare1 (carray(in1))
      expect = sin (carray(in1))
      carray(out) = sin (carray(in1))
      call check (expect, carray(out))

      call prepare1 (carray(in1))
      expect = sqrt (carray(in1))
      carray(out) = sqrt (carray(in1))
      call check (expect, carray(out))

      call prepare1 (carray(in1))
      expect = conjg (carray(in1))
      carray(out) = conjg (carray(in1))
      call check (expect, carray(out))

      call prepare1i (carray(in1), pwr)
      expect = carray(in1) ** pwr
      carray(out) = carray(in1) ** pwr
      call check (expect, carray(out))

      call prepare2 (carray(in1), carray(in2))
      expect = carray(in1) / carray(in2)
      carray(out) = carray(in1) / carray(in2)
      call check (expect, carray(out))

      call prepare2 (carray(in1), carray(in2))
      expect = carray(in1) ** carray(in2)
      carray(out) = carray(in1) ** carray(in2)
      call check (expect, carray(out))

      call prepare1 (carray(in1))
      expect = carray(in1) ** .2
      carray(out) = carray(in1) ** .2
      call check (expect, carray(out))

      end

      subroutine trypart (xout, xin1, xin2)
      implicit none
      integer xout, xin1, xin2

* out, in1, and in2 are the desired indexes into the REAL array (array).

      complex expect
      integer pwr
      integer out, in1, in2

      real array(6)
      complex carray(3), carrayp(2)
      equivalence (carray(1), array(1))
      equivalence (carrayp(1), array(2))

* Make sure the indexes can be accommodated by the equivalences above.

      if (mod (xout, 2) .ne. 0) call abort
      if (mod (xin1, 2) .ne. 1) call abort
      if (mod (xin2, 2) .ne. 1) call abort

* Convert the indexes into ones suitable for the COMPLEX array (carray).

      out = xout / 2
      in1 = (xin1 + 1) / 2
      in2 = (xin2 + 1) / 2

* Check some open-coded stuff, just in case.

      call prepare1 (carray(in1))
      expect = + carray(in1)
      carrayp(out) = + carray(in1)
      call check (expect, carrayp(out))

      call prepare1 (carray(in1))
      expect = - carray(in1)
      carrayp(out) = - carray(in1)
      call check (expect, carrayp(out))

      call prepare2 (carray(in1), carray(in2))
      expect = carray(in1) + carray(in2)
      carrayp(out) = carray(in1) + carray(in2)
      call check (expect, carrayp(out))

      call prepare2 (carray(in1), carray(in2))
      expect = carray(in1) - carray(in2)
      carrayp(out) = carray(in1) - carray(in2)
      call check (expect, carrayp(out))

      call prepare2 (carray(in1), carray(in2))
      expect = carray(in1) * carray(in2)
      carrayp(out) = carray(in1) * carray(in2)
      call check (expect, carrayp(out))

      call prepare1 (carray(in1))
      expect = carray(in1) ** 2
      carrayp(out) = carray(in1) ** 2
      call check (expect, carrayp(out))

      call prepare1 (carray(in1))
      expect = carray(in1) ** 3
      carrayp(out) = carray(in1) ** 3
      call check (expect, carrayp(out))

      call prepare1 (carray(in1))
      expect = abs (carray(in1))
      array(out*2) = abs (carray(in1))
      array(out*2+1) = 0
      call check (expect, carrayp(out))

* Now check the stuff implemented in libF77.

      call prepare1 (carray(in1))
      expect = cos (carray(in1))
      carrayp(out) = cos (carray(in1))
      call check (expect, carrayp(out))

      call prepare1 (carray(in1))
      expect = exp (carray(in1))
      carrayp(out) = exp (carray(in1))
      call check (expect, carrayp(out))

      call prepare1 (carray(in1))
      expect = log (carray(in1))
      carrayp(out) = log (carray(in1))
      call check (expect, carrayp(out))

      call prepare1 (carray(in1))
      expect = sin (carray(in1))
      carrayp(out) = sin (carray(in1))
      call check (expect, carrayp(out))

      call prepare1 (carray(in1))
      expect = sqrt (carray(in1))
      carrayp(out) = sqrt (carray(in1))
      call check (expect, carrayp(out))

      call prepare1 (carray(in1))
      expect = conjg (carray(in1))
      carrayp(out) = conjg (carray(in1))
      call check (expect, carrayp(out))

      call prepare1i (carray(in1), pwr)
      expect = carray(in1) ** pwr
      carrayp(out) = carray(in1) ** pwr
      call check (expect, carrayp(out))

      call prepare2 (carray(in1), carray(in2))
      expect = carray(in1) / carray(in2)
      carrayp(out) = carray(in1) / carray(in2)
      call check (expect, carrayp(out))

      call prepare2 (carray(in1), carray(in2))
      expect = carray(in1) ** carray(in2)
      carrayp(out) = carray(in1) ** carray(in2)
      call check (expect, carrayp(out))

      call prepare1 (carray(in1))
      expect = carray(in1) ** .2
      carrayp(out) = carray(in1) ** .2
      call check (expect, carrayp(out))

      end

      subroutine prepare1 (in)
      implicit none
      complex in

      in = (3.2, 4.2)

      end

      subroutine prepare1i (in, i)
      implicit none
      complex in
      integer i

      in = (2.3, 2.5)
      i = 4

      end

      subroutine prepare2 (in1, in2)
      implicit none
      complex in1, in2

      in1 = (1.3, 2.4)
      in2 = (3.5, 7.1)

      end

      subroutine check (expect, got)
      implicit none
      complex expect, got

      if (aimag(expect) .ne. aimag(got)) call abort
      if (real(expect) .ne. real(got)) call abort

      end
