// SPDX-License-Identifier: MPL-2.0 #include "aare/ROI.hpp" #include namespace aare { TEST_CASE("merge ROIs", "[utility_functions]") { SECTION("not fully contiguous") { std::vector rois = {ROI{20, 30, 50, 60}, ROI{20, 30, 40, 50}, ROI{10, 20, 40, 50}}; auto merged_rois = merge_consecutive_rois(rois); REQUIRE(merged_rois.size() == 2); REQUIRE(merged_rois[0] == ROI{10, 30, 40, 50}); REQUIRE(merged_rois[1] == ROI{20, 30, 50, 60}); } SECTION("complex merge") { std::vector rois = {ROI{40, 50, 20, 30}, ROI{10, 20, 30, 40}, ROI{10, 20, 50, 60}, ROI{20, 30, 30, 40}, ROI{60, 70, 30, 40}, ROI{60, 70, 20, 30}, ROI{20, 30, 20, 30}, ROI{10, 20, 20, 30}}; auto merged_rois = merge_consecutive_rois(rois); REQUIRE(merged_rois.size() == 4); REQUIRE(merged_rois[0] == ROI{10, 30, 20, 40}); REQUIRE(merged_rois[1] == ROI{10, 20, 50, 60}); REQUIRE(merged_rois[2] == ROI{40, 50, 20, 30}); REQUIRE(merged_rois[3] == ROI{60, 70, 20, 40}); } SECTION("horizontally aligned") { std::vector rois = {ROI{10, 20, 30, 40}, ROI{10, 20, 50, 60}, ROI{10, 20, 20, 30}}; auto merged_rois = merge_consecutive_rois(rois); REQUIRE(merged_rois.size() == 2); REQUIRE(merged_rois[0] == ROI{10, 20, 20, 40}); REQUIRE(merged_rois[1] == ROI{10, 20, 50, 60}); } SECTION("vertically aligned") { std::vector rois = {ROI{10, 20, 30, 40}, ROI{30, 40, 30, 40}, ROI{20, 30, 30, 40}}; auto merged_rois = merge_consecutive_rois(rois); REQUIRE(merged_rois.size() == 1); REQUIRE(merged_rois[0] == ROI{10, 40, 30, 40}); } } } // namespace aare