overload_1.f90

来自「用于进行gcc测试」· F90 代码 · 共 185 行

F90
185
字号
! { dg-do run }! tests that operator overloading works correctly for operators with! different spellingsmodule m  type t     integer :: i  end type t    interface operator (==)     module procedure teq  end interface  interface operator (/=)     module procedure tne  end interface  interface operator (>)     module procedure tgt  end interface  interface operator (>=)     module procedure tge  end interface    interface operator (<)     module procedure tlt  end interface  interface operator (<=)     module procedure tle  end interface  type u     integer :: i  end type u    interface operator (.eq.)     module procedure ueq  end interface  interface operator (.ne.)     module procedure une  end interface  interface operator (.gt.)     module procedure ugt  end interface  interface operator (.ge.)     module procedure uge  end interface    interface operator (.lt.)     module procedure ult  end interface  interface operator (.le.)     module procedure ule  end interfacecontains  function teq (a, b)    logical teq    type (t), intent (in) :: a, b    teq = a%i == b%i  end function teq  function tne (a, b)    logical tne    type (t), intent (in) :: a, b    tne = a%i /= b%i  end function tne  function tgt (a, b)    logical tgt    type (t), intent (in) :: a, b    tgt = a%i > b%i  end function tgt  function tge (a, b)    logical tge    type (t), intent (in) :: a, b    tge = a%i >= b%i  end function tge  function tlt (a, b)    logical tlt    type (t), intent (in) :: a, b    tlt = a%i < b%i  end function tlt  function tle (a, b)    logical tle    type (t), intent (in) :: a, b    tle = a%i <= b%i  end function tle  function ueq (a, b)    logical ueq    type (u), intent (in) :: a, b    ueq = a%i == b%i  end function ueq  function une (a, b)    logical une    type (u), intent (in) :: a, b    une = a%i /= b%i  end function une  function ugt (a, b)    logical ugt    type (u), intent (in) :: a, b    ugt = a%i > b%i  end function ugt  function uge (a, b)    logical uge    type (u), intent (in) :: a, b    uge = a%i >= b%i  end function uge  function ult (a, b)    logical ult    type (u), intent (in) :: a, b    ult = a%i < b%i  end function ult  function ule (a, b)    logical ule    type (u), intent (in) :: a, b    ule = a%i <= b%i  end function uleend module mprogram main  call checkt  call checkucontains    subroutine checkt    use m    type (t) :: a, b    logical :: r1(6), r2(6)    a%i = 0; b%i = 1    r1 = (/ a == b, a /= b, a <  b, a <= b, a >  b, a >= b /)    r2 = (/ a.eq.b, a.ne.b, a.lt.b, a.le.b, a.gt.b, a.ge.b /)    if (any (r1.neqv.r2)) call abort    if (any (r1.neqv. &         (/ .false.,.true.,.true., .true., .false.,.false. /) )) call&         & abort  end subroutine checkt  subroutine checku    use m    type (u) :: a, b    logical :: r1(6), r2(6)    a%i = 0; b%i = 1    r1 = (/ a == b, a /= b, a <  b, a <= b, a >  b, a >= b /)    r2 = (/ a.eq.b, a.ne.b, a.lt.b, a.le.b, a.gt.b, a.ge.b /)    if (any (r1.neqv.r2)) call abort    if (any (r1.neqv. &         (/ .false.,.true.,.true., .true., .false.,.false. /) )) call&         & abort  end subroutine checkuend program main! { dg-final { cleanup-modules "m" } }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?