HASTY test hash table CAF basic.
Type | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|
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. |
Test content==reference
.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(*), | intent(in) | :: | content | Content value. |
||
integer(kind=int32), | intent(in) | :: | reference | Reference value. |
Iterator that print contents.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(*), | intent(in) | :: | key | The node key. |
||
class(*), | intent(in), | pointer | :: | content | The generic content. |
|
logical, | intent(out) | :: | done | Flag to set to true to stop traversing. |
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