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