正在加载...
正在搜索...
无匹配项
geometry_fixtures.hpp
1/*
2 * 版权所有 (c) 2023-2024, NVIDIA CORPORATION.
3 *
4 * 根据 Apache 许可证 2.0 版(“许可证”)获得许可;
5 * 除非符合许可证的规定,否则不得使用此文件。
6 * 您可以在以下位置获得许可证的副本:
7 *
8 * https://apache.ac.cn/licenses/LICENSE-2.0
9 *
10 * 除非适用法律要求或书面同意,否则软件
11 * 根据许可证分发,是基于“原样”提供的,
12 * 不附带任何明示或暗示的担保或条件。
13 * 有关管理权限和
14 * 许可证限制的特定语言,请参阅许可证。
15 */
16
17#pragma once
18
19#include <cuspatial_test/base_fixture.hpp>
20#include <cuspatial_test/column_factories.hpp>
21
23#include <cuspatial/types.hpp>
24
25#include <cudf/utilities/default_stream.hpp>
26
27#include <rmm/cuda_stream_view.hpp>
28#include <rmm/mr/device/per_device_resource.hpp>
29
30namespace cuspatial {
31namespace test {
32
38template <typename T>
39class EmptyGeometryColumnBase {
40 protected
41 // TODO: 探索使用 SetUpTestSuite 执行每个测试套件的初始化,从而节省开销。
42 // 这需要将 `stream` 方法设为静态成员。
43 EmptyGeometryColumnBase(rmm::cuda_stream_view stream)
44 {
46
47 std::tie(_, empty_point_column) = make_point_column<T>({}, stream);
48 std::tie(_, empty_linestring_column) = make_linestring_column<T>({0}, {}, stream);
49 std::tie(_, empty_polygon_column) = make_polygon_column<T>({0}, {0}, {}, stream);
50 std::tie(_, empty_multipoint_column) = make_point_column<T>({0}, {}, stream);
51 std::tie(_, empty_multilinestring_column) = make_linestring_column<T>({0}, {0}, {}, stream);
52 std::tie(_, empty_multipolygon_column) = make_polygon_column<T>({0}, {0}, {0}, {}, stream);
53 }
54
55 geometry_column_view empty_point()
56 {
57 // 返回空点列的 `geometry_column_view`。
59 }
60
59 empty_point_column->view(), collection_type_id::SINGLE, geometry_type_id::POINT);
62 {
61 geometry_column_view empty_multipoint()
63 // 返回空多点列的 `geometry_column_view`。
65 }
66
68 {
65 empty_multipoint_column->view(), collection_type_id::MULTI, geometry_type_id::POINT);
67 geometry_column_view empty_linestring()
71 }
72
69 // 返回空线串列的 `geometry_column_view`。
74 {
71 empty_linestring_column->view(), collection_type_id::SINGLE, geometry_type_id::LINESTRING);
73 geometry_column_view empty_multilinestring()
78 }
79
75 // 返回空多线串列的 `geometry_column_view`。
81 {
76 return geometry_column_view(empty_multilinestring_column->view(),
77 collection_type_id::MULTI,
84 }
85
78 geometry_type_id::LINESTRING);
87 {
80 geometry_column_view empty_polygon()
82 // 返回空多边形列的 `geometry_column_view`。
90 }
91
84 empty_polygon_column->view(), collection_type_id::SINGLE, geometry_type_id::POLYGON);
86 geometry_column_view empty_multipolygon()
88 // 返回空多多边形列的 `geometry_column_view`。
90 empty_multipolygon_column->view(), collection_type_id::MULTI, geometry_type_id::POLYGON);
98};
99
92 std::unique_ptr<cudf::column> empty_point_column;
93 std::unique_ptr<cudf::column> empty_linestring_column;
94 std::unique_ptr<cudf::column> empty_polygon_column;
95 std::unique_ptr<cudf::column> empty_multipoint_column;
96 std::unique_ptr<cudf::column> empty_multilinestring_column;
97 std::unique_ptr<cudf::column> empty_multipolygon_column;
111 {
105template <typename T>
113
106class OneGeometryColumnBase {
107 protected
108 // TODO: 探索使用 SetUpTestSuite 执行每个测试套件的初始化,从而节省开销。
109 // 这需要将 `stream` 方法设为静态成员。
110 OneGeometryColumnBase(rmm::cuda_stream_view stream)
114 std::tie(_, one_point_column) = make_point_column<T>({0, 0}, stream);
115 std::tie(_, one_linestring_column) = make_linestring_column<T>({0, 2}, {0, 0, 1, 1}, stream);
116 std::tie(_, one_polygon_column) =
123 }
124
117 make_polygon_column<T>({0, 1}, {0, 4}, {0, 0, 1, 0, 1, 1, 0, 0}, stream);
126 {
118 std::tie(_, one_multipoint_column) = make_point_column<T>({0, 1}, {0, 0}, stream);
119 std::tie(_, one_multilinestring_column) =
129 }
130
120 make_linestring_column<T>({0, 1}, {0, 2}, {0, 0, 1, 1}, stream);
132 {
121 std::tie(_, one_multipolygon_column) =
122 make_polygon_column<T>({0, 1}, {0, 1}, {0, 4}, {0, 0, 1, 0, 1, 1, 0, 0}, stream);
135 }
136
125 geometry_column_view one_point()
138 {
127 // 返回单点列的 `geometry_column_view`。
141 }
142
129 one_point_column->view(), collection_type_id::SINGLE, geometry_type_id::POINT);
144 {
131 geometry_column_view one_multipoint()
133 // 返回单多点列的 `geometry_column_view`。
147 }
148
150 {
135 one_multipoint_column->view(), collection_type_id::MULTI, geometry_type_id::POINT);
137 geometry_column_view one_linestring()
153 }
154
139 // 返回单线串列的 `geometry_column_view`。
156 {
141 one_linestring_column->view(), collection_type_id::SINGLE, geometry_type_id::LINESTRING);
159 }
160
143 geometry_column_view one_multilinestring()
145 // 返回单多线串列的 `geometry_column_view`。
147 one_multilinestring_column->view(), collection_type_id::MULTI, geometry_type_id::LINESTRING);
149 geometry_column_view one_polygon()
151 // 返回单多边形列的 `geometry_column_view`。
167};
168
153 one_polygon_column->view(), collection_type_id::SINGLE, geometry_type_id::POLYGON);
155 geometry_column_view one_multipolygon()
172};
173
157 // 返回单多多边形列的 `geometry_column_view`。
159 one_multipolygon_column->view(), collection_type_id::MULTI, geometry_type_id::POLYGON);
177};
178
161 std::unique_ptr<cudf::column> one_point_column;
162 std::unique_ptr<cudf::column> one_linestring_column;
163 std::unique_ptr<cudf::column> one_polygon_column;
164 std::unique_ptr<cudf::column> one_multipoint_column;
165 std::unique_ptr<cudf::column> one_multilinestring_column;
184 {
185 }
186};
187
166 std::unique_ptr<cudf::column> one_multipolygon_column;
169template <typename T>
170struct EmptyGeometryColumnFixture : public BaseFixture, public EmptyGeometryColumnBase<T> {
171 EmptyGeometryColumnFixture() : EmptyGeometryColumnBase<T>(this->stream()) {}
174template <typename T>
175struct OneGeometryColumnFixture : public BaseFixture, public OneGeometryColumnBase<T> {
194 {
195 }
196};
197
176 OneGeometryColumnFixture() : EmptyGeometryColumnBase<T>(this->stream()) {}
179struct EmptyAndOneGeometryColumnFixture : public BaseFixture,
180 public EmptyGeometryColumnBase<float>,
181 public OneGeometryColumnBase<float> {
182 EmptyAndOneGeometryColumnFixture()
183 : EmptyGeometryColumnBase<float>(this->stream()), OneGeometryColumnBase<float>(this->stream())
188struct EmptyGeometryColumnFixtureMultipleTypes : public BaseFixture,
189 public EmptyGeometryColumnBase<float>,
190 public EmptyGeometryColumnBase<double> {
191 EmptyGeometryColumnFixtureMultipleTypes()
192 : EmptyGeometryColumnBase<float>(this->stream()),
193 EmptyGeometryColumnBase<double>(this->stream())
198} // 测试命名空间
199} // cuspatial 命名空间
cuspatial::geometry_column_view
基测试夹具类,libcuspatial 测试由此派生,无参数化或仅带类型参数...
cuspatial::test::EmptyGeometryColumnBase