14 #include <gtest/gtest.h>
16 #include <faiss/IndexIVFPQ.h>
17 #include <faiss/IndexFlat.h>
18 #include <faiss/index_io.h>
20 TEST(IVFPQ, accuracy) {
48 std::vector <float> trainvecs (nt * d);
49 for (
size_t i = 0; i < nt * d; i++) {
50 trainvecs[i] = drand48();
53 index.train (nt, trainvecs.data());
58 std::vector <float> database (nb * d);
59 for (
size_t i = 0; i < nb * d; i++) {
60 database[i] = drand48();
63 index.add (nb, database.data());
64 index_gt.add (nb, database.data());
72 std::vector <float> queries (nq * d);
73 for (
size_t i = 0; i < nq * d; i++) {
74 queries[i] = drand48();
77 std::vector<faiss::Index::idx_t> gt_nns (nq);
78 std::vector<float> gt_dis (nq);
80 index_gt.search (nq, queries.data(), 1,
81 gt_dis.data(), gt_nns.data());
85 std::vector<faiss::Index::idx_t> nns (k * nq);
86 std::vector<float> dis (k * nq);
88 index.search (nq, queries.data(), k, dis.data(), nns.data());
91 for (
int q = 0; q < nq; q++) {
93 for (
int i = 0; i < k; i++)
94 if (nns[q * k + i] == gt_nns[q])
97 EXPECT_GT(n_ok, nq * 0.4);