Skip to content

Commit 71bf558

Browse files
committed
Test: introduce index_gt_test GTest suite
1 parent 6995246 commit 71bf558

3 files changed

Lines changed: 1014 additions & 3 deletions

File tree

cpp/CMakeLists.txt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,24 @@ if (USEARCH_BUILD_BENCH_CPP)
1818
setup_target(bench_cpp)
1919
target_include_directories(bench_cpp PRIVATE ${clipp_SOURCE_DIR}/include)
2020
endif ()
21+
22+
option(USEARCH_BUILD_TEST_CPP_INDEX_GT "Compile index_gt GTest-based unit tests" OFF)
23+
24+
if (USEARCH_BUILD_TEST_CPP_INDEX_GT)
25+
find_package(Threads REQUIRED)
26+
include(FetchContent)
27+
FetchContent_Declare(googletest
28+
GIT_REPOSITORY https://github.com/google/googletest.git
29+
GIT_TAG v1.17.0)
30+
FetchContent_MakeAvailable(googletest)
31+
32+
add_executable(index_gt_test index_gt_test.cpp)
33+
target_include_directories(index_gt_test BEFORE PRIVATE
34+
${CMAKE_CURRENT_SOURCE_DIR}/../include
35+
${CMAKE_CURRENT_SOURCE_DIR}/../fp16/include)
36+
target_compile_features(index_gt_test PRIVATE cxx_std_23)
37+
target_link_libraries(index_gt_test PRIVATE Threads::Threads GTest::gtest_main)
38+
39+
include(GoogleTest)
40+
gtest_discover_tests(index_gt_test)
41+
endif ()

cpp/README.md

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,16 @@ using namespace unum::usearch;
2323

2424
int main(int argc, char **argv) {
2525
metric_punned_t metric(3, metric_kind_t::l2sq_k, scalar_kind_t::f32_k);
26-
26+
2727
// If you plan to store more than 4 Billion entries - use `index_dense_big_t`.
2828
// Or directly instantiate the template variant you need - `index_dense_gt<vector_key_t, internal_id_t>`.
2929
index_dense_t index = index_dense_t::make(metric);
3030
float vec[3] = {0.1, 0.3, 0.2};
31-
31+
3232
index.reserve(10); // Pre-allocate memory for 10 vectors
3333
index.add(42, &vec[0]); // Pass a key and a vector
3434
auto results = index.search(&vec[0], 5); // Pass a query and limit number of results
35-
35+
3636
for (std::size_t i = 0; i != results.size(); ++i)
3737
// You can access the following properties of every match:
3838
// results[i].element.key, results[i].element.vector, results[i].distance;
@@ -191,3 +191,21 @@ template <typename distance_at = default_distance_t, // `float`
191191
typename tape_allocator_at = dynamic_allocator_at> //
192192
class index_gt;
193193
```
194+
195+
## Testing
196+
197+
`index_gt_test` is a GTest-based unit test suite for the low-level `index_gt` engine, covering add/search correctness, iterator semantics, prefetch, predicate filtering, and more.
198+
199+
**Build and run:**
200+
201+
```bash
202+
cmake -B build -DUSEARCH_BUILD_TEST_CPP_INDEX_GT=ON
203+
cmake --build build --target index_gt_test
204+
./build/cpp/index_gt_test
205+
```
206+
207+
To run a specific test or filter by name:
208+
209+
```bash
210+
./build/index_gt_test --gtest_filter="index_gt_basic.*"
211+
```

0 commit comments

Comments
 (0)