15 #include <gtest/gtest.h>
17 #include <faiss/IndexIVFPQ.h>
18 #include <faiss/IndexFlat.h>
19 #include <faiss/index_io.h>
21 TEST(IVFPQ, accuracy) {
49 std::vector <float> trainvecs (nt * d);
50 for (
size_t i = 0; i < nt * d; i++) {
51 trainvecs[i] = drand48();
54 index.train (nt, trainvecs.data());
59 std::vector <float> database (nb * d);
60 for (
size_t i = 0; i < nb * d; i++) {
61 database[i] = drand48();
64 index.add (nb, database.data());
65 index_gt.add (nb, database.data());
73 std::vector <float> queries (nq * d);
74 for (
size_t i = 0; i < nq * d; i++) {
75 queries[i] = drand48();
78 std::vector<faiss::Index::idx_t> gt_nns (nq);
79 std::vector<float> gt_dis (nq);
81 index_gt.search (nq, queries.data(), 1,
82 gt_dis.data(), gt_nns.data());
86 std::vector<faiss::Index::idx_t> nns (k * nq);
87 std::vector<float> dis (k * nq);
89 index.search (nq, queries.data(), k, dis.data(), nns.data());
92 for (
int q = 0; q < nq; q++) {
94 for (
int i = 0; i < k; i++)
95 if (nns[q * k + i] == gt_nns[q])
98 EXPECT_GT(n_ok, nq * 0.4);