Skip to content

Commit 6a99058

Browse files
committed
ENH: Add RGBGibbsPriorFilter accessor invariants GTest
Cover NumberOfClasses / MaximumNumberOfIterations default values, Set/Get round-trip via both subclass and MRFImageFilter base pointer, MTime advancement on change, MTime invariance on identical assignment, and confirm MRFImageFilter::MaximumNumberOfIterations default of 50 differs from the subclass default of 10. Establishes the API contract pre-cleanup so a follow-up that removes RGBGibbsPriorFilter's shadow declarations of m_NumberOfClasses and m_MaximumNumberOfIterations can be verified non-regressive.
1 parent 59176b1 commit 6a99058

2 files changed

Lines changed: 112 additions & 0 deletions

File tree

Modules/Segmentation/MarkovRandomFieldsClassifiers/test/CMakeLists.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,11 @@ itk_add_test(
2121
ITKMarkovRandomFieldsClassifiersTestDriver
2222
itkRGBGibbsPriorFilterTest
2323
)
24+
25+
set(ITKMarkovRandomFieldsClassifiersGTests itkRGBGibbsPriorFilterGTest.cxx)
26+
27+
creategoogletestdriver(
28+
ITKMarkovRandomFieldsClassifiers
29+
"${ITKMarkovRandomFieldsClassifiers-Test_LIBRARIES}"
30+
"${ITKMarkovRandomFieldsClassifiersGTests}"
31+
)
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
/*=========================================================================
2+
*
3+
* Copyright NumFOCUS
4+
*
5+
* Licensed under the Apache License, Version 2.0 (the "License");
6+
* you may not use this file except in compliance with the License.
7+
* You may obtain a copy of the License at
8+
*
9+
* https://www.apache.org/licenses/LICENSE-2.0.txt
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*
17+
*=========================================================================*/
18+
19+
#include "itkGTest.h"
20+
#include "itkMRFImageFilter.h"
21+
#include "itkRGBGibbsPriorFilter.h"
22+
#include "itkImage.h"
23+
#include "itkVector.h"
24+
25+
namespace
26+
{
27+
constexpr unsigned int NumberOfBands{ 1 };
28+
constexpr unsigned int ImageDimension{ 3 };
29+
using PixelType = itk::Vector<unsigned short, NumberOfBands>;
30+
using InputImageType = itk::Image<PixelType, ImageDimension>;
31+
using LabelImageType = itk::Image<unsigned short, ImageDimension>;
32+
using BaseFilterType = itk::MRFImageFilter<InputImageType, LabelImageType>;
33+
using GibbsFilterType = itk::RGBGibbsPriorFilter<InputImageType, LabelImageType>;
34+
} // namespace
35+
36+
TEST(RGBGibbsPriorFilter, DefaultNumberOfClassesIsZero)
37+
{
38+
auto filter = GibbsFilterType::New();
39+
EXPECT_EQ(filter->GetNumberOfClasses(), 0u);
40+
}
41+
42+
TEST(RGBGibbsPriorFilter, DefaultMaximumNumberOfIterationsIsTen)
43+
{
44+
auto filter = GibbsFilterType::New();
45+
EXPECT_EQ(filter->GetMaximumNumberOfIterations(), 10u);
46+
}
47+
48+
TEST(MRFImageFilter, DefaultMaximumNumberOfIterationsIsFifty)
49+
{
50+
auto filter = BaseFilterType::New();
51+
EXPECT_EQ(filter->GetMaximumNumberOfIterations(), 50u);
52+
}
53+
54+
TEST(RGBGibbsPriorFilter, SetGetNumberOfClassesViaSubclass)
55+
{
56+
auto filter = GibbsFilterType::New();
57+
filter->SetNumberOfClasses(7u);
58+
EXPECT_EQ(filter->GetNumberOfClasses(), 7u);
59+
}
60+
61+
TEST(RGBGibbsPriorFilter, SetGetMaximumNumberOfIterationsViaSubclass)
62+
{
63+
auto filter = GibbsFilterType::New();
64+
filter->SetMaximumNumberOfIterations(25u);
65+
EXPECT_EQ(filter->GetMaximumNumberOfIterations(), 25u);
66+
}
67+
68+
TEST(RGBGibbsPriorFilter, SetGetNumberOfClassesViaBasePointer)
69+
{
70+
auto gibbs = GibbsFilterType::New();
71+
const BaseFilterType * basePtr = gibbs;
72+
BaseFilterType * baseMutable = gibbs;
73+
baseMutable->SetNumberOfClasses(5u);
74+
EXPECT_EQ(basePtr->GetNumberOfClasses(), 5u);
75+
EXPECT_EQ(gibbs->GetNumberOfClasses(), 5u);
76+
}
77+
78+
TEST(RGBGibbsPriorFilter, SetGetMaximumNumberOfIterationsViaBasePointer)
79+
{
80+
auto gibbs = GibbsFilterType::New();
81+
const BaseFilterType * basePtr = gibbs;
82+
BaseFilterType * baseMutable = gibbs;
83+
baseMutable->SetMaximumNumberOfIterations(33u);
84+
EXPECT_EQ(basePtr->GetMaximumNumberOfIterations(), 33u);
85+
EXPECT_EQ(gibbs->GetMaximumNumberOfIterations(), 33u);
86+
}
87+
88+
TEST(RGBGibbsPriorFilter, ModifiedTimeAdvancesOnNumberOfClassesChange)
89+
{
90+
auto filter = GibbsFilterType::New();
91+
filter->SetNumberOfClasses(3u);
92+
const auto t1 = filter->GetMTime();
93+
filter->SetNumberOfClasses(4u);
94+
EXPECT_GT(filter->GetMTime(), t1);
95+
}
96+
97+
TEST(RGBGibbsPriorFilter, ModifiedTimeUnchangedOnIdenticalAssignment)
98+
{
99+
auto filter = GibbsFilterType::New();
100+
filter->SetNumberOfClasses(3u);
101+
const auto t1 = filter->GetMTime();
102+
filter->SetNumberOfClasses(3u);
103+
EXPECT_EQ(filter->GetMTime(), t1);
104+
}

0 commit comments

Comments
 (0)