| 21 | |
| 22 | BOOST_FIXTURE_TEST_SUITE(data, reset_device_fixture) |
| 23 | BOOST_AUTO_TEST_CASE(page_table) { |
| 24 | rt::range_store::rect full_range{rt::id<3>{0, 0, 0}, |
| 25 | rt::range<3>{16, 16, 16}}; |
| 26 | rt::range_store::rect fill_subrange{rt::id<3>{2, 3, 4}, |
| 27 | rt::range<3>{4, 4, 4}}; |
| 28 | rt::range_store::rect intersection_subrange(rt::id<3>{2, 2, 2}, |
| 29 | rt::range<3>{4, 4, 4}); |
| 30 | |
| 31 | struct input_configuration { |
| 32 | rt::range_store::rect page_table_size; |
| 33 | rt::range_store::rect filled_subrange; |
| 34 | rt::range_store::rect intersection_subrange; |
| 35 | std::vector<rt::range_store::rect> expected_intersections; |
| 36 | }; |
| 37 | |
| 38 | // TODO Test more configurations |
| 39 | std::vector<input_configuration> configurations { |
| 40 | { |
| 41 | rt::range_store::rect{rt::id<3>{0, 0, 0}, rt::range<3>{16, 16, 16}}, |
| 42 | rt::range_store::rect{rt::id<3>{2, 3, 4}, rt::range<3>{4, 4, 4}}, |
| 43 | rt::range_store::rect{rt::id<3>{2, 2, 2}, rt::range<3>{4, 4, 4}}, |
| 44 | { |
| 45 | rt::range_store::rect{rt::id<3>{2,3,4}, rt::range<3>{4,3,2}} |
| 46 | } |
| 47 | } |
| 48 | }; |
| 49 | |
| 50 | for (auto config : configurations) { |
| 51 | |
| 52 | auto full_range = config.page_table_size; |
| 53 | auto fill_subrange = config.filled_subrange; |
| 54 | auto intersection_subrange = config.intersection_subrange; |
| 55 | |
| 56 | rt::range_store pt(full_range.second); |
| 57 | |
| 58 | BOOST_CHECK( |
| 59 | pt.entire_range_equals(full_range, rt::range_store::data_state::empty)); |
| 60 | BOOST_CHECK(pt.entire_range_empty(full_range)); |
| 61 | BOOST_CHECK(!pt.entire_range_filled(full_range)); |
| 62 | BOOST_CHECK(pt.get_size() == full_range.second); |
| 63 | |
| 64 | pt.add(fill_subrange); |
| 65 | BOOST_CHECK(!pt.entire_range_filled(full_range)); |
| 66 | BOOST_CHECK(!pt.entire_range_empty(full_range)); |
| 67 | BOOST_CHECK(pt.entire_range_filled(fill_subrange)); |
| 68 | |
| 69 | std::vector<rt::range_store::rect> intersections; |
| 70 | pt.intersections_with(intersection_subrange, intersections); |
| 71 | // We require that the set of returned subranges is the same, but not |
| 72 | // necessarily the order in which the subranges are returned |
| 73 | BOOST_CHECK(intersections.size() == config.expected_intersections.size()); |
| 74 | for (auto sub_range : intersections) { |
| 75 | auto it = std::find(config.expected_intersections.begin(), |
| 76 | config.expected_intersections.end(), sub_range); |
| 77 | BOOST_CHECK(it != config.expected_intersections.end()); |
| 78 | } |
| 79 | } |
| 80 | } |
no test coverage detected