! Section 3.4, Exercise 7
  module D4X07M
    implicit none
    public:: Test_1, Test_2, Test_3, Test_4, Test_5
    integer, private, save :: I1 = 32, I2 = 41, I3 = 3, J1 = 5, J2 = 17
    integer, private, save :: K1 = 2, K2 = 44, M1 = 8
    real, private, save :: A1 = 0.0, A2 = 5.0, B1 = 1.0, B2 = 21.0
    real, private, save :: C1 = 1.0, C2 = 15.0, C3 = 0.042, C4 = 2.0
    real, private, save :: G1 = 5.0, P1 = 9.0, Q1 = 10.0
    logical, private, save :: L4 = .true., L5A = .true., L5B = .true.
  contains
    subroutine Test_1( )
 ! start subroutine Test_1
      write (unit = *, fmt = *) &
          ((G1 * P1 / Q1) > 4.0) .or. (.not. (I1 > I2))
      return
    end subroutine Test_1
    subroutine Test_2( )
  ! start subroutine Test_2
      write (unit = *, fmt = *) &
          ((I3 ** 2) /= (J1 + K1)) .and. (3.0 >= (B1 + abs( C2 - 20.0 )))
      return
    end subroutine Test_2
    subroutine Test_3( )
  ! start subroutine Test_3
      write (unit = *, fmt = *) &
          .not. (((A1 + C3 * B2) < 5.0e1) .and. (J2 < ((4 + K2) / M1)))
      return
    end subroutine Test_3
    subroutine Test_4( )
  ! start subroutine Test_4
      write (unit = *, fmt = *) L4 .or. (.not. (A2 > (C1 + C4)))
      return
    end subroutine Test_4
    subroutine Test_5( )
  ! start subroutine Test_5
      write (unit = *, fmt = *) L5A .and. (.not. L5B)
      return
    end subroutine Test_5
  end module D4X07M
