paleolimbot commented on code in PR #45459:
URL: https://github.com/apache/arrow/pull/45459#discussion_r1975886996


##########
cpp/src/parquet/geometry_util_internal_test.cc:
##########
@@ -0,0 +1,455 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License.  You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied.  See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+#include <gmock/gmock.h>
+#include <gtest/gtest.h>
+#include <cmath>
+#include <cstring>
+
+#include "arrow/testing/gtest_util.h"
+
+#include "parquet/geometry_util_internal.h"
+#include "parquet/test_util.h"
+
+namespace parquet::geometry {
+
+TEST(TestGeometryUtil, TestBoundingBox) {
+  BoundingBox box;
+  EXPECT_EQ(box, BoundingBox({kInf, kInf, kInf, kInf}, {-kInf, -kInf, -kInf, 
-kInf}));
+  EXPECT_EQ(box.ToString(),
+            "BoundingBox [inf => -inf, inf => -inf, inf => -inf, inf => 
-inf]");
+
+  BoundingBox box_xyzm({-1, -2, -3, -4}, {1, 2, 3, 4});
+  BoundingBox box_xy({-10, -20, kInf, kInf}, {10, 20, -kInf, -kInf});
+  BoundingBox box_xyz({kInf, kInf, -30, kInf}, {-kInf, -kInf, 30, -kInf});
+  BoundingBox box_xym({kInf, kInf, kInf, -40}, {-kInf, -kInf, -kInf, 40});
+
+  box_xyzm.Merge(box_xy);
+  EXPECT_EQ(box_xyzm, BoundingBox({-10, -20, -3, -4}, {10, 20, 3, 4}));
+
+  box_xyzm.Merge(box_xyz);
+  EXPECT_EQ(box_xyzm, BoundingBox({-10, -20, -30, -4}, {10, 20, 30, 4}));
+
+  box_xyzm.Merge(box_xym);
+  EXPECT_EQ(box_xyzm, BoundingBox({-10, -20, -30, -40}, {10, 20, 30, 40}));
+
+  box_xyzm.Reset();
+  EXPECT_EQ(box_xyzm, BoundingBox());
+}
+
+struct WKBTestCase {
+  WKBTestCase() = default;
+  WKBTestCase(GeometryType x, Dimensions y, const std::vector<uint8_t>& z,
+              const std::vector<double>& box_values = {})
+      : geometry_type(x), dimensions(y), wkb(z) {
+    std::array<double, 4> mins = {kInf, kInf, kInf, kInf};
+    std::array<double, 4> maxes{-kInf, -kInf, -kInf, -kInf};
+
+    if (dimensions == Dimensions::XYM) {
+      mins = {box_values[0], box_values[1], kInf, box_values[2]};
+      maxes = {box_values[3], box_values[4], -kInf, box_values[5]};
+    } else {
+      size_t coord_size = box_values.size() / 2;
+      for (uint32_t i = 0; i < coord_size; i++) {
+        mins[i] = box_values[i];
+        maxes[i] = box_values[coord_size + i];
+      }
+    }
+
+    box = BoundingBox(mins, maxes);
+  }
+  WKBTestCase(const WKBTestCase& other) = default;
+
+  GeometryType geometry_type;
+  Dimensions dimensions;
+  std::vector<uint8_t> wkb;
+  BoundingBox box;
+};
+
+std::ostream& operator<<(std::ostream& os, const WKBTestCase& obj) {
+  uint32_t iso_wkb_geometry_type =
+      static_cast<int>(obj.dimensions) * 1000 + 
static_cast<int>(obj.geometry_type);
+  os << "WKBTestCase<" << iso_wkb_geometry_type << ">";
+  return os;
+}
+
+std::ostream& operator<<(std::ostream& os, const BoundingBox& obj) {
+  os << obj.ToString();
+  return os;
+}
+
+class WKBTestFixture : public ::testing::TestWithParam<WKBTestCase> {
+ protected:
+  WKBTestCase test_case;
+};
+
+TEST_P(WKBTestFixture, TestWKBBounderNonEmpty) {
+  auto item = GetParam();
+
+  WKBGeometryBounder bounder;
+  EXPECT_EQ(bounder.Bounds(), BoundingBox());
+
+  ASSERT_OK(bounder.ReadGeometry(item.wkb.data(), item.wkb.size()));
+
+  EXPECT_EQ(bounder.Bounds(), item.box);
+  uint32_t wkb_type =
+      static_cast<int>(item.dimensions) * 1000 + 
static_cast<int>(item.geometry_type);
+  EXPECT_THAT(bounder.GeometryTypes(), 
::testing::ElementsAre(::testing::Eq(wkb_type)));
+
+  bounder.Reset();
+  EXPECT_EQ(bounder.Bounds(), BoundingBox());
+  EXPECT_TRUE(bounder.GeometryTypes().empty());
+}
+
+INSTANTIATE_TEST_SUITE_P(
+    TestGeometryUtil, WKBTestFixture,
+    ::testing::Values(
+        // POINT (30 10)
+        WKBTestCase(GeometryType::POINT, Dimensions::XY,
+                    {0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00,
+                     0x3e, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 
0x40},
+                    {30, 10, 30, 10}),
+        // POINT Z (30 10 40)
+        WKBTestCase(GeometryType::POINT, Dimensions::XYZ,
+                    {0x01, 0xe9, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00,
+                     0x00, 0x3e, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x24,
+                     0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x40},
+                    {30, 10, 40, 30, 10, 40}),
+        // POINT M (30 10 300)
+        WKBTestCase(GeometryType::POINT, Dimensions::XYM,
+                    {0x01, 0xd1, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00,
+                     0x00, 0x3e, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x24,
+                     0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x72, 0x40},
+                    {30, 10, 300, 30, 10, 300}),
+        // POINT ZM (30 10 40 300)
+        WKBTestCase(GeometryType::POINT, Dimensions::XYZM,
+                    {0x01, 0xb9, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00,
+                     0x00, 0x3e, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x24,
+                     0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x40, 
0x00,
+                     0x00, 0x00, 0x00, 0x00, 0xc0, 0x72, 0x40},
+                    {30, 10, 40, 300, 30, 10, 40, 300}),
+        // LINESTRING (30 10, 10 30, 40 40)
+        WKBTestCase(GeometryType::LINESTRING, Dimensions::XY,
+                    {0x01, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
0x00,
+                     0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x40, 0x00, 0x00, 
0x00,
+                     0x00, 0x00, 0x00, 0x24, 0x40, 0x00, 0x00, 0x00, 0x00, 
0x00,
+                     0x00, 0x24, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x3e,
+                     0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x40, 
0x00,
+                     0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x40},
+                    {10, 10, 40, 40}),
+        // LINESTRING Z (30 10 40, 10 30 40, 40 40 80)
+        WKBTestCase(GeometryType::LINESTRING, Dimensions::XYZ,
+                    {0x01, 0xea, 0x03, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
0x00, 0x00,
+                     0x00, 0x00, 0x00, 0x00, 0x3e, 0x40, 0x00, 0x00, 0x00, 
0x00, 0x00,
+                     0x00, 0x24, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x44, 0x40,
+                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x40, 0x00, 
0x00, 0x00,
+                     0x00, 0x00, 0x00, 0x3e, 0x40, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00,
+                     0x44, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 
0x40, 0x00,
+                     0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x40, 0x00, 0x00, 
0x00, 0x00,
+                     0x00, 0x00, 0x54, 0x40},
+                    {10, 10, 40, 40, 40, 80}),
+        // LINESTRING M (30 10 300, 10 30 300, 40 40 1600)
+        WKBTestCase(GeometryType::LINESTRING, Dimensions::XYM,
+                    {0x01, 0xd2, 0x07, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
0x00, 0x00,
+                     0x00, 0x00, 0x00, 0x00, 0x3e, 0x40, 0x00, 0x00, 0x00, 
0x00, 0x00,
+                     0x00, 0x24, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 
0x72, 0x40,
+                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x40, 0x00, 
0x00, 0x00,
+                     0x00, 0x00, 0x00, 0x3e, 0x40, 0x00, 0x00, 0x00, 0x00, 
0x00, 0xc0,
+                     0x72, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 
0x40, 0x00,
+                     0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x40, 0x00, 0x00, 
0x00, 0x00,
+                     0x00, 0x00, 0x99, 0x40},
+                    {10, 10, 300, 40, 40, 1600}),
+        // LINESTRING ZM (30 10 40 300, 10 30 40 300, 40 40 80 1600)
+        WKBTestCase(GeometryType::LINESTRING, Dimensions::XYZM,
+                    {0x01, 0xba, 0x0b, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
0x00, 0x00,
+                     0x00, 0x00, 0x00, 0x00, 0x3e, 0x40, 0x00, 0x00, 0x00, 
0x00, 0x00,
+                     0x00, 0x24, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x44, 0x40,
+                     0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x72, 0x40, 0x00, 
0x00, 0x00,
+                     0x00, 0x00, 0x00, 0x24, 0x40, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00,
+                     0x3e, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 
0x40, 0x00,
+                     0x00, 0x00, 0x00, 0x00, 0xc0, 0x72, 0x40, 0x00, 0x00, 
0x00, 0x00,
+                     0x00, 0x00, 0x44, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x44,
+                     0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x40, 
0x00, 0x00,
+                     0x00, 0x00, 0x00, 0x00, 0x99, 0x40},
+                    {10, 10, 40, 300, 40, 40, 80, 1600}),
+        // POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))
+        WKBTestCase(GeometryType::POLYGON, Dimensions::XY,
+                    {0x01, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 
0x05, 0x00,
+                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 
0x40, 0x00,
+                     0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x40, 0x00, 0x00, 
0x00, 0x00,
+                     0x00, 0x00, 0x44, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x44,
+                     0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x40, 
0x00, 0x00,
+                     0x00, 0x00, 0x00, 0x00, 0x44, 0x40, 0x00, 0x00, 0x00, 
0x00, 0x00,
+                     0x00, 0x24, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x34, 0x40,
+                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x40, 0x00, 
0x00, 0x00,
+                     0x00, 0x00, 0x00, 0x24, 0x40},
+                    {10, 10, 40, 40}),
+        // POLYGON Z ((30 10 40, 40 40 80, 20 40 60, 10 20 30, 30 10 40))
+        WKBTestCase(
+            GeometryType::POLYGON, Dimensions::XYZ,
+            {0x01, 0xeb, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 
0x00, 0x00,
+             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x40, 0x00, 0x00, 0x00, 
0x00, 0x00,
+             0x00, 0x24, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x40, 
0x00, 0x00,
+             0x00, 0x00, 0x00, 0x00, 0x44, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x44,
+             0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x40, 0x00, 0x00, 
0x00, 0x00,
+             0x00, 0x00, 0x34, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 
0x40, 0x00,
+             0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00,
+             0x24, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x40, 0x00, 
0x00, 0x00,
+             0x00, 0x00, 0x00, 0x3e, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x3e, 0x40,
+             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x40, 0x00, 0x00, 0x00, 
0x00, 0x00,
+             0x00, 0x44, 0x40},
+            {10, 10, 30, 40, 40, 80}),
+        // POLYGON M ((30 10 300, 40 40 1600, 20 40 800, 10 20 200, 30 10 300))
+        WKBTestCase(
+            GeometryType::POLYGON, Dimensions::XYM,
+            {0x01, 0xd3, 0x07, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 
0x00, 0x00,
+             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x40, 0x00, 0x00, 0x00, 
0x00, 0x00,
+             0x00, 0x24, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x72, 0x40, 
0x00, 0x00,
+             0x00, 0x00, 0x00, 0x00, 0x44, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x44,
+             0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99, 0x40, 0x00, 0x00, 
0x00, 0x00,
+             0x00, 0x00, 0x34, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 
0x40, 0x00,
+             0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x40, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00,
+             0x24, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x40, 0x00, 
0x00, 0x00,
+             0x00, 0x00, 0x00, 0x69, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x3e, 0x40,
+             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x40, 0x00, 0x00, 0x00, 
0x00, 0x00,
+             0xc0, 0x72, 0x40},
+            {10, 10, 200, 40, 40, 1600}),
+        // POLYGON ZM ((30 10 40 300, 40 40 80 1600, 20 40 60 800, 10 20 30 
200, 30 10 40
+        // 300))
+        WKBTestCase(
+            GeometryType::POLYGON, Dimensions::XYZM,
+            {0x01, 0xbb, 0x0b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 
0x00, 0x00,
+             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x40, 0x00, 0x00, 0x00, 
0x00, 0x00,
+             0x00, 0x24, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x40, 
0x00, 0x00,
+             0x00, 0x00, 0x00, 0xc0, 0x72, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x44,
+             0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x40, 0x00, 0x00, 
0x00, 0x00,
+             0x00, 0x00, 0x54, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99, 
0x40, 0x00,
+             0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x40, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00,
+             0x44, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x40, 0x00, 
0x00, 0x00,
+             0x00, 0x00, 0x00, 0x89, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x24, 0x40,
+             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x40, 0x00, 0x00, 0x00, 
0x00, 0x00,
+             0x00, 0x3e, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x40, 
0x00, 0x00,
+             0x00, 0x00, 0x00, 0x00, 0x3e, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x24,
+             0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x40, 0x00, 0x00, 
0x00, 0x00,
+             0x00, 0xc0, 0x72, 0x40},
+            {10, 10, 30, 200, 40, 40, 80, 1600}),
+        // MULTIPOINT ((30 10))
+        WKBTestCase(GeometryType::MULTIPOINT, Dimensions::XY,
+                    {0x01, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 
0x01,
+                     0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00,
+                     0x3e, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 
0x40},
+                    {30, 10, 30, 10}),
+        // MULTIPOINT Z ((30 10 40))
+        WKBTestCase(GeometryType::MULTIPOINT, Dimensions::XYZ,
+                    {0x01, 0xec, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 
0x01,
+                     0xe9, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00,
+                     0x3e, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 
0x40,
+                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x40},
+                    {30, 10, 40, 30, 10, 40}),
+        // MULTIPOINT M ((30 10 300))
+        WKBTestCase(GeometryType::MULTIPOINT, Dimensions::XYM,
+                    {0x01, 0xd4, 0x07, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 
0x01,
+                     0xd1, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00,
+                     0x3e, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 
0x40,
+                     0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x72, 0x40},
+                    {30, 10, 300, 30, 10, 300}),
+        // MULTIPOINT ZM ((30 10 40 300))
+        WKBTestCase(GeometryType::MULTIPOINT, Dimensions::XYZM,
+                    {0x01, 0xbc, 0x0b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 
0x01,
+                     0xb9, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00,
+                     0x3e, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 
0x40,
+                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x40, 0x00, 
0x00,
+                     0x00, 0x00, 0x00, 0xc0, 0x72, 0x40},
+                    {30, 10, 40, 300, 30, 10, 40, 300}),
+        // MULTILINESTRING ((30 10, 10 30, 40 40))
+        WKBTestCase(GeometryType::MULTILINESTRING, Dimensions::XY,
+                    {0x01, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 
0x01, 0x02,
+                     0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00,
+                     0x00, 0x00, 0x3e, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x24,
+                     0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x40, 
0x00, 0x00,
+                     0x00, 0x00, 0x00, 0x00, 0x3e, 0x40, 0x00, 0x00, 0x00, 
0x00, 0x00,
+                     0x00, 0x44, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x44, 0x40},
+                    {10, 10, 40, 40}),
+        // MULTILINESTRING Z ((30 10 40, 10 30 40, 40 40 80))
+        WKBTestCase(
+            GeometryType::MULTILINESTRING, Dimensions::XYZ,
+            {0x01, 0xed, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0xea, 
0x03, 0x00,
+             0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x3e, 0x40,
+             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x40, 0x00, 0x00, 0x00, 
0x00, 0x00,
+             0x00, 0x44, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x40, 
0x00, 0x00,
+             0x00, 0x00, 0x00, 0x00, 0x3e, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x44,
+             0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x40, 0x00, 0x00, 
0x00, 0x00,
+             0x00, 0x00, 0x44, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 
0x40},
+            {10, 10, 40, 40, 40, 80}),
+        // MULTILINESTRING M ((30 10 300, 10 30 300, 40 40 1600))
+        WKBTestCase(
+            GeometryType::MULTILINESTRING, Dimensions::XYM,
+            {0x01, 0xd5, 0x07, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0xd2, 
0x07, 0x00,
+             0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x3e, 0x40,
+             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x40, 0x00, 0x00, 0x00, 
0x00, 0x00,
+             0xc0, 0x72, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x40, 
0x00, 0x00,
+             0x00, 0x00, 0x00, 0x00, 0x3e, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 
0xc0, 0x72,
+             0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x40, 0x00, 0x00, 
0x00, 0x00,
+             0x00, 0x00, 0x44, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99, 
0x40},
+            {10, 10, 300, 40, 40, 1600}),
+        // MULTILINESTRING ZM ((30 10 40 300, 10 30 40 300, 40 40 80 1600))
+        WKBTestCase(
+            GeometryType::MULTILINESTRING, Dimensions::XYZM,
+            {0x01, 0xbd, 0x0b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0xba, 
0x0b, 0x00,
+             0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x3e, 0x40,
+             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x40, 0x00, 0x00, 0x00, 
0x00, 0x00,
+             0x00, 0x44, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x72, 0x40, 
0x00, 0x00,
+             0x00, 0x00, 0x00, 0x00, 0x24, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x3e,
+             0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x40, 0x00, 0x00, 
0x00, 0x00,
+             0x00, 0xc0, 0x72, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 
0x40, 0x00,
+             0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x40, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00,
+             0x54, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99, 0x40},
+            {10, 10, 40, 300, 40, 40, 80, 1600}),
+        // MULTIPOLYGON (((30 10, 40 40, 20 40, 10 20, 30 10)))
+        WKBTestCase(
+            GeometryType::MULTIPOLYGON, Dimensions::XY,
+            {0x01, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 
0x00, 0x00,
+             0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00,
+             0x00, 0x00, 0x3e, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 
0x40, 0x00,
+             0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x40, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00,
+             0x44, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x40, 0x00, 
0x00, 0x00,
+             0x00, 0x00, 0x00, 0x44, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x24, 0x40,
+             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x40, 0x00, 0x00, 0x00, 
0x00, 0x00,
+             0x00, 0x3e, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x40},
+            {10, 10, 40, 40}),
+        // MULTIPOLYGON Z (((30 10 40, 40 40 80, 20 40 60, 10 20 30, 30 10 
40)))
+        WKBTestCase(
+            GeometryType::MULTIPOLYGON, Dimensions::XYZ,
+            {0x01, 0xee, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0xeb, 
0x03, 0x00,
+             0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00,
+             0x00, 0x00, 0x3e, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 
0x40, 0x00,
+             0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x40, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00,
+             0x44, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x40, 0x00, 
0x00, 0x00,
+             0x00, 0x00, 0x00, 0x54, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x34, 0x40,
+             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x40, 0x00, 0x00, 0x00, 
0x00, 0x00,
+             0x00, 0x4e, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x40, 
0x00, 0x00,
+             0x00, 0x00, 0x00, 0x00, 0x34, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x3e,
+             0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x40, 0x00, 0x00, 
0x00, 0x00,
+             0x00, 0x00, 0x24, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 
0x40},
+            {10, 10, 30, 40, 40, 80}),
+        // MULTIPOLYGON M (((30 10 300, 40 40 1600, 20 40 800, 10 20 200, 30 
10 300)))
+        WKBTestCase(
+            GeometryType::MULTIPOLYGON, Dimensions::XYM,
+            {0x01, 0xd6, 0x07, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0xd3, 
0x07, 0x00,
+             0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00,
+             0x00, 0x00, 0x3e, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 
0x40, 0x00,
+             0x00, 0x00, 0x00, 0x00, 0xc0, 0x72, 0x40, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00,
+             0x44, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x40, 0x00, 
0x00, 0x00,
+             0x00, 0x00, 0x00, 0x99, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x34, 0x40,
+             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x40, 0x00, 0x00, 0x00, 
0x00, 0x00,
+             0x00, 0x89, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x40, 
0x00, 0x00,
+             0x00, 0x00, 0x00, 0x00, 0x34, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x69,
+             0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x40, 0x00, 0x00, 
0x00, 0x00,
+             0x00, 0x00, 0x24, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x72, 
0x40},
+            {10, 10, 200, 40, 40, 1600}),
+        // MULTIPOLYGON ZM (((30 10 40 300, 40 40 80 1600, 20 40 60 800, 10 20 
30 200, 30
+        // 10 40 300)))
+        WKBTestCase(GeometryType::MULTIPOLYGON, Dimensions::XYZM,
+                    {0x01, 0xbe, 0x0b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 
0x01, 0xbb,
+                     0x0b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 
0x00, 0x00,
+                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x40, 0x00, 
0x00, 0x00,
+                     0x00, 0x00, 0x00, 0x24, 0x40, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00,
+                     0x44, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x72, 
0x40, 0x00,
+                     0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x40, 0x00, 0x00, 
0x00, 0x00,
+                     0x00, 0x00, 0x44, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x54,
+                     0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99, 0x40, 
0x00, 0x00,
+                     0x00, 0x00, 0x00, 0x00, 0x34, 0x40, 0x00, 0x00, 0x00, 
0x00, 0x00,
+                     0x00, 0x44, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x4e, 0x40,
+                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0x40, 0x00, 
0x00, 0x00,
+                     0x00, 0x00, 0x00, 0x24, 0x40, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00,
+                     0x34, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 
0x40, 0x00,
+                     0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x40, 0x00, 0x00, 
0x00, 0x00,
+                     0x00, 0x00, 0x3e, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x24,
+                     0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x40, 
0x00, 0x00,
+                     0x00, 0x00, 0x00, 0xc0, 0x72, 0x40},
+                    {10, 10, 30, 200, 40, 40, 80, 1600}),
+        // GEOMETRYCOLLECTION (POINT (30 10))
+        WKBTestCase(GeometryType::GEOMETRYCOLLECTION, Dimensions::XY,
+                    {0x01, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 
0x01,
+                     0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00,
+                     0x3e, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 
0x40},
+                    {30, 10, 30, 10}),
+        // GEOMETRYCOLLECTION Z (POINT Z (30 10 40))
+        WKBTestCase(GeometryType::GEOMETRYCOLLECTION, Dimensions::XYZ,
+                    {0x01, 0xef, 0x03, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 
0x01,
+                     0xe9, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00,
+                     0x3e, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 
0x40,
+                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x40},
+                    {30, 10, 40, 30, 10, 40}),
+        // GEOMETRYCOLLECTION M (POINT M (30 10 300))
+        WKBTestCase(GeometryType::GEOMETRYCOLLECTION, Dimensions::XYM,
+                    {0x01, 0xd7, 0x07, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 
0x01,
+                     0xd1, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00,
+                     0x3e, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 
0x40,
+                     0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x72, 0x40},
+                    {30, 10, 300, 30, 10, 300}),
+        // GEOMETRYCOLLECTION ZM (POINT ZM (30 10 40 300))
+        WKBTestCase(GeometryType::GEOMETRYCOLLECTION, Dimensions::XYZM,
+                    {0x01, 0xbf, 0x0b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 
0x01,
+                     0xb9, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00,
+                     0x3e, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 
0x40,
+                     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x40, 0x00, 
0x00,
+                     0x00, 0x00, 0x00, 0xc0, 0x72, 0x40},
+                    {30, 10, 40, 300, 30, 10, 40, 300})));
+
+struct MakeWKBPointTestCase {
+  MakeWKBPointTestCase() = default;
+  MakeWKBPointTestCase(const std::vector<double> xyzm, bool has_z, bool has_m)
+      : has_z(has_z), has_m(has_m) {
+    memcpy(this->xyzm, xyzm.data(), sizeof(this->xyzm));
+  }

Review Comment:
   I removed them!



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to