diff --git a/examples/sample-data/bag_163_vr.bag b/examples/sample-data/bag_163_vr.bag new file mode 100644 index 0000000000..384b667481 Binary files /dev/null and b/examples/sample-data/bag_163_vr.bag differ diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 7e6d0ce859..9bb7fcb85f 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -7,10 +7,10 @@ set(CMAKE_DEBUG_POSTFIX "d") set(TEST_SOURCE_FILES test_main.cpp - test_bag_georefmetadata_layer.cpp test_bag_compounddatatype.cpp test_bag_dataset.cpp test_bag_descriptor.cpp + test_bag_georefmetadata_layer.cpp test_bag_interleavedlegacylayer.cpp test_bag_interleavedlegacylayerdescriptor.cpp test_bag_metadata.cpp diff --git a/tests/test_bag_vrrefinements.cpp b/tests/test_bag_vrrefinements.cpp index 2ebafb7fc2..e9cde22700 100644 --- a/tests/test_bag_vrrefinements.cpp +++ b/tests/test_bag_vrrefinements.cpp @@ -391,6 +391,14 @@ TEST_CASE("test vr refinements create open", "[vrrefinements][create][open]") pVrRefinementsDescriptor->getMinMaxUncertainty(); CHECK(std::tuple(kExpectedMinUncertainty, kExpectedMaxUncertainty) == minMaxUncertainty); + + // Verify varres_refinements layer dimensions... + auto vrRef = pDataset->getVRRefinements(); + REQUIRE(vrRef); + const auto vrRefDesc = vrRef->getDescriptor(); + auto vrRefDescDims = vrRefDesc->getDims(); + CHECK(std::get<0>(vrRefDescDims) == 0); + CHECK(std::get<1>(vrRefDescDims) == 0); } } @@ -425,27 +433,65 @@ TEST_CASE("test vr refinements write read", "[vrrefinements][write][read]") pVrRefinements->getDescriptor()); CHECK(pDescriptor); - UNSCOPED_INFO("Write one record."); - constexpr BAG::VRRefinementsItem kExpectedItem0{9.8f, 0.654f}; + UNSCOPED_INFO("Write one VR refinement."); + { + constexpr BAG::VRRefinementsItem kExpectedItem0{9.8f, 0.654f}; + + const auto* buffer = reinterpret_cast(&kExpectedItem0); + + constexpr uint32_t kRowStart = 0; // unused + constexpr uint32_t kColumnStart = 0; + constexpr uint32_t kRowEnd = 0; // unused + constexpr uint32_t kColumnEnd = 0; + + REQUIRE_NOTHROW(pVrRefinements->write(kRowStart, kColumnStart, kRowEnd, + kColumnEnd, buffer)); + + UNSCOPED_INFO("Read the record back."); + auto result = pVrRefinements->read(kRowStart, kColumnStart, kRowEnd, kColumnEnd); + CHECK(result); - const auto* buffer = reinterpret_cast(&kExpectedItem0); + const auto* res = reinterpret_cast(result.data()); + UNSCOPED_INFO("Check the expected value of VRRefinementItem::depth."); + CHECK(res->depth == kExpectedItem0.depth); + UNSCOPED_INFO("Check the expected value of VRRefinementItem::depth_uncrt."); + CHECK(res->depth_uncrt == kExpectedItem0.depth_uncrt); + } + + UNSCOPED_INFO("Write another VR refinement."); + { + constexpr BAG::VRRefinementsItem kExpectedItem0{10.8f, 1.654f}; + + const auto* buffer = reinterpret_cast(&kExpectedItem0); - constexpr uint32_t kRowStart = 0; // unused - constexpr uint32_t kColumnStart = 0; - constexpr uint32_t kRowEnd = 0; // unused - constexpr uint32_t kColumnEnd = 0; + constexpr uint32_t kRowStart = 0; // unused + constexpr uint32_t kColumnStart = 1; + constexpr uint32_t kRowEnd = 0; // unused + constexpr uint32_t kColumnEnd = 1; - REQUIRE_NOTHROW(pVrRefinements->write(kRowStart, kColumnStart, kRowEnd, - kColumnEnd, buffer)); + REQUIRE_NOTHROW(pVrRefinements->write(kRowStart, kColumnStart, kRowEnd, + kColumnEnd, buffer)); - UNSCOPED_INFO("Read the record back."); - auto result = pVrRefinements->read(kRowStart, kColumnStart, kRowEnd, kColumnEnd); - CHECK(result); + UNSCOPED_INFO("Read the record back."); + auto result = pVrRefinements->read(kRowStart, kColumnStart, kRowEnd, kColumnEnd); + CHECK(result); + + const auto* res = reinterpret_cast(result.data()); + UNSCOPED_INFO("Check the expected value of VRRefinementItem::depth."); + CHECK(res->depth == kExpectedItem0.depth); + UNSCOPED_INFO("Check the expected value of VRRefinementItem::depth_uncrt."); + CHECK(res->depth_uncrt == kExpectedItem0.depth_uncrt); + } - const auto* res = reinterpret_cast(result.data()); - UNSCOPED_INFO("Check the expected value of VRRefinementItem::depth."); - CHECK(res->depth == kExpectedItem0.depth); - UNSCOPED_INFO("Check the expected value of VRRefinementItem::depth_uncrt."); - CHECK(res->depth_uncrt == kExpectedItem0.depth_uncrt); + // Re-open BAG file readonly and verify varres_refinements layer dimensions... + pDataset->close(); + const auto dataset = Dataset::open(tmpBagFile, BAG_OPEN_READONLY); + REQUIRE(dataset); + auto vrRef = dataset->getVRRefinements(); + REQUIRE(vrRef); + const auto vrRefDesc = vrRef->getDescriptor(); + auto vrRefDescDims = vrRefDesc->getDims(); + CHECK(std::get<0>(vrRefDescDims) == 1); + CHECK(std::get<1>(vrRefDescDims) == 2); } diff --git a/tests/test_vr_bag.cpp b/tests/test_vr_bag.cpp index 0cdec4e884..0c02c0310c 100644 --- a/tests/test_vr_bag.cpp +++ b/tests/test_vr_bag.cpp @@ -83,3 +83,42 @@ TEST_CASE("test VR BAG reading NBS", "[dataset][open][VR][NBS]") CHECK(std::get<0>(vrRefDescDims) == 1); CHECK(std::get<1>(vrRefDescDims) == 3750); } + +TEST_CASE("test VR BAG reading libbag 1.6.3", "[dataset][open][VR][1.6.3]") +{ + const std::string bagFileName{std::string{std::getenv("BAG_SAMPLES_PATH")} + + "/bag_163_vr.bag"}; + + const size_t kNumExpectedLayers = 4; // Elevation, Uncertainty, varres_metadata, varres_refinements + + SECTION("open read only") + { + const auto dataset = Dataset::open(bagFileName, BAG_OPEN_READONLY); + REQUIRE(dataset); + + CHECK(dataset->getLayerTypes().size() == kNumExpectedLayers); + + const uint32_t kExpectedRows = 529; + const uint32_t kExpectedCols = 579; + CHECK(dataset->getDescriptor().getVersion() == "1.6.3"); + auto dims = dataset->getDescriptor().getDims(); + CHECK(std::get<0>(dims) == kExpectedRows); + CHECK(std::get<1>(dims) == kExpectedCols); + + auto vrMeta = dataset->getVRMetadata(); + REQUIRE(vrMeta); + const auto vrMetaDesc = vrMeta->getDescriptor(); + auto vrMetaDescDims = vrMetaDesc->getDims(); + // VR metadata descriptor dims should be the same as BAG dataset dims... + CHECK(std::get<0>(vrMetaDescDims) == kExpectedRows); + CHECK(std::get<1>(vrMetaDescDims) == kExpectedCols); + + // Verify varres_refinements layer dimensions... + auto vrRef = dataset->getVRRefinements(); + REQUIRE(vrRef); + const auto vrRefDesc = vrRef->getDescriptor(); + auto vrRefDescDims = vrRefDesc->getDims(); + CHECK(std::get<0>(vrRefDescDims) == 1); + CHECK(std::get<1>(vrRefDescDims) == 2957372); + } +} \ No newline at end of file