Skip to content

Feature: Ancestor search#1714

Open
holke wants to merge 56 commits intomainfrom
feature-ancestor_search
Open

Feature: Ancestor search#1714
holke wants to merge 56 commits intomainfrom
feature-ancestor_search

Conversation

@holke
Copy link
Collaborator

@holke holke commented Jun 23, 2025

Closes #1715

Describe your changes here:

Currently waiting for #1640 to merge.
Will add a description afterwards.

All these boxes must be checked by the AUTHOR before requesting review:

  • The PR is small enough to be reviewed easily. If not, consider splitting up the changes in multiple PRs.
  • The title starts with one of the following prefixes: Documentation:, Bugfix:, Feature:, Improvement: or Other:.
  • If the PR is related to an issue, make sure to link it.
  • The author made sure that, as a reviewer, he/she would check all boxes below.

All these boxes must be checked by the REVIEWERS before merging the pull request:

As a reviewer please read through all the code lines and make sure that the code is fully understood, bug free, well-documented and well-structured.

General

  • The reviewer executed the new code features at least once and checked the results manually.
  • The code follows the t8code coding guidelines.
  • New source/header files are properly added to the CMake files.
  • The code is well documented. In particular, all function declarations, structs/classes and their members have a proper doxygen documentation.
  • All new algorithms and data structures are sufficiently optimal in terms of memory and runtime (If this should be merged, but there is still potential for optimization, create a new issue).

Tests

  • The code is covered in an existing or new test case using Google Test.
  • The code coverage of the project (reported in the CI) should not decrease. If coverage is decreased, make sure that this is reasonable and acceptable.
  • Valgrind doesn't find any bugs in the new code. This script can be used to check for errors; see also this wiki article.

If the Pull request introduces code that is not covered by the github action (for example coupling with a new library):

  • Should this use case be added to the github action?
  • If not, does the specific use case compile and all tests pass (check manually).

Scripts and Wiki

  • If a new directory with source files is added, it must be covered by the script/find_all_source_files.scp to check the indentation of these files.
  • If this PR introduces a new feature, it must be covered in an example or tutorial and a Wiki article.

License

  • The author added a BSD statement to doc/ (or already has one).

@holke holke marked this pull request as draft June 23, 2025 09:22
@spenke91 spenke91 marked this pull request as ready for review June 23, 2025 13:51
@spenke91 spenke91 requested a review from Davknapp June 23, 2025 13:52
@codecov
Copy link

codecov bot commented Jun 23, 2025

Codecov Report

❌ Patch coverage is 90.90909% with 6 lines in your changes missing coverage. Please review.
✅ Project coverage is 78.29%. Comparing base (98a2c07) to head (468ea5a).
⚠️ Report is 2 commits behind head on main.

Files with missing lines Patch % Lines
src/t8_forest/t8_forest_private.cxx 83.33% 6 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #1714      +/-   ##
==========================================
+ Coverage   78.25%   78.29%   +0.04%     
==========================================
  Files         114      114              
  Lines       19050    19117      +67     
==========================================
+ Hits        14907    14968      +61     
- Misses       4143     4149       +6     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Copy link
Collaborator

@Davknapp Davknapp left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A first round of remarks! Thanks for this addition!

@Davknapp Davknapp assigned holke and unassigned Davknapp Jun 25, 2025
holke and others added 3 commits July 2, 2025 10:10
Co-authored-by: David Knapp <david.knapp@dlr.de>
Co-authored-by: David Knapp <david.knapp@dlr.de>
@holke holke requested a review from Davknapp July 2, 2025 08:13
@holke holke assigned Davknapp and unassigned holke Jul 2, 2025
Due to search calling get_linear_id with a too large level.
*/

const t8_locidx_t search_index = t8_forest_bin_search_lower (leafs, element_id + 1, element_id_at_next_level);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
const t8_locidx_t search_index = t8_forest_bin_search_lower (leafs, element_id + 1, element_id_at_next_level);
const t8_locidx_t search_index = t8_forest_bin_search_lower (leafs, element_id_at_next_level, element_id + 1);

@holke holke requested a review from Davknapp February 3, 2026 12:27
@holke holke assigned Davknapp and holke and unassigned holke and Davknapp Feb 3, 2026
@holke
Copy link
Collaborator Author

holke commented Feb 24, 2026

I added the tests for bin_search_upper and lower.

Some doxygen errors show up but they are not related to my added functionality...
I need to finalize a comment in the test.

But, you can finish with the review of the code :)

@holke
Copy link
Collaborator Author

holke commented Feb 24, 2026

I added a new test for the ancestor search.
Test coverage should now be good.

@Davknapp
Copy link
Collaborator

I added a new test for the ancestor search. Test coverage should now be good.

Nice, thanks a lot! Can you fix the doxygen?


/** Test the t8_forest_bin_search_upper function.
* We iterate through all elements of a forest.
* For each element E of level L, we call t8_forest_bin_search_lower on the forest's element array and expect
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
* For each element E of level L, we call t8_forest_bin_search_lower on the forest's element array and expect
* For each element E of level L, we call t8_forest_bin_search_upper on the forest's element array and expect

* the element to be found.
* For each element we then build one case where we search for an element that is not contained but will
* match a different element in the element array:
* We compute the linear Id of E at level L-1 (if it is >=0 ) and search for the L-1 element with this id.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
* We compute the linear Id of E at level L-1 (if it is >=0 ) and search for the L-1 element with this id.
* We compute the linear Id of E at level L+1 (if it is >=0 ) and search for the L+1 element with this id.

* the element to be found.
* For each element we then build one case where we search for an element that is not contained but will
* match a different element in the element array:
* We compute the linear Id of E at level L+1 (if not exceeding the maxlevel) and search for the L+1 element with this id.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
* We compute the linear Id of E at level L+1 (if not exceeding the maxlevel) and search for the L+1 element with this id.
* We compute the linear Id of E at level L (if not exceeding the maxlevel) and search for the L element with this id.

}

TEST_P (t8_bin_search_tester, bin_search_lower)
/** Test the t8_forest_bin_search_upper function.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
/** Test the t8_forest_bin_search_upper function.
/** Test the t8_forest_bin_search_first_descendant_ancestor function.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please update the rest of the comment, too

inline auto print_eclass
= [] (const testing::TestParamInfo<t8_eclass> &info) { return t8_eclass_to_string[info.param]; };

/** Define a lambda to beautify gtest output for tuples <level, cmesh>.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
/** Define a lambda to beautify gtest output for tuples <level, cmesh>.
/** Define a lambda to beautify gtest output for tuples <<scheme, eclass>, level>.

auto pretty_print_eclass_scheme_and_level
= [] (const testing::TestParamInfo<std::tuple<std::tuple<int, t8_eclass_t>, int>> &info) {
std::string scheme = t8_scheme_to_string[std::get<0> (std::get<0> (info.param))];
std::string eclass = t8_eclass_to_string[std::get<1> (std::get<0> (info.param))];
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
std::string eclass = t8_eclass_to_string[std::get<1> (std::get<0> (info.param))];
std::string eclass = t8_eclass_to_string[std::get<0> (std::get<1> (info.param))];

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

discussion priority:medium Should be solved within half a year workload:low Would take half a day or less

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Feature: Ancestor search

3 participants