Blender  V3.3
BLI_kdtree_test.cc
Go to the documentation of this file.
1 /* SPDX-License-Identifier: Apache-2.0 */
2 
3 #include "testing/testing.h"
4 
5 #include "BLI_kdtree.h"
6 
7 #include <cmath>
8 
9 /* -------------------------------------------------------------------- */
10 /* Tests */
11 
12 static void standard_test()
13 {
14  for (int tree_size = 30; tree_size < 500; tree_size++) {
15  int tree_index = 0;
16  KDTree_1d *tree = BLI_kdtree_1d_new(tree_size);
17  int mask = tree_size & 31;
18  bool occupied[32] = {false};
19 
20  for (int i = 0; i < tree_size; i++) {
21  int index = i & mask;
22  occupied[index] = true;
23  float value = fmodf(index * 7.121f, 0.6037f); /* Co-prime. */
24  float key[1] = {value};
25  BLI_kdtree_1d_insert(tree, tree_index++, key);
26  }
27  int expected = 0;
28  for (int j = 0; j < 32; j++) {
29  if (occupied[j]) {
30  expected++;
31  }
32  }
33 
34  int dedup_count = BLI_kdtree_1d_deduplicate(tree);
35  EXPECT_EQ(dedup_count, expected);
36  BLI_kdtree_1d_free(tree);
37  }
38 }
39 
40 static void deduplicate_test()
41 {
42  for (int tree_size = 1; tree_size < 40; tree_size++) {
43  int tree_index = 0;
44  KDTree_1d *tree = BLI_kdtree_1d_new(tree_size);
45  for (int i = 0; i < tree_size; i++) {
46  float key[1] = {1.0f};
47  BLI_kdtree_1d_insert(tree, tree_index++, key);
48  }
49  int dedup_count = BLI_kdtree_1d_deduplicate(tree);
50  EXPECT_EQ(dedup_count, 1);
51  BLI_kdtree_1d_free(tree);
52  }
53 }
54 
55 TEST(kdtree, Standard)
56 {
57  standard_test();
58 }
59 
60 TEST(kdtree, Deduplicate)
61 {
63 }
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
A KD-tree for nearest neighbor search.
static void deduplicate_test()
TEST(kdtree, Standard)
static void standard_test()
void * tree
ccl_device_inline float4 mask(const int4 &mask, const float4 &a)
Definition: math_float4.h:513
#define fmodf(x, y)
Definition: metal/compat.h:230