From 0cd4a89bb4748a170279be8b3811a39741fb7963 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20R=C3=BCger?= Date: Thu, 6 Feb 2020 18:10:36 +0100 Subject: [PATCH] fixed a bug in ftlHashMap%Clear --- src/ftlHashMap.F90_template | 7 ++++++- src/ftlHashSet.F90_template | 6 +++++- tests/ftlHashMapTests.F90 | 31 +++++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+), 2 deletions(-) diff --git a/src/ftlHashMap.F90_template b/src/ftlHashMap.F90_template index dddd127..18ff6b7 100644 --- a/src/ftlHashMap.F90_template +++ b/src/ftlHashMap.F90_template @@ -520,6 +520,7 @@ contains deleter => walker enddo deallocate(deleter) + nullify(self%buckets(b)%first) enddo endif self%psize = 0 @@ -535,7 +536,11 @@ contains pure integer function BucketCount(self) class(CAT3(ftlHashMap,FTL_TEMPLATE_KEYTYPE_NAME,FTL_TEMPLATE_TYPE_NAME)), intent(in) :: self - BucketCount = size(self%buckets) + if (allocated(self%buckets)) then + BucketCount = size(self%buckets) + else + BucketCount = 0 + endif end function diff --git a/src/ftlHashSet.F90_template b/src/ftlHashSet.F90_template index 0b3027e..4d9bfc0 100644 --- a/src/ftlHashSet.F90_template +++ b/src/ftlHashSet.F90_template @@ -487,7 +487,11 @@ contains pure integer function BucketCount(self) class(CAT(ftlHashSet,FTL_TEMPLATE_TYPE_NAME)), intent(in) :: self - BucketCount = size(self%buckets) + if (allocated(self%buckets)) then + BucketCount = size(self%buckets) + else + BucketCount = 0 + endif end function diff --git a/tests/ftlHashMapTests.F90 b/tests/ftlHashMapTests.F90 index a39e3af..59e4ec8 100644 --- a/tests/ftlHashMapTests.F90 +++ b/tests/ftlHashMapTests.F90 @@ -42,6 +42,7 @@ subroutine ftlHashMapTests call testNewDefault call testNewCopyOther call testAssignment + call testClear call testSetAndGet call testRehash call testIterators @@ -163,6 +164,36 @@ subroutine testAssignment end subroutine + subroutine testClear + type(ftlHashMapStrInt) :: um + integer :: b + + call um%New(10) + call um%Set('foo ', 42) + call um%Set('bar ', 1) + call um%Set('test', 2) + call um%Set('blub', 3) + call um%Set('jipi', 4) + call um%Set('fort', 5) + call um%Set('ran ', 6) + call um%Set('is m', 7) + call um%Set('y fa', 8) + call um%Set('vour', 9) + call um%Set('ite ', 10) + call um%Set('lang', 11) + call um%Set('not ', 12) + call um%Set('rly!', 13) + + call um%Clear() + + ASSERT(um%Size() == 0) + do b = 1, um%BucketCount() + ASSERT(um%BucketSize(b) == 0) + enddo + + end subroutine + + subroutine testSetAndGet type(ftlHashMapStrInt) :: um integer :: i