hasty_test_caf_basic.F90 Source File

HASTY test hash table CAF basic.

This File Depends On

sourcefile~~hasty_test_caf_basic.f90~~EfferentGraph sourcefile~hasty_test_caf_basic.f90 hasty_test_caf_basic.F90 sourcefile~hasty.f90 hasty.f90 sourcefile~hasty.f90->sourcefile~hasty_test_caf_basic.f90 sourcefile~tester.f90 tester.f90 sourcefile~tester.f90->sourcefile~hasty_test_caf_basic.f90 sourcefile~hasty_key_base.f90 hasty_key_base.f90 sourcefile~hasty_key_base.f90->sourcefile~hasty.f90 sourcefile~hasty_key_morton.f90 hasty_key_morton.f90 sourcefile~hasty_key_base.f90->sourcefile~hasty_key_morton.f90 sourcefile~hasty_hash_table.f90 hasty_hash_table.F90 sourcefile~hasty_key_base.f90->sourcefile~hasty_hash_table.f90 sourcefile~hasty_dictionary.f90 hasty_dictionary.f90 sourcefile~hasty_key_base.f90->sourcefile~hasty_dictionary.f90 sourcefile~hasty_dictionary_node.f90 hasty_dictionary_node.f90 sourcefile~hasty_key_base.f90->sourcefile~hasty_dictionary_node.f90 sourcefile~hasty_key_morton.f90->sourcefile~hasty.f90 sourcefile~hasty_hash_table.f90->sourcefile~hasty.f90 sourcefile~hasty_dictionary.f90->sourcefile~hasty.f90 sourcefile~hasty_dictionary.f90->sourcefile~hasty_hash_table.f90 sourcefile~hasty_dictionary_node.f90->sourcefile~hasty.f90 sourcefile~hasty_dictionary_node.f90->sourcefile~hasty_dictionary.f90 sourcefile~hasty_content_adt.f90 hasty_content_adt.f90 sourcefile~hasty_content_adt.f90->sourcefile~hasty.f90 sourcefile~hasty_content_adt.f90->sourcefile~hasty_hash_table.f90 sourcefile~hasty_content_adt.f90->sourcefile~hasty_dictionary_node.f90 sourcefile~penf.f90 penf.F90 sourcefile~penf.f90->sourcefile~hasty_key_base.f90 sourcefile~penf.f90->sourcefile~hasty_key_morton.f90 sourcefile~penf.f90->sourcefile~hasty_hash_table.f90 sourcefile~penf.f90->sourcefile~hasty_dictionary.f90 sourcefile~penf.f90->sourcefile~hasty_dictionary_node.f90 sourcefile~penf_b_size.f90 penf_b_size.F90 sourcefile~penf_b_size.f90->sourcefile~penf.f90 sourcefile~penf_stringify.f90 penf_stringify.F90 sourcefile~penf_b_size.f90->sourcefile~penf_stringify.f90 sourcefile~penf_global_parameters_variables.f90 penf_global_parameters_variables.F90 sourcefile~penf_global_parameters_variables.f90->sourcefile~penf.f90 sourcefile~penf_global_parameters_variables.f90->sourcefile~penf_b_size.f90 sourcefile~penf_global_parameters_variables.f90->sourcefile~penf_stringify.f90 sourcefile~penf_stringify.f90->sourcefile~penf.f90
Help


Source Code

!< HASTY test hash table CAF basic.
program hasty_test_caf_basic
!-----------------------------------------------------------------------------------------------------------------------------------
!< HASTY test hash table CAF basic.
!-----------------------------------------------------------------------------------------------------------------------------------
use, intrinsic :: iso_fortran_env, only : int32, int64, error_unit
use hasty
use tester
!-----------------------------------------------------------------------------------------------------------------------------------

!-----------------------------------------------------------------------------------------------------------------------------------
type(tester_t)        :: hasty_tester  !< Tests handler.
type(hash_table)      :: a_table       !< A table.
class(*), pointer     :: a_content     !< A content.
class(*), allocatable :: a_new_content !< A content.
!-----------------------------------------------------------------------------------------------------------------------------------

!-----------------------------------------------------------------------------------------------------------------------------------
call hasty_tester%init

call a_table%initialize(buckets_number=4, use_prime=.true.)

#ifdef CAF

call a_table%add_clone(key=1_int32, content=int(this_image(), int32))
call a_table%add_clone(key=3_int32, content=int(this_image(), int32))
call a_table%add_clone(key=10_int32, content=int(this_image(), int32))
call a_table%add_clone(key=13_int32, content=int(this_image(), int32))
call a_table%add_clone(key=16_int32, content=int(this_image(), int32))
call a_table%add_clone(key=22_int32, content=int(this_image(), int32))
call a_table%add_clone(key=27_int32, content=int(this_image(), int32))
call a_table%add_clone(key=31_int32, content=int(this_image(), int32))
call a_table%add_clone(key=40_int32, content=int(this_image(), int32))

sync all
a_content => a_table%get_pointer(key=3_int32)
if (associated(a_content)) then
  call test_assert_equal(content=a_content, reference=int(this_image(), int32))
  call hasty_tester%print
  write(error_unit, *) '  I am image: ', this_image(), ' and I HAVE key=3'
else
  write(error_unit, *) '  I am image: ', this_image(), ' and I have NOT key=3'
endif
sync all

sync all
critical
call a_table%get_clone(key=3_int32, content=a_new_content)
end critical
! if (allocated(a_new_content)) then
!   call test_assert_equal(content=a_content, reference=int(mod(mod(3, 5) + 1, num_images())+1, int32))
!   call hasty_tester%print
!   write(error_unit, *) '  I am image: ', this_image(), ' and I HAVE a copy key=3'
! else
!   write(error_unit, *) '  I am image: ', this_image(), ' and I have NOT a copy key=3'
! endif
sync all

if (this_image()==1) write(error_unit, *) 'Keys/Contents'
sync all
critical
call a_table%traverse(iterator=print_content_iterator)
end critical
sync all

if (this_image()==1) write(error_unit, *) 'IDs'
sync all
critical
write(error_unit, *) '  image: ', this_image(), ' ids = ', a_table%ids()
end critical
sync all

if (this_image()==1) write(error_unit, *) 'IDs global'
sync all
critical
write(error_unit, *) '  image: ', this_image(), ' ids global = ', a_table%ids(global=.true.)
end critical
sync all

if (this_image()==1) write(error_unit, *) 'Length'
sync all
critical
write(error_unit, *) '  image: ', this_image(), ' table length ', len(a_table)
end critical
sync all

if (this_image()==1) write(error_unit, *) 'Global length', len(a_table, global=.true.)

call a_table%destroy

if (this_image()==1) write(error_unit, *) 'Length'
sync all
critical
write(error_unit, *) '  image: ', this_image(), ' table length ', len(a_table)
end critical
sync all

#endif
!-----------------------------------------------------------------------------------------------------------------------------------
contains
  subroutine test_assert_equal(content, reference)
  !---------------------------------------------------------------------------------------------------------------------------------
  !< Test `content==reference`.
  !---------------------------------------------------------------------------------------------------------------------------------
  class(*),       intent(in) :: content   !< Content value.
  integer(int32), intent(in) :: reference !< Reference value.
  !---------------------------------------------------------------------------------------------------------------------------------

  !---------------------------------------------------------------------------------------------------------------------------------
  select type(content)
  type is(integer(int32))
    call hasty_tester%assert_equal(content, reference)
  endselect
  !---------------------------------------------------------------------------------------------------------------------------------
  endsubroutine test_assert_equal

  subroutine print_content_iterator(key, content, done)
  !---------------------------------------------------------------------------------------------------------------------------------
  !< Iterator that print contents.
  !---------------------------------------------------------------------------------------------------------------------------------
  class(*),          intent(in)  :: key     !< The node key.
  class(*), pointer, intent(in)  :: content !< The generic content.
  logical,           intent(out) :: done    !< Flag to set to true to stop traversing.
  !---------------------------------------------------------------------------------------------------------------------------------

  !---------------------------------------------------------------------------------------------------------------------------------
  if (associated(content)) then
    select type(content)
    type is(integer(int32))
      select type(key)
      type is(key_base)
#ifdef CAF
        write(error_unit, *) '  image: ', this_image(), 'key: ', key%stringify(), ' content: ', content
#endif
      endselect
    endselect
  endif
  done = .false.
  !---------------------------------------------------------------------------------------------------------------------------------
  endsubroutine print_content_iterator
endprogram hasty_test_caf_basic