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 sourcefile~extensionfamily.f90->sourcefile~stateitemextension.f90 sourcefile~errorhandling.f90 ErrorHandling.F90 sourcefile~extensionfamily.f90->sourcefile~errorhandling.f90 sourcefile~stateitemextensionptrvector.f90 StateItemExtensionPtrVector.F90 sourcefile~extensionfamily.f90->sourcefile~stateitemextensionptrvector.f90 sourcefile~stateitemspec.f90 StateItemSpec.F90 sourcefile~extensionfamily.f90->sourcefile~stateitemspec.f90 sourcefile~abstractactionspec.f90 AbstractActionSpec.F90 sourcefile~mockitemspec.f90->sourcefile~abstractactionspec.f90 sourcefile~actualconnectionpt.f90 ActualConnectionPt.F90 sourcefile~mockitemspec.f90->sourcefile~actualconnectionpt.f90 sourcefile~actualptvector.f90 ActualPtVector.F90 sourcefile~mockitemspec.f90->sourcefile~actualptvector.f90 sourcefile~mockitemspec.f90->sourcefile~errorhandling.f90 sourcefile~extensionaction.f90 ExtensionAction.F90 sourcefile~mockitemspec.f90->sourcefile~extensionaction.f90 sourcefile~keywordenforcer.f90 KeywordEnforcer.F90 sourcefile~mockitemspec.f90->sourcefile~keywordenforcer.f90 sourcefile~multistate.f90 MultiState.F90 sourcefile~mockitemspec.f90->sourcefile~multistate.f90 sourcefile~nullaction.f90 NullAction.F90 sourcefile~mockitemspec.f90->sourcefile~nullaction.f90 sourcefile~mockitemspec.f90->sourcefile~stateitemspec.f90 sourcefile~variablespec.f90 VariableSpec.F90 sourcefile~mockitemspec.f90->sourcefile~variablespec.f90 sourcefile~verticalgrid.f90 VerticalGrid.F90 sourcefile~mockitemspec.f90->sourcefile~verticalgrid.f90 sourcefile~componentdriver.f90 ComponentDriver.F90 sourcefile~stateitemextension.f90->sourcefile~componentdriver.f90 sourcefile~componentdriverptrvector.f90 ComponentDriverPtrVector.F90 sourcefile~stateitemextension.f90->sourcefile~componentdriverptrvector.f90 sourcefile~componentdrivervector.f90 ComponentDriverVector.F90 sourcefile~stateitemextension.f90->sourcefile~componentdrivervector.f90 sourcefile~stateitemextension.f90->sourcefile~errorhandling.f90 sourcefile~stateitemextension.f90->sourcefile~extensionaction.f90 sourcefile~genericcoupler.f90 GenericCoupler.F90 sourcefile~stateitemextension.f90->sourcefile~genericcoupler.f90 sourcefile~griddedcomponentdriver.f90 GriddedComponentDriver.F90 sourcefile~stateitemextension.f90->sourcefile~griddedcomponentdriver.f90 sourcefile~stateitemextension.f90->sourcefile~multistate.f90 sourcefile~stateitemextension.f90->sourcefile~nullaction.f90 sourcefile~stateitemextension.f90->sourcefile~stateitemspec.f90 sourcefile~stateregistry.f90->sourcefile~extensionfamily.f90 sourcefile~stateregistry.f90->sourcefile~stateitemextension.f90 sourcefile~stateregistry.f90->sourcefile~virtualconnectionpt.f90 sourcefile~abstractregistry.f90 AbstractRegistry.F90 sourcefile~stateregistry.f90->sourcefile~abstractregistry.f90 sourcefile~stateregistry.f90->sourcefile~actualconnectionpt.f90 sourcefile~stateregistry.f90->sourcefile~componentdriver.f90 sourcefile~stateregistry.f90->sourcefile~componentdriverptrvector.f90 sourcefile~stateregistry.f90->sourcefile~componentdrivervector.f90 sourcefile~connectionpt.f90 ConnectionPt.F90 sourcefile~stateregistry.f90->sourcefile~connectionpt.f90 sourcefile~stateregistry.f90->sourcefile~errorhandling.f90 sourcefile~stateregistry.f90->sourcefile~griddedcomponentdriver.f90 sourcefile~stateregistry.f90->sourcefile~multistate.f90 sourcefile~registryptr.f90 RegistryPtr.F90 sourcefile~stateregistry.f90->sourcefile~registryptr.f90 sourcefile~registryptrmap.f90 RegistryPtrMap.F90 sourcefile~stateregistry.f90->sourcefile~registryptrmap.f90 sourcefile~stateregistry.f90->sourcefile~stateitemextensionptrvector.f90 sourcefile~stateitemextensionvector.f90 StateItemExtensionVector.F90 sourcefile~stateregistry.f90->sourcefile~stateitemextensionvector.f90 sourcefile~stateregistry.f90->sourcefile~stateitemspec.f90 sourcefile~stateitemvector.f90 StateItemVector.F90 sourcefile~stateregistry.f90->sourcefile~stateitemvector.f90 sourcefile~stateregistry.f90->sourcefile~verticalgrid.f90 sourcefile~virtualconnectionptvector.f90 VirtualConnectionPtVector.F90 sourcefile~stateregistry.f90->sourcefile~virtualconnectionptvector.f90 sourcefile~virtualptfamilymap.f90 VirtualPtFamilyMap.F90 sourcefile~stateregistry.f90->sourcefile~virtualptfamilymap.f90 sourcefile~virtualconnectionpt.f90->sourcefile~keywordenforcer.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 funit
   implicit none

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', subtype='A'))

      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 :: 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('E', subtype='A', adapter_type='subtype'))

      extension = StateItemExtension(MockItemSpec('E',subtype='B'))
      ext_1 => r%add_extension(v_pt, extension, _RC)

      extension = StateItemExtension(MockItemSpec('F',subtype='A'))
      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', subtype='B')

      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('E', subtype='A', adapter_type='name'))

      extension = StateItemExtension(MockItemSpec('E',subtype='B'))
      ext_1 => r%add_extension(v_pt, extension, _RC)

      extension = StateItemExtension(MockItemSpec('F',subtype='A'))
      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', subtype='A')
      closest => family%find_closest_extension(goal_spec,_RC)
      @assert_that(associated(closest, primary), is(true()))

      goal_spec = MockItemSpec('F', subtype='B')
      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