Test_ExtensionFamily.pf Source File


This file depends on

sourcefile~~test_extensionfamily.pf~~EfferentGraph sourcefile~test_extensionfamily.pf Test_ExtensionFamily.pf sourcefile~extensionfamily.f90 ExtensionFamily.F90 sourcefile~test_extensionfamily.pf->sourcefile~extensionfamily.f90 sourcefile~mockitemspec.f90 MockItemSpec.F90 sourcefile~test_extensionfamily.pf->sourcefile~mockitemspec.f90 sourcefile~stateitemextension.f90 StateItemExtension.F90 sourcefile~test_extensionfamily.pf->sourcefile~stateitemextension.f90 sourcefile~stateregistry.f90 StateRegistry.F90 sourcefile~test_extensionfamily.pf->sourcefile~stateregistry.f90 sourcefile~virtualconnectionpt.f90 VirtualConnectionPt.F90 sourcefile~test_extensionfamily.pf->sourcefile~virtualconnectionpt.f90

Source Code

#include "MAPL_TestErr.h"
#include "unused_dummy.H"

module Test_ExtensionFamily
   use mapl3g_ExtensionFamily
   use mapl3g_StateRegistry
   use mapl3g_VirtualConnectionPt
   use MockItemSpecMod
   use mapl3g_StateItemExtension
   use esmf
   use funit
   implicit none

   type(ESMF_Typekind_Flag), parameter :: R4 = ESMF_TYPEKIND_R4
   type(ESMF_Typekind_Flag), parameter :: R8 = ESMF_TYPEKIND_R8
contains

   @test
   subroutine test_find_closest_simple()
      type(StateRegistry), target :: r
      type(VirtualConnectionPt) :: v_pt
      type(ExtensionFamily), pointer :: family
      type(StateItemExtension), pointer :: primary
      type(MockItemSpec) :: goal_spec
      type(StateItemExtension), pointer :: closest

      integer :: status
      r = StateRegistry('A')
      v_pt = VirtualConnectionPt(state_intent='export', short_name='E1')

      call r%add_primary_spec(v_pt, MockItemSpec('E', typekind=R8))

      family => r%get_extension_family(v_pt, _RC)

      primary => family%get_primary(_RC)
      goal_spec = MockItemSpec('E')
      closest => family%find_closest_extension(goal_spec,_RC)

      @assert_that(associated(closest, primary), is(true()))
      
   end subroutine test_find_closest_simple


   @test
   subroutine test_find_closest_subtype()
      type(StateRegistry), target :: r
      type(VirtualConnectionPt) :: v_pt
      type(ExtensionFamily), pointer :: family
      type(StateItemExtension) :: extension
      type(StateItemExtension), pointer :: ext_1, ext_2
      type(MockItemSpec) :: goal_spec
      type(StateItemExtension), pointer :: closest

      integer :: status
      r = StateRegistry('A')
      v_pt = VirtualConnectionPt(state_intent='export', short_name='E1')

      call r%add_primary_spec(v_pt, MockItemSpec('3', typekind=R4, units='m'))

      extension = StateItemExtension(MockItemSpec('b',typekind=R8, units='cm'))
      ext_1 => r%add_extension(v_pt, extension, _RC)

      extension = StateItemExtension(MockItemSpec('b',typekind=R4, units='km'))
      ext_2 => r%add_extension(v_pt, extension, _RC)

      family => r%get_extension_family(v_pt, _RC)
      goal_spec = MockItemSpec('c', typekind=ESMF_TYPEKIND_R8)

      closest => family%find_closest_extension(goal_spec,_RC)

      @assert_that(associated(closest, ext_1), is(true()))
      
   end subroutine test_find_closest_subtype

   @test
   subroutine test_find_closest_name()
      type(StateRegistry), target :: r
      type(VirtualConnectionPt) :: v_pt
      type(ExtensionFamily), pointer :: family
      type(StateItemExtension) :: extension
      type(StateItemExtension), pointer :: primary
      type(StateItemExtension), pointer :: ext_1, ext_2
      type(MockItemSpec) :: goal_spec
      type(StateItemExtension), pointer :: closest

      integer :: status
      r = StateRegistry('A')
      v_pt = VirtualConnectionPt(state_intent='export', short_name='E1')

      call r%add_primary_spec(v_pt, MockItemSpec('3', typekind=R8, units='m'))

      extension = StateItemExtension(MockItemSpec('E',typekind=R4, units='km'))
      ext_1 => r%add_extension(v_pt, extension, _RC)

      extension = StateItemExtension(MockItemSpec('F',typekind=R4, units='m'))
      ext_2 => r%add_extension(v_pt, extension, _RC)

      family => r%get_extension_family(v_pt, _RC)
      primary => family%get_primary(_RC)

      goal_spec = MockItemSpec('E', typekind=R8)
      closest => family%find_closest_extension(goal_spec,_RC)
      @assert_that(associated(closest, primary), is(true()))

      goal_spec = MockItemSpec('F', typekind=R4, units='m')
      closest => family%find_closest_extension(goal_spec,_RC)
      @assert_that(associated(closest, ext_2), is(true()))
      
   end subroutine test_find_closest_name

end module Test_ExtensionFamily