@@ -62,3 +62,146 @@ TEST_CASE("geom::linestring_t", "[NoDB]")
6262 REQUIRE (it == ls1.cend ());
6363}
6464
65+ TEST_CASE (" geom::split_linestring w/o split" , " [NoDB]" )
66+ {
67+ geom::linestring_t const line{Coordinates{0 , 0 }, Coordinates{1 , 2 },
68+ Coordinates{2 , 2 }};
69+
70+ std::vector<geom::linestring_t > result;
71+
72+ geom::split_linestring (line, 10.0 , &result);
73+
74+ REQUIRE (result.size () == 1 );
75+
76+ REQUIRE (result[0 ].size () == 3 );
77+ REQUIRE (result[0 ][0 ] == Coordinates{0 , 0 });
78+ REQUIRE (result[0 ][1 ] == Coordinates{1 , 2 });
79+ REQUIRE (result[0 ][2 ] == Coordinates{2 , 2 });
80+ }
81+
82+ TEST_CASE (" geom::split_linestring with split 0.5" , " [NoDB]" )
83+ {
84+ geom::linestring_t const line{Coordinates{0 , 0 }, Coordinates{1 , 0 }};
85+
86+ std::vector<geom::linestring_t > result;
87+
88+ geom::split_linestring (line, 0.5 , &result);
89+
90+ REQUIRE (result.size () == 2 );
91+
92+ REQUIRE (result[0 ].size () == 2 );
93+ REQUIRE (result[0 ][0 ] == Coordinates{0 , 0 });
94+ REQUIRE (result[0 ][1 ] == Coordinates{0.5 , 0 });
95+
96+ REQUIRE (result[1 ].size () == 2 );
97+ REQUIRE (result[1 ][0 ] == Coordinates{0.5 , 0 });
98+ REQUIRE (result[1 ][1 ] == Coordinates{1 , 0 });
99+ }
100+
101+ TEST_CASE (" geom::split_linestring with split 0.4" , " [NoDB]" )
102+ {
103+ geom::linestring_t const line{Coordinates{0 , 0 }, Coordinates{1 , 0 }};
104+
105+ std::vector<geom::linestring_t > result;
106+
107+ geom::split_linestring (line, 0.4 , &result);
108+
109+ REQUIRE (result.size () == 3 );
110+
111+ REQUIRE (result[0 ].size () == 2 );
112+ REQUIRE (result[0 ][0 ] == Coordinates{0 , 0 });
113+ REQUIRE (result[0 ][1 ] == Coordinates{0.4 , 0 });
114+
115+ REQUIRE (result[1 ].size () == 2 );
116+ REQUIRE (result[1 ][0 ] == Coordinates{0.4 , 0 });
117+ REQUIRE (result[1 ][1 ] == Coordinates{0.8 , 0 });
118+
119+ REQUIRE (result[2 ].size () == 2 );
120+ REQUIRE (result[2 ][0 ] == Coordinates{0.8 , 0 });
121+ REQUIRE (result[2 ][1 ] == Coordinates{1 , 0 });
122+ }
123+
124+ TEST_CASE (" geom::split_linestring with split 1.0 at start" , " [NoDB]" )
125+ {
126+ geom::linestring_t const line{Coordinates{0 , 0 }, Coordinates{2 , 0 },
127+ Coordinates{3 , 0 }, Coordinates{4 , 0 }};
128+
129+ std::vector<geom::linestring_t > result;
130+
131+ geom::split_linestring (line, 1.0 , &result);
132+
133+ REQUIRE (result.size () == 4 );
134+
135+ REQUIRE (result[0 ].size () == 2 );
136+ REQUIRE (result[0 ][0 ] == Coordinates{0 , 0 });
137+ REQUIRE (result[0 ][1 ] == Coordinates{1 , 0 });
138+
139+ REQUIRE (result[1 ].size () == 2 );
140+ REQUIRE (result[1 ][0 ] == Coordinates{1 , 0 });
141+ REQUIRE (result[1 ][1 ] == Coordinates{2 , 0 });
142+
143+ REQUIRE (result[2 ].size () == 2 );
144+ REQUIRE (result[2 ][0 ] == Coordinates{2 , 0 });
145+ REQUIRE (result[2 ][1 ] == Coordinates{3 , 0 });
146+
147+ REQUIRE (result[3 ].size () == 2 );
148+ REQUIRE (result[3 ][0 ] == Coordinates{3 , 0 });
149+ REQUIRE (result[3 ][1 ] == Coordinates{4 , 0 });
150+ }
151+
152+ TEST_CASE (" geom::split_linestring with split 1.0 in middle" , " [NoDB]" )
153+ {
154+ geom::linestring_t const line{Coordinates{0 , 0 }, Coordinates{1 , 0 },
155+ Coordinates{3 , 0 }, Coordinates{4 , 0 }};
156+
157+ std::vector<geom::linestring_t > result;
158+
159+ geom::split_linestring (line, 1.0 , &result);
160+
161+ REQUIRE (result.size () == 4 );
162+
163+ REQUIRE (result[0 ].size () == 2 );
164+ REQUIRE (result[0 ][0 ] == Coordinates{0 , 0 });
165+ REQUIRE (result[0 ][1 ] == Coordinates{1 , 0 });
166+
167+ REQUIRE (result[1 ].size () == 2 );
168+ REQUIRE (result[1 ][0 ] == Coordinates{1 , 0 });
169+ REQUIRE (result[1 ][1 ] == Coordinates{2 , 0 });
170+
171+ REQUIRE (result[2 ].size () == 2 );
172+ REQUIRE (result[2 ][0 ] == Coordinates{2 , 0 });
173+ REQUIRE (result[2 ][1 ] == Coordinates{3 , 0 });
174+
175+ REQUIRE (result[3 ].size () == 2 );
176+ REQUIRE (result[3 ][0 ] == Coordinates{3 , 0 });
177+ REQUIRE (result[3 ][1 ] == Coordinates{4 , 0 });
178+ }
179+
180+ TEST_CASE (" geom::split_linestring with split 1.0 at end" , " [NoDB]" )
181+ {
182+ geom::linestring_t const line{Coordinates{0 , 0 }, Coordinates{1 , 0 },
183+ Coordinates{2 , 0 }, Coordinates{4 , 0 }};
184+
185+ std::vector<geom::linestring_t > result;
186+
187+ geom::split_linestring (line, 1.0 , &result);
188+
189+ REQUIRE (result.size () == 4 );
190+
191+ REQUIRE (result[0 ].size () == 2 );
192+ REQUIRE (result[0 ][0 ] == Coordinates{0 , 0 });
193+ REQUIRE (result[0 ][1 ] == Coordinates{1 , 0 });
194+
195+ REQUIRE (result[1 ].size () == 2 );
196+ REQUIRE (result[1 ][0 ] == Coordinates{1 , 0 });
197+ REQUIRE (result[1 ][1 ] == Coordinates{2 , 0 });
198+
199+ REQUIRE (result[2 ].size () == 2 );
200+ REQUIRE (result[2 ][0 ] == Coordinates{2 , 0 });
201+ REQUIRE (result[2 ][1 ] == Coordinates{3 , 0 });
202+
203+ REQUIRE (result[3 ].size () == 2 );
204+ REQUIRE (result[3 ][0 ] == Coordinates{3 , 0 });
205+ REQUIRE (result[3 ][1 ] == Coordinates{4 , 0 });
206+ }
207+
0 commit comments