diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/Utils.h | 19 | ||||
-rw-r--r-- | tests/validation/CL/Box3x3.cpp | 9 | ||||
-rw-r--r-- | tests/validation/CL/Gaussian3x3.cpp | 9 | ||||
-rw-r--r-- | tests/validation/CL/Gaussian5x5.cpp | 9 | ||||
-rw-r--r-- | tests/validation/CL/NonLinearFilter.cpp | 18 | ||||
-rw-r--r-- | tests/validation/CL/Sobel3x3.cpp | 21 | ||||
-rw-r--r-- | tests/validation/CL/Sobel5x5.cpp | 21 | ||||
-rw-r--r-- | tests/validation/NEON/Box3x3.cpp | 9 | ||||
-rw-r--r-- | tests/validation/NEON/Gaussian3x3.cpp | 9 | ||||
-rw-r--r-- | tests/validation/NEON/Gaussian5x5.cpp | 9 | ||||
-rw-r--r-- | tests/validation/NEON/NonLinearFilter.cpp | 18 | ||||
-rw-r--r-- | tests/validation/NEON/Sobel3x3.cpp | 21 | ||||
-rw-r--r-- | tests/validation/NEON/Sobel5x5.cpp | 21 | ||||
-rw-r--r-- | tests/validation/TensorOperations.h | 8 |
14 files changed, 68 insertions, 133 deletions
diff --git a/tests/Utils.h b/tests/Utils.h index 219cbd0368..a6181b3c78 100644 --- a/tests/Utils.h +++ b/tests/Utils.h @@ -475,25 +475,6 @@ inline ValidRegion shape_to_valid_region(TensorShape shape, bool border_undefine return ValidRegion(std::move(anchor), std::move(shape)); } -/** Create a valid region covering the tensor shape with UNDEFINED border mode and specified border size. - * - * @param[in] shape Shape used as size of the valid region. - * @param[in] border_size Border size used to specify the region to exclude. - * - * @return A valid region starting at (@p border_size.left, @p border_size.top, ...) with reduced size of @p shape. - */ -inline ValidRegion shape_to_valid_region_undefined_border(TensorShape shape, BorderSize border_size) -{ - ARM_COMPUTE_ERROR_ON(shape.num_dimensions() < 2); - Coordinates anchor; - anchor.set(std::max<int>(0, shape.num_dimensions() - 1), 0); - anchor.set(0, border_size.left); - anchor.set(1, border_size.top); - shape.set(0, shape.x() - border_size.left - border_size.right); - shape.set(1, shape.y() - border_size.top - border_size.bottom); - return ValidRegion(std::move(anchor), shape); -} - /** Write the value after casting the pointer according to @p data_type. * * @warning The type of the value must match the specified data type. diff --git a/tests/validation/CL/Box3x3.cpp b/tests/validation/CL/Box3x3.cpp index fa604533d7..9c3db9f2fe 100644 --- a/tests/validation/CL/Box3x3.cpp +++ b/tests/validation/CL/Box3x3.cpp @@ -51,6 +51,9 @@ using namespace arm_compute::test::validation; namespace { +constexpr unsigned int filter_size = 3; /** Size of the kernel/filter in number of elements. */ +constexpr BorderSize border_size(filter_size / 2); /** Border size of the kernel/filter around its central element. */ + /** Compute CL box3x3 filter. * * @param[in] shape Shape of the input and output tensors. @@ -106,7 +109,7 @@ BOOST_DATA_TEST_CASE(Configuration, (SmallShapes() + LargeShapes()) * BorderMode // Validate valid region const ValidRegion src_valid_region = shape_to_valid_region(shape); - const ValidRegion dst_valid_region = shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, BorderSize(1)); + const ValidRegion dst_valid_region = shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, border_size); validate(src.info()->valid_region(), src_valid_region); validate(dst.info()->valid_region(), dst_valid_region); @@ -140,7 +143,7 @@ BOOST_DATA_TEST_CASE(RunSmall, SmallShapes() * BorderModes(), shape, border_mode RawTensor ref_dst = Reference::compute_reference_box3x3(shape, border_mode, border_value); // Validate output - validate(CLAccessor(dst), ref_dst, shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, BorderSize(1))); + validate(CLAccessor(dst), ref_dst, shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, border_size)); } BOOST_TEST_DECORATOR(*boost::unit_test::label("nightly")) @@ -157,7 +160,7 @@ BOOST_DATA_TEST_CASE(RunLarge, LargeShapes() * BorderModes(), shape, border_mode RawTensor ref_dst = Reference::compute_reference_box3x3(shape, border_mode, border_value); // Validate output - validate(CLAccessor(dst), ref_dst, shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, BorderSize(1))); + validate(CLAccessor(dst), ref_dst, shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, border_size)); } BOOST_AUTO_TEST_SUITE_END() diff --git a/tests/validation/CL/Gaussian3x3.cpp b/tests/validation/CL/Gaussian3x3.cpp index 5bf830b10d..2a526e8417 100644 --- a/tests/validation/CL/Gaussian3x3.cpp +++ b/tests/validation/CL/Gaussian3x3.cpp @@ -51,6 +51,9 @@ using namespace arm_compute::test::validation; namespace { +constexpr unsigned int filter_size = 3; /** Size of the kernel/filter in number of elements. */ +constexpr BorderSize border_size(filter_size / 2); /** Border size of the kernel/filter around its central element. */ + /** Compute CL gaussian3x3 filter. * * @param[in] shape Shape of the input and output tensors. @@ -106,7 +109,7 @@ BOOST_DATA_TEST_CASE(Configuration, (SmallShapes() + LargeShapes()) * BorderMode // Validate valid region const ValidRegion src_valid_region = shape_to_valid_region(shape); - const ValidRegion dst_valid_region = shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, BorderSize(1)); + const ValidRegion dst_valid_region = shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, border_size); validate(src.info()->valid_region(), src_valid_region); validate(dst.info()->valid_region(), dst_valid_region); @@ -140,7 +143,7 @@ BOOST_DATA_TEST_CASE(RunSmall, SmallShapes() * BorderModes(), shape, border_mode RawTensor ref_dst = Reference::compute_reference_gaussian3x3(shape, border_mode, border_value); // Validate output - validate(CLAccessor(dst), ref_dst, shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, BorderSize(1))); + validate(CLAccessor(dst), ref_dst, shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, border_size)); } BOOST_TEST_DECORATOR(*boost::unit_test::label("nightly")) @@ -157,7 +160,7 @@ BOOST_DATA_TEST_CASE(RunLarge, LargeShapes() * BorderModes(), shape, border_mode RawTensor ref_dst = Reference::compute_reference_gaussian3x3(shape, border_mode, border_value); // Validate output - validate(CLAccessor(dst), ref_dst, shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, BorderSize(1))); + validate(CLAccessor(dst), ref_dst, shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, border_size)); } BOOST_AUTO_TEST_SUITE_END() diff --git a/tests/validation/CL/Gaussian5x5.cpp b/tests/validation/CL/Gaussian5x5.cpp index a13474bc58..b6a692ce04 100644 --- a/tests/validation/CL/Gaussian5x5.cpp +++ b/tests/validation/CL/Gaussian5x5.cpp @@ -51,6 +51,9 @@ using namespace arm_compute::test::validation; namespace { +constexpr unsigned int filter_size = 5; /** Size of the kernel/filter in number of elements. */ +constexpr BorderSize border_size(filter_size / 2); /** Border size of the kernel/filter around its central element. */ + /** Compute CL gaussian5x5 filter. * * @param[in] shape Shape of the input and output tensors. @@ -106,7 +109,7 @@ BOOST_DATA_TEST_CASE(Configuration, (SmallShapes() + LargeShapes()) * BorderMode // Validate valid region const ValidRegion src_valid_region = shape_to_valid_region(shape); - const ValidRegion dst_valid_region = shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, BorderSize(2)); + const ValidRegion dst_valid_region = shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, border_size); validate(src.info()->valid_region(), src_valid_region); validate(dst.info()->valid_region(), dst_valid_region); @@ -140,7 +143,7 @@ BOOST_DATA_TEST_CASE(RunSmall, SmallShapes() * BorderModes(), shape, border_mode RawTensor ref_dst = Reference::compute_reference_gaussian5x5(shape, border_mode, border_value); // Validate output - validate(CLAccessor(dst), ref_dst, shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, BorderSize(2))); + validate(CLAccessor(dst), ref_dst, shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, border_size)); } BOOST_TEST_DECORATOR(*boost::unit_test::label("nightly")) @@ -157,7 +160,7 @@ BOOST_DATA_TEST_CASE(RunLarge, LargeShapes() * BorderModes(), shape, border_mode RawTensor ref_dst = Reference::compute_reference_gaussian5x5(shape, border_mode, border_value); // Validate output - validate(CLAccessor(dst), ref_dst, shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, BorderSize(2))); + validate(CLAccessor(dst), ref_dst, shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, border_size)); } BOOST_AUTO_TEST_SUITE_END() diff --git a/tests/validation/CL/NonLinearFilter.cpp b/tests/validation/CL/NonLinearFilter.cpp index 5288f951bf..4a487d6ed4 100644 --- a/tests/validation/CL/NonLinearFilter.cpp +++ b/tests/validation/CL/NonLinearFilter.cpp @@ -125,11 +125,7 @@ BOOST_DATA_TEST_CASE(Configuration, (SmallShapes() + LargeShapes()) // Validate valid region const ValidRegion src_valid_region = shape_to_valid_region(shape); - ValidRegion dst_valid_region = shape_to_valid_region(shape); - if(border_mode == BorderMode::UNDEFINED) - { - dst_valid_region = shape_to_valid_region_undefined_border(shape, BorderSize(half_mask_size)); - } + const ValidRegion dst_valid_region = shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, BorderSize(half_mask_size)); validate(src.info()->valid_region(), src_valid_region); validate(dst.info()->valid_region(), dst_valid_region); @@ -171,11 +167,7 @@ BOOST_DATA_TEST_CASE(RunSmall, SmallShapes() RawTensor ref_dst = Reference::compute_reference_non_linear_filter(shape, function, mask_size, pattern, mask, border_mode, constant_border_value); // Calculate valid region - ValidRegion valid_region = shape_to_valid_region(shape); - if(border_mode == BorderMode::UNDEFINED) - { - valid_region = shape_to_valid_region_undefined_border(shape, BorderSize(static_cast<int>(mask_size / 2))); - } + const ValidRegion valid_region = shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, BorderSize(static_cast<int>(mask_size / 2))); // Validate output validate(CLAccessor(dst), ref_dst, valid_region); @@ -202,11 +194,7 @@ BOOST_DATA_TEST_CASE(RunLarge, LargeShapes() RawTensor ref_dst = Reference::compute_reference_non_linear_filter(shape, function, mask_size, pattern, mask, border_mode, constant_border_value); // Calculate valid region - ValidRegion valid_region = shape_to_valid_region(shape); - if(border_mode == BorderMode::UNDEFINED) - { - valid_region = shape_to_valid_region_undefined_border(shape, BorderSize(static_cast<int>(mask_size / 2))); - } + const ValidRegion valid_region = shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, BorderSize(static_cast<int>(mask_size / 2))); // Validate output validate(CLAccessor(dst), ref_dst, valid_region); diff --git a/tests/validation/CL/Sobel3x3.cpp b/tests/validation/CL/Sobel3x3.cpp index 382e296180..fbd7185a48 100644 --- a/tests/validation/CL/Sobel3x3.cpp +++ b/tests/validation/CL/Sobel3x3.cpp @@ -53,6 +53,9 @@ using namespace arm_compute::test::validation; namespace { +constexpr unsigned int filter_size = 3; /** Size of the kernel/filter in number of elements. */ +constexpr BorderSize border_size(filter_size / 2); /** Border size of the kernel/filter around its central element. */ + /** Compute CL Sobel 3x3 function. * * @param[in] shape Shape of the input and output tensors. @@ -121,11 +124,7 @@ BOOST_DATA_TEST_CASE(Configuration, (SmallShapes() + LargeShapes()) * BorderMode // Validate valid region const ValidRegion src_valid_region = shape_to_valid_region(shape); - ValidRegion dst_valid_region = shape_to_valid_region(shape); - if(border_mode == BorderMode::UNDEFINED) - { - dst_valid_region = shape_to_valid_region_undefined_border(shape, BorderSize(1)); - } + const ValidRegion dst_valid_region = shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, border_size); validate(src.info()->valid_region(), src_valid_region); validate(dst_x.info()->valid_region(), dst_valid_region); @@ -169,11 +168,7 @@ BOOST_DATA_TEST_CASE(RunSmall, SmallShapes() * BorderModes(), shape, border_mode std::pair<RawTensor, RawTensor> ref_dst = Reference::compute_reference_sobel_3x3(shape, border_mode, constant_border_value); // Calculate valid region - ValidRegion valid_region = shape_to_valid_region(shape); - if(border_mode == BorderMode::UNDEFINED) - { - valid_region = shape_to_valid_region_undefined_border(shape, BorderSize(1)); - } + const ValidRegion valid_region = shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, border_size); // Validate output validate(CLAccessor(dst.first), ref_dst.first, valid_region); @@ -200,11 +195,7 @@ BOOST_DATA_TEST_CASE(RunLarge, LargeShapes() * BorderModes(), shape, border_mode std::pair<RawTensor, RawTensor> ref_dst = Reference::compute_reference_sobel_3x3(shape, border_mode, constant_border_value); // Calculate valid region - ValidRegion valid_region = shape_to_valid_region(shape); - if(border_mode == BorderMode::UNDEFINED) - { - valid_region = shape_to_valid_region_undefined_border(shape, BorderSize(1)); - } + const ValidRegion valid_region = shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, border_size); // Validate output validate(CLAccessor(dst.first), ref_dst.first, valid_region); diff --git a/tests/validation/CL/Sobel5x5.cpp b/tests/validation/CL/Sobel5x5.cpp index b653808701..263e57e43f 100644 --- a/tests/validation/CL/Sobel5x5.cpp +++ b/tests/validation/CL/Sobel5x5.cpp @@ -53,6 +53,9 @@ using namespace arm_compute::test::validation; namespace { +constexpr unsigned int filter_size = 5; /** Size of the kernel/filter in number of elements. */ +constexpr BorderSize border_size(filter_size / 2); /** Border size of the kernel/filter around its central element. */ + /** Compute CL Sobel 5x5 function. * * @param[in] shape Shape of the input and output tensors. @@ -121,11 +124,7 @@ BOOST_DATA_TEST_CASE(Configuration, (SmallShapes() + LargeShapes()) * BorderMode // Validate valid region const ValidRegion src_valid_region = shape_to_valid_region(shape); - ValidRegion dst_valid_region = shape_to_valid_region(shape); - if(border_mode == BorderMode::UNDEFINED) - { - dst_valid_region = shape_to_valid_region_undefined_border(shape, BorderSize(2)); - } + const ValidRegion dst_valid_region = shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, border_size); validate(src.info()->valid_region(), src_valid_region); validate(dst_x.info()->valid_region(), dst_valid_region); @@ -168,11 +167,7 @@ BOOST_DATA_TEST_CASE(RunSmall, SmallShapes() * BorderModes(), shape, border_mode std::pair<RawTensor, RawTensor> ref_dst = Reference::compute_reference_sobel_5x5(shape, border_mode, constant_border_value); // Calculate valid region - ValidRegion valid_region = shape_to_valid_region(shape); - if(border_mode == BorderMode::UNDEFINED) - { - valid_region = shape_to_valid_region_undefined_border(shape, BorderSize(2)); - } + const ValidRegion valid_region = shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, border_size); // Validate output validate(CLAccessor(dst.first), ref_dst.first, valid_region); @@ -199,11 +194,7 @@ BOOST_DATA_TEST_CASE(RunLarge, LargeShapes() * BorderModes(), shape, border_mode std::pair<RawTensor, RawTensor> ref_dst = Reference::compute_reference_sobel_5x5(shape, border_mode, constant_border_value); // Calculate valid region - ValidRegion valid_region = shape_to_valid_region(shape); - if(border_mode == BorderMode::UNDEFINED) - { - valid_region = shape_to_valid_region_undefined_border(shape, BorderSize(2)); - } + const ValidRegion valid_region = shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, border_size); // Validate output validate(CLAccessor(dst.first), ref_dst.first, valid_region); diff --git a/tests/validation/NEON/Box3x3.cpp b/tests/validation/NEON/Box3x3.cpp index c05167682a..c673ff1be3 100644 --- a/tests/validation/NEON/Box3x3.cpp +++ b/tests/validation/NEON/Box3x3.cpp @@ -52,6 +52,9 @@ using namespace arm_compute::test::validation; namespace { +constexpr unsigned int filter_size = 3; /** Size of the kernel/filter in number of elements. */ +constexpr BorderSize border_size(filter_size / 2); /** Border size of the kernel/filter around its central element. */ + /** Compute Neon box3x3 filter. * * @param[in] shape Shape of the input and output tensors. @@ -107,7 +110,7 @@ BOOST_DATA_TEST_CASE(Configuration, (SmallShapes() + LargeShapes()) * BorderMode // Validate valid region const ValidRegion src_valid_region = shape_to_valid_region(shape); - const ValidRegion dst_valid_region = shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, BorderSize(1)); + const ValidRegion dst_valid_region = shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, border_size); validate(src.info()->valid_region(), src_valid_region); validate(dst.info()->valid_region(), dst_valid_region); @@ -141,7 +144,7 @@ BOOST_DATA_TEST_CASE(RunSmall, SmallShapes() * BorderModes(), shape, border_mode RawTensor ref_dst = Reference::compute_reference_box3x3(shape, border_mode, border_value); // Validate output - validate(NEAccessor(dst), ref_dst, shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, BorderSize(1))); + validate(NEAccessor(dst), ref_dst, shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, border_size)); } BOOST_TEST_DECORATOR(*boost::unit_test::label("nightly")) @@ -158,7 +161,7 @@ BOOST_DATA_TEST_CASE(RunLarge, LargeShapes() * BorderModes(), shape, border_mode RawTensor ref_dst = Reference::compute_reference_box3x3(shape, border_mode, border_value); // Validate output - validate(NEAccessor(dst), ref_dst, shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, BorderSize(1))); + validate(NEAccessor(dst), ref_dst, shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, border_size)); } BOOST_AUTO_TEST_SUITE_END() diff --git a/tests/validation/NEON/Gaussian3x3.cpp b/tests/validation/NEON/Gaussian3x3.cpp index f33b63f919..b69df9ac24 100644 --- a/tests/validation/NEON/Gaussian3x3.cpp +++ b/tests/validation/NEON/Gaussian3x3.cpp @@ -52,6 +52,9 @@ using namespace arm_compute::test::validation; namespace { +constexpr unsigned int filter_size = 3; /** Size of the kernel/filter in number of elements. */ +constexpr BorderSize border_size(filter_size / 2); /** Border size of the kernel/filter around its central element. */ + /** Compute Neon gaussian3x3 filter. * * @param[in] shape Shape of the input and output tensors. @@ -107,7 +110,7 @@ BOOST_DATA_TEST_CASE(Configuration, (SmallShapes() + LargeShapes()) * BorderMode // Validate valid region const ValidRegion src_valid_region = shape_to_valid_region(shape); - const ValidRegion dst_valid_region = shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, BorderSize(1)); + const ValidRegion dst_valid_region = shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, border_size); validate(src.info()->valid_region(), src_valid_region); validate(dst.info()->valid_region(), dst_valid_region); @@ -141,7 +144,7 @@ BOOST_DATA_TEST_CASE(RunSmall, SmallShapes() * BorderModes(), shape, border_mode RawTensor ref_dst = Reference::compute_reference_gaussian3x3(shape, border_mode, border_value); // Validate output - validate(NEAccessor(dst), ref_dst, shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, BorderSize(1))); + validate(NEAccessor(dst), ref_dst, shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, border_size)); } BOOST_TEST_DECORATOR(*boost::unit_test::label("nightly")) @@ -158,7 +161,7 @@ BOOST_DATA_TEST_CASE(RunLarge, LargeShapes() * BorderModes(), shape, border_mode RawTensor ref_dst = Reference::compute_reference_gaussian3x3(shape, border_mode, border_value); // Validate output - validate(NEAccessor(dst), ref_dst, shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, BorderSize(1))); + validate(NEAccessor(dst), ref_dst, shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, border_size)); } BOOST_AUTO_TEST_SUITE_END() diff --git a/tests/validation/NEON/Gaussian5x5.cpp b/tests/validation/NEON/Gaussian5x5.cpp index a553078d6c..bb48961652 100644 --- a/tests/validation/NEON/Gaussian5x5.cpp +++ b/tests/validation/NEON/Gaussian5x5.cpp @@ -54,6 +54,9 @@ using namespace arm_compute::test::validation; namespace { +constexpr unsigned int filter_size = 5; /** Size of the kernel/filter in number of elements. */ +constexpr BorderSize border_size(filter_size / 2); /** Border size of the kernel/filter around its central element. */ + /** Compute Neon gaussian5x5 filter. * * @param[in] shape Shape of the input and output tensors. @@ -109,7 +112,7 @@ BOOST_DATA_TEST_CASE(Configuration, (SmallShapes() + LargeShapes()) * BorderMode // Validate valid region const ValidRegion src_valid_region = shape_to_valid_region(shape); - const ValidRegion dst_valid_region = shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, BorderSize(2)); + const ValidRegion dst_valid_region = shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, border_size); validate(src.info()->valid_region(), src_valid_region); validate(dst.info()->valid_region(), dst_valid_region); @@ -143,7 +146,7 @@ BOOST_DATA_TEST_CASE(RunSmall, SmallShapes() * BorderModes(), shape, border_mode RawTensor ref_dst = Reference::compute_reference_gaussian5x5(shape, border_mode, border_value); // Validate output - validate(NEAccessor(dst), ref_dst, shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, BorderSize(2))); + validate(NEAccessor(dst), ref_dst, shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, border_size)); } BOOST_TEST_DECORATOR(*boost::unit_test::label("nightly")) @@ -160,7 +163,7 @@ BOOST_DATA_TEST_CASE(RunLarge, LargeShapes() * BorderModes(), shape, border_mode RawTensor ref_dst = Reference::compute_reference_gaussian5x5(shape, border_mode, border_value); // Validate output - validate(NEAccessor(dst), ref_dst, shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, BorderSize(2))); + validate(NEAccessor(dst), ref_dst, shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, border_size)); } BOOST_AUTO_TEST_SUITE_END() diff --git a/tests/validation/NEON/NonLinearFilter.cpp b/tests/validation/NEON/NonLinearFilter.cpp index 3b71eaa9c6..c5d5087d39 100644 --- a/tests/validation/NEON/NonLinearFilter.cpp +++ b/tests/validation/NEON/NonLinearFilter.cpp @@ -125,11 +125,7 @@ BOOST_DATA_TEST_CASE(Configuration, (SmallShapes() + LargeShapes()) // Validate valid region const ValidRegion src_valid_region = shape_to_valid_region(shape); - ValidRegion dst_valid_region = shape_to_valid_region(shape); - if(border_mode == BorderMode::UNDEFINED) - { - dst_valid_region = shape_to_valid_region_undefined_border(shape, BorderSize(half_mask_size)); - } + const ValidRegion dst_valid_region = shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, BorderSize(half_mask_size)); validate(src.info()->valid_region(), src_valid_region); validate(dst.info()->valid_region(), dst_valid_region); @@ -171,11 +167,7 @@ BOOST_DATA_TEST_CASE(RunSmall, SmallShapes() RawTensor ref_dst = Reference::compute_reference_non_linear_filter(shape, function, mask_size, pattern, mask, border_mode, constant_border_value); // Calculate valid region - ValidRegion valid_region = shape_to_valid_region(shape); - if(border_mode == BorderMode::UNDEFINED) - { - valid_region = shape_to_valid_region_undefined_border(shape, BorderSize(static_cast<int>(mask_size / 2))); - } + const ValidRegion valid_region = shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, BorderSize(static_cast<int>(mask_size / 2))); // Validate output validate(NEAccessor(dst), ref_dst, valid_region); @@ -202,11 +194,7 @@ BOOST_DATA_TEST_CASE(RunLarge, LargeShapes() RawTensor ref_dst = Reference::compute_reference_non_linear_filter(shape, function, mask_size, pattern, mask, border_mode, constant_border_value); // Calculate valid region - ValidRegion valid_region = shape_to_valid_region(shape); - if(border_mode == BorderMode::UNDEFINED) - { - valid_region = shape_to_valid_region_undefined_border(shape, BorderSize(static_cast<int>(mask_size / 2))); - } + const ValidRegion valid_region = shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, BorderSize(static_cast<int>(mask_size / 2))); // Validate output validate(NEAccessor(dst), ref_dst, valid_region); diff --git a/tests/validation/NEON/Sobel3x3.cpp b/tests/validation/NEON/Sobel3x3.cpp index 8324614f0d..c6c58f1a37 100644 --- a/tests/validation/NEON/Sobel3x3.cpp +++ b/tests/validation/NEON/Sobel3x3.cpp @@ -52,6 +52,9 @@ using namespace arm_compute::test::validation; namespace { +constexpr unsigned int filter_size = 3; /** Size of the kernel/filter in number of elements. */ +constexpr BorderSize border_size(filter_size / 2); /** Border size of the kernel/filter around its central element. */ + /** Compute Neon Sobel 3x3 function. * * @param[in] shape Shape of the input and output tensors. @@ -120,11 +123,7 @@ BOOST_DATA_TEST_CASE(Configuration, (SmallShapes() + LargeShapes()) * BorderMode // Validate valid region const ValidRegion src_valid_region = shape_to_valid_region(shape); - ValidRegion dst_valid_region = shape_to_valid_region(shape); - if(border_mode == BorderMode::UNDEFINED) - { - dst_valid_region = shape_to_valid_region_undefined_border(shape, BorderSize(1)); - } + const ValidRegion dst_valid_region = shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, border_size); validate(src.info()->valid_region(), src_valid_region); validate(dst_x.info()->valid_region(), dst_valid_region); @@ -168,11 +167,7 @@ BOOST_DATA_TEST_CASE(RunSmall, SmallShapes() * BorderModes(), shape, border_mode std::pair<RawTensor, RawTensor> ref_dst = Reference::compute_reference_sobel_3x3(shape, border_mode, constant_border_value); // Calculate valid region - ValidRegion valid_region = shape_to_valid_region(shape); - if(border_mode == BorderMode::UNDEFINED) - { - valid_region = shape_to_valid_region_undefined_border(shape, BorderSize(1)); - } + const ValidRegion valid_region = shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, border_size); // Validate output validate(NEAccessor(dst.first), ref_dst.first, valid_region); @@ -199,11 +194,7 @@ BOOST_DATA_TEST_CASE(RunLarge, LargeShapes() * BorderModes(), shape, border_mode std::pair<RawTensor, RawTensor> ref_dst = Reference::compute_reference_sobel_3x3(shape, border_mode, constant_border_value); // Calculate valid region - ValidRegion valid_region = shape_to_valid_region(shape); - if(border_mode == BorderMode::UNDEFINED) - { - valid_region = shape_to_valid_region_undefined_border(shape, BorderSize(1)); - } + const ValidRegion valid_region = shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, border_size); // Validate output validate(NEAccessor(dst.first), ref_dst.first, valid_region); diff --git a/tests/validation/NEON/Sobel5x5.cpp b/tests/validation/NEON/Sobel5x5.cpp index bb2d7baf79..195afa6922 100644 --- a/tests/validation/NEON/Sobel5x5.cpp +++ b/tests/validation/NEON/Sobel5x5.cpp @@ -52,6 +52,9 @@ using namespace arm_compute::test::validation; namespace { +constexpr unsigned int filter_size = 5; /** Size of the kernel/filter in number of elements. */ +constexpr BorderSize border_size(filter_size / 2); /** Border size of the kernel/filter around its central element. */ + /** Compute Neon Sobel 5x5 function. * * @param[in] shape Shape of the input and output tensors. @@ -120,11 +123,7 @@ BOOST_DATA_TEST_CASE(Configuration, (SmallShapes() + LargeShapes()) * BorderMode // Validate valid region const ValidRegion src_valid_region = shape_to_valid_region(shape); - ValidRegion dst_valid_region = shape_to_valid_region(shape); - if(border_mode == BorderMode::UNDEFINED) - { - dst_valid_region = shape_to_valid_region_undefined_border(shape, BorderSize(2)); - } + const ValidRegion dst_valid_region = shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, border_size); validate(src.info()->valid_region(), src_valid_region); validate(dst_x.info()->valid_region(), dst_valid_region); @@ -168,11 +167,7 @@ BOOST_DATA_TEST_CASE(RunSmall, SmallShapes() * BorderModes(), shape, border_mode std::pair<RawTensor, RawTensor> ref_dst = Reference::compute_reference_sobel_5x5(shape, border_mode, constant_border_value); // Calculate valid region - ValidRegion valid_region = shape_to_valid_region(shape); - if(border_mode == BorderMode::UNDEFINED) - { - valid_region = shape_to_valid_region_undefined_border(shape, BorderSize(2)); - } + const ValidRegion valid_region = shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, border_size); // Validate output validate(NEAccessor(dst.first), ref_dst.first, valid_region); @@ -199,11 +194,7 @@ BOOST_DATA_TEST_CASE(RunLarge, LargeShapes() * BorderModes(), shape, border_mode std::pair<RawTensor, RawTensor> ref_dst = Reference::compute_reference_sobel_5x5(shape, border_mode, constant_border_value); // Calculate valid region - ValidRegion valid_region = shape_to_valid_region(shape); - if(border_mode == BorderMode::UNDEFINED) - { - valid_region = shape_to_valid_region_undefined_border(shape, BorderSize(2)); - } + const ValidRegion valid_region = shape_to_valid_region(shape, border_mode == BorderMode::UNDEFINED, border_size); // Validate output validate(NEAccessor(dst.first), ref_dst.first, valid_region); diff --git a/tests/validation/TensorOperations.h b/tests/validation/TensorOperations.h index 843c52fec4..5557cfc2df 100644 --- a/tests/validation/TensorOperations.h +++ b/tests/validation/TensorOperations.h @@ -716,7 +716,7 @@ template <typename T> void non_linear_filter(const Tensor<T> &in, Tensor<T> &out, NonLinearFilterFunction function, unsigned int mask_size, MatrixPattern pattern, const uint8_t *mask, BorderMode border_mode, uint8_t constant_border_value) { - ARM_COMPUTE_ERROR_ON(MatrixPattern::OTHER == pattern && nullptr == mask); + ARM_COMPUTE_ERROR_ON(pattern == MatrixPattern::OTHER && mask == nullptr); using intermediate_type = typename common_promoted_signed_type<T>::intermediate_type; @@ -725,11 +725,7 @@ void non_linear_filter(const Tensor<T> &in, Tensor<T> &out, NonLinearFilterFunct std::vector<intermediate_type> vals(sq_mask_size); intermediate_type current_value = 0; - ValidRegion valid_region = shape_to_valid_region(in.shape()); - if(border_mode == BorderMode::UNDEFINED) - { - valid_region = shape_to_valid_region_undefined_border(in.shape(), BorderSize(half_mask_size)); - } + const ValidRegion valid_region = shape_to_valid_region(in.shape(), border_mode == BorderMode::UNDEFINED, BorderSize(half_mask_size)); for(int element_idx = 0, count = 0, index = 0; element_idx < in.num_elements(); ++element_idx, count = 0, index = 0) { |