aboutsummaryrefslogtreecommitdiffstats
path: root/host/tests
diff options
context:
space:
mode:
authorLane Kolbly <lane.kolbly@ni.com>2022-03-09 14:54:31 -0600
committerAaron Rossetto <aaron.rossetto@ni.com>2022-03-14 15:49:41 -0500
commit74f371fcd3ec126d132fdf69b4f504e6157a6147 (patch)
treeb899c401c83ec7fdaae74c42dd310ac0b795aa73 /host/tests
parentb14480265ddeb1e6b4ad9d52c11b4c39e36fd379 (diff)
downloaduhd-74f371fcd3ec126d132fdf69b4f504e6157a6147.tar.gz
uhd-74f371fcd3ec126d132fdf69b4f504e6157a6147.tar.bz2
uhd-74f371fcd3ec126d132fdf69b4f504e6157a6147.zip
host: Create meta_range_t::as_monotonic
In order to perform certain operations (start/stop/step), meta_range_t objects must be "monotonic", meaning that the subranges composing it are sorted and non-overlapping. This commit creates a method which takes a non-monotonic meta_range_t containing no non-continuous subranges and converts it into a monotonic meta_range_t.
Diffstat (limited to 'host/tests')
-rw-r--r--host/tests/ranges_test.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/host/tests/ranges_test.cpp b/host/tests/ranges_test.cpp
index 223560289..126b4c4e9 100644
--- a/host/tests/ranges_test.cpp
+++ b/host/tests/ranges_test.cpp
@@ -90,3 +90,23 @@ BOOST_AUTO_TEST_CASE(test_ranges_compare)
BOOST_CHECK(range == n_range);
BOOST_CHECK(range != d_range);
}
+
+BOOST_AUTO_TEST_CASE(test_meta_range_monotonize)
+{
+ // This meta_range is both not sorted and contains overlapping (and
+ // fully contained) sub-ranges.
+ meta_range_t mr;
+ mr.push_back(range_t(3.0, 4.0));
+ mr.push_back(range_t(1.0, 2.0));
+ mr.push_back(range_t(2.1, 3.1));
+ mr.push_back(range_t(1.4, 1.6));
+
+ meta_range_t monotonic_mr = mr.as_monotonic();
+ BOOST_CHECK(monotonic_mr.start() == 1.0);
+ BOOST_CHECK(monotonic_mr.stop() == 4.0);
+
+ BOOST_CHECK_CLOSE(monotonic_mr.at(0).start(), 1.0, tolerance);
+ BOOST_CHECK_CLOSE(monotonic_mr.at(0).stop(), 2.0, tolerance);
+ BOOST_CHECK_CLOSE(monotonic_mr.at(1).start(), 2.1, tolerance);
+ BOOST_CHECK_CLOSE(monotonic_mr.at(1).stop(), 4.0, tolerance);
+}