Skip to content

Commit 57ae3b5

Browse files
committed
Add basic test for all quantization modes.
1 parent 4aa73f9 commit 57ae3b5

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

tests/unit/test_svs.cpp

+51
Original file line numberDiff line numberDiff line change
@@ -2113,6 +2113,57 @@ TYPED_TEST(SVSTest, resolve_epsilon_runtime_params) {
21132113
VecSimIndex_Free(index);
21142114
}
21152115

2116+
TEST(SVSTest, quant_modes) {
2117+
const size_t dim = 4;
2118+
const size_t n = 100;
2119+
const size_t k = 10;
2120+
2121+
for (auto quant_bits :
2122+
{VecSimSvsQuant_NONE, VecSimSvsQuant_8, VecSimSvsQuant_4, VecSimSvsQuant_4x4,
2123+
VecSimSvsQuant_4x8, VecSimSvsQuant_4x8_leanvec, VecSimSvsQuant_8x8_leanvec}) {
2124+
SVSParams params = {
2125+
.type = VecSimType_FLOAT32,
2126+
.dim = dim,
2127+
.metric = VecSimMetric_L2,
2128+
.quantBits = quant_bits,
2129+
};
2130+
2131+
VecSimParams index_params = CreateParams(params);
2132+
VecSimIndex *index = VecSimIndex_New(&index_params);
2133+
if (index == nullptr) {
2134+
if (std::get<1>(svs_details::isSVSQuantBitsSupported(quant_bits))) {
2135+
GTEST_FAIL() << "Failed to create SVS index";
2136+
} else {
2137+
GTEST_SKIP() << "SVS LVQ is not supported.";
2138+
}
2139+
}
2140+
2141+
EXPECT_EQ(VecSimIndex_IndexSize(index), 0);
2142+
2143+
std::vector<float[dim]> v(n);
2144+
for (size_t i = 0; i < n; i++) {
2145+
GenerateVector<float>(v[i], dim, i);
2146+
}
2147+
2148+
std::vector<size_t> ids(n);
2149+
std::iota(ids.begin(), ids.end(), 0);
2150+
2151+
auto svs_index = dynamic_cast<SVSIndexBase *>(index);
2152+
ASSERT_NE(svs_index, nullptr);
2153+
svs_index->addVectors(v.data(), ids.data(), n);
2154+
2155+
ASSERT_EQ(VecSimIndex_IndexSize(index), n);
2156+
2157+
float query[] = {50, 50, 50, 50};
2158+
auto verify_res = [&](size_t id, double score, size_t index) {
2159+
EXPECT_EQ(id, (index + 45));
2160+
};
2161+
runTopKSearchTest(index, query, k, verify_res, nullptr, BY_ID);
2162+
2163+
VecSimIndex_Free(index);
2164+
}
2165+
}
2166+
21162167
#else // HAVE_SVS
21172168

21182169
TEST(SVSTest, svs_not_supported) {

0 commit comments

Comments
 (0)