12 #include <gtest/gtest.h>
14 #include <faiss/IndexIVFPQ.h>
15 #include <faiss/IndexFlat.h>
16 #include <faiss/utils.h>
28 double eval_codec_error (
long ncentroids,
long m,
const std::vector<float> &v)
33 index.pq.cp.niter = 10;
34 index.train (nb, v.data());
38 std::vector<long> keys (nb);
39 std::vector<uint8_t> codes (nb * m);
40 index.encode_multiple (nb, keys.data(), v.data(), codes.data(),
true);
42 std::vector<float> v2 (nb * d);
43 index.decode_multiple (nb, keys.data(), codes.data(), v2.data());
53 std::vector <float> database (nb * d);
54 for (
size_t i = 0; i < nb * d; i++) {
55 database[i] = drand48();
58 double err0 = eval_codec_error(16, 8, database);
61 double err1 = eval_codec_error(128, 8, database);
62 EXPECT_GT(err0, err1);
65 double err2 = eval_codec_error(16, 16, database);
66 EXPECT_GT(err0, err2);
float fvec_L2sqr(const float *x, const float *y, size_t d)
Squared L2 distance between two vectors.