Fix crash in delaunay C interface test.

The test forgot to set the new need_ids field, which luckily
exposed a bug in the C api for delaunay when that field is false.
Fixed the bug and the test, and added a test for the need_ids false
case.
This commit is contained in:
Howard Trickey 2021-07-20 07:28:46 -04:00
parent 75c9788c27
commit 9471715720
2 changed files with 29 additions and 2 deletions

View File

@ -2851,10 +2851,12 @@ extern "C" ::CDT_result *BLI_delaunay_2d_cdt_calc(const ::CDT_input *input,
for (int e = 0; e < ne; ++e) {
tot_e_orig += res.edge_orig[e].size();
}
for (int f = 0; f < nf; ++f) {
}
for (int f = 0; f < nf; ++f) {
if (input->need_ids) {
tot_f_orig += res.face_orig[f].size();
tot_f_lens += res.face[f].size();
}
tot_f_lens += res.face[f].size();
}
output->vert_coords = static_cast<decltype(output->vert_coords)>(

View File

@ -1756,9 +1756,34 @@ TEST(delaunay_d, CintTwoFace)
input.faces_len_table = faces_len;
input.faces_start_table = faces_start;
input.epsilon = 1e-5f;
input.need_ids = false;
::CDT_result *output = BLI_delaunay_2d_cdt_calc(&input, CDT_FULL);
BLI_delaunay_2d_cdt_free(output);
}
TEST(delaunay_d, CintTwoFaceNoIds)
{
float vert_coords[][2] = {
{0.0, 0.0}, {1.0, 0.0}, {0.5, 1.0}, {1.1, 1.0}, {1.1, 0.0}, {1.6, 1.0}};
int faces[] = {0, 1, 2, 3, 4, 5};
int faces_len[] = {3, 3};
int faces_start[] = {0, 3};
::CDT_input input;
input.verts_len = 6;
input.edges_len = 0;
input.faces_len = 2;
input.vert_coords = vert_coords;
input.edges = nullptr;
input.faces = faces;
input.faces_len_table = faces_len;
input.faces_start_table = faces_start;
input.epsilon = 1e-5f;
input.need_ids = true;
::CDT_result *output = BLI_delaunay_2d_cdt_calc(&input, CDT_FULL);
BLI_delaunay_2d_cdt_free(output);
}
#endif
#if DO_TEXT_TESTS