13 #include <gtest/gtest.h>
15 #include <faiss/IndexIVFPQ.h>
16 #include <faiss/IndexFlat.h>
17 #include <faiss/utils.h>
27 double eval_codec_error (
long ncentroids,
long m,
const std::vector<float> &v)
32 index.pq.cp.niter = 10;
33 index.train (nb, v.data());
37 std::vector<long> keys (nb);
38 std::vector<uint8_t> codes (nb * m);
39 index.encode_multiple (nb, keys.data(), v.data(), codes.data(),
true);
41 std::vector<float> v2 (nb * d);
42 index.decode_multiple (nb, keys.data(), codes.data(), v2.data());
51 std::vector <float> database (nb * d);
52 for (
size_t i = 0; i < nb * d; i++) {
53 database[i] = drand48();
56 double err0 = eval_codec_error(16, 8, database);
59 double err1 = eval_codec_error(128, 8, database);
60 EXPECT_GT(err0, err1);
63 double err2 = eval_codec_error(16, 16, database);
64 EXPECT_GT(err0, err2);
float fvec_L2sqr(const float *x, const float *y, size_t d)
Squared L2 distance between two vectors.