Skip to content

Commit

Permalink
Towards resolving #356
Browse files Browse the repository at this point in the history
  • Loading branch information
searchivarius committed May 30, 2019
1 parent e203c94 commit 9067080
Show file tree
Hide file tree
Showing 4 changed files with 154 additions and 49 deletions.
39 changes: 20 additions & 19 deletions similarity_search/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -35,41 +35,39 @@ if(NOT WIN32)
endif()
#message(FATAL_ERROR "stopping... compiler version is: ${CMAKE_CXX_COMPILER_ID} ${CXX_COMPILER_VERSION}")

set(SIMD_FLAGS " -march=native")
#set(SIMD_FLAGS "-march=x86-64")
#set(SIMD_FLAGS "-march=core2")
#set(SIMD_FLAGS "-fpic -msse4.2")

set(WARN_FLAGS "-Wall -Wunreachable-code -Wcast-align")

if(${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU")
# require at least gcc 4.7
if (CXX_COMPILER_VERSION VERSION_LESS 4.7)
message(FATAL_ERROR "GCC version must be at least 4.7!")
endif()
# Uncomment the following lines to see how the code compiles without AVX,SSE4.2 and/or SSE2
#set (CMAKE_CXX_FLAGS_RELEASE "-Wall -Wunreachable-code -Ofast -lm -DNDEBUG -std=c++11 -DHAVE_CXX0X -pthread -fpic -march=x86-64")
#set (CMAKE_CXX_FLAGS_RELEASE "-Wall -Wunreachable-code -Ofast -lm -DNDEBUG -std=c++11 -DHAVE_CXX0X -pthread -fpic -march=core2")
#set (CMAKE_CXX_FLAGS_RELEASE "-Wall -Wunreachable-code -Ofast -lm -DNDEBUG -std=c++11 -DHAVE_CXX0X -pthread -fpic -msse4.2")
set (CMAKE_CXX_FLAGS_RELEASE "-Wall -Wunreachable-code -Wcast-align -Ofast -lm -DNDEBUG -std=c++11 -pthread -DHAVE_CXX0X -march=native -Wl,--no-as-needed -fpic")
set (CMAKE_CXX_FLAGS_DEBUG "-Wall -Wunreachable-code -Wcast-align -ggdb -lm -DNDEBUG -std=c++11 -pthread -DHAVE_CXX0X -march=native -Wl,--no-as-needed -fpic")
set (CMAKE_CXX_FLAGS_RELEASE "${WARN_FLAGS} -Ofast -lm -DNDEBUG -std=c++11 -pthread -DHAVE_CXX0X ${SIMD_FLAGS} -Wl,--no-as-needed -fpic")
set (CMAKE_CXX_FLAGS_DEBUG "${WARN_FLAGS} -ggdb -lm -DNDEBUG -std=c++11 -pthread -DHAVE_CXX0X ${SIMD_FLAGS} -Wl,--no-as-needed -fpic")
elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "Intel")
if (CXX_COMPILER_VERSION VERSION_LESS 14.0.1)
message(FATAL_ERROR "Intel version must be at least 14.0.1!")
endif()
set (CMAKE_CXX_FLAGS_RELEASE "-Wall -Wunreachable-code -Ofast -DNDEBUG -std=c++11 -DHAVE_CXX0X -pthread -march=native -fpic")
set (CMAKE_CXX_FLAGS_DEBUG "-Wall -Wunreachable-code -ggdb -DNDEBUG -std=c++11 -DHAVE_CXX0X -pthread -march=native -fpic")
set (CMAKE_CXX_FLAGS_RELEASE "-Wall -Wunreachable-code -Ofast -DNDEBUG -std=c++11 -DHAVE_CXX0X -pthread ${SIMD_FLAGS} -fpic")
set (CMAKE_CXX_FLAGS_DEBUG "-Wall -Wunreachable-code -ggdb -DNDEBUG -std=c++11 -DHAVE_CXX0X -pthread ${SIMD_FLAGS} -fpic")
elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang")
if (CXX_COMPILER_VERSION VERSION_LESS 4.2.1)
message(FATAL_ERROR "Clang version must be at least 3.4 (GCC >= 4.2.1 equivalent)!")
endif()
if (CMAKE_SYSTEM_NAME MATCHES Darwin)
# MACOSX
set (CMAKE_CXX_FLAGS_RELEASE "-Wall -Wunreachable-code -Wcast-align -O3 -DNDEBUG -std=c++11 -DHAVE_CXX0X -pthread -fpic -march=native")
set (CMAKE_CXX_FLAGS_DEBUG "-Wall -Wunreachable-code -Wcast-align -ggdb -DNDEBUG -std=c++11 -DHAVE_CXX0X -pthread -fpic -march=native")
set (CMAKE_CXX_FLAGS_RELEASE "${WARN_FLAGS} -O3 -DNDEBUG -std=c++11 -DHAVE_CXX0X -pthread -fpic ${SIMD_FLAGS}")
set (CMAKE_CXX_FLAGS_DEBUG "${WARN_FLAGS} -ggdb -DNDEBUG -std=c++11 -DHAVE_CXX0X -pthread -fpic ${SIMD_FLAGS}")
else()
set (CMAKE_CXX_FLAGS_RELEASE "-Wall -Wunreachable-code -Wcast-align -O3 -DNDEBUG -std=c++11 -DHAVE_CXX0X -pthread -march=native -fpic")
set (CMAKE_CXX_FLAGS_DEBUG "-Wall -Wunreachable-code -Wcast-align -ggdb -DNDEBUG -std=c++11 -DHAVE_CXX0X -pthread -march=native -fpic")
set (CMAKE_CXX_FLAGS_RELEASE "${WARN_FLAGS} -O3 -DNDEBUG -std=c++11 -DHAVE_CXX0X -pthread ${SIMD_FLAGS} -Wl,--no-as-needed -fpic")
set (CMAKE_CXX_FLAGS_DEBUG "${WARN_FLAGS} -ggdb -DNDEBUG -std=c++11 -DHAVE_CXX0X -pthread ${SIMD_FLAGS} -Wl,--no-as-needed -fpic")
endif()
#message(FATAL_ERROR "CLANG ${CMAKE_SYSTEM_NAME}")
elseif(WIN32)
# TODO how can we add support for later versions? There seems to be no flag with the semantics "version x or higher"
if(NOT MSVC12 AND NOT MSVC14)
message(FATAL_ERROR "On Windows, only MSVC version 12 and 14 are supported!")
if(MSVC_VERSION LESS 1800)
message(FATAL_ERROR "On Windows, only MSVC version should be >= 12, code 1800, current version ${MSVC_VERSION}!")
endif()
else ()
message(FATAL_ERROR "Unrecognized compiler (use GCC, Clang, Intel compiler, or MSVC (on Windows)!")
Expand Down Expand Up @@ -147,4 +145,7 @@ if (NOT WITHOUT_TESTS)
add_subdirectory (test)
endif()

message (STATUS "Compiler: ${CMAKE_CXX_COMPILER_ID} ${CXX_COMPILER_VERSION}")
message(STATUS "OS: ${CMAKE_SYSTEM_NAME}")
message(STATUS "Compiler: ${CMAKE_CXX_COMPILER_ID} ${CXX_COMPILER_VERSION}")
message(STATUS "CXX flags release: ${CMAKE_CXX_FLAGS_RELEASE}")
message(STATUS "CXX flags debug: ${CMAKE_CXX_FLAGS_DEBUG}")
17 changes: 16 additions & 1 deletion similarity_search/include/space.h
Original file line number Diff line number Diff line change
Expand Up @@ -212,9 +212,24 @@ class Space {
const IdTypeUnsign MaxNumObjects = MAX_DATASET_QTY) const;
void WriteDataset(const ObjectVector& dataset,
const vector<string>& vExternIds,
const string& inputFile,
const string& outputFile,
const IdTypeUnsign MaxNumObjects = MAX_DATASET_QTY) const;

/*
* if the space stores some useful information in the input state,
* it needs to override ReadObjectVectorFromBinData, and WriteObjectVectorBinData.
* PS: Here an assumption is that data is empty
*/
virtual unique_ptr<DataFileInputState> ReadObjectVectorFromBinData(ObjectVector& dataset,
vector<string>& vExternIds,
const std::string& inputFile,
const IdTypeUnsign maxQty=MAX_DATASET_QTY) const;

virtual void WriteObjectVectorBinData(const ObjectVector& dataset,
const vector<string>& vExternIds,
const std::string& outputFile,
const IdTypeUnsign MaxNumObjects = MAX_DATASET_QTY) const;

/*
* For some real-valued or integer-valued *DENSE* vector spaces this function
* returns the number of vector elements. For all other spaces, it returns
Expand Down
47 changes: 47 additions & 0 deletions similarity_search/src/space.cc
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,53 @@ void Space<dist_t>::WriteDataset(const ObjectVector& dataset,
outState->Close();
}

// Doesn't support external IDs, just makes them all empty
template <typename dist_t>
unique_ptr<DataFileInputState>
Space<dist_t>::ReadObjectVectorFromBinData(ObjectVector& data,
vector<string>& vExternIds,
const std::string& fileName,
const IdTypeUnsign maxQty) const {
CHECK_MSG(data.empty(), "this function expects data to be empty on call");
size_t qty;
size_t objSize;
std::ifstream input(fileName, std::ios::binary);
CHECK_MSG(input, "Cannot open file '" + fileName + "' for writing");
input.exceptions(std::ios::badbit | std::ios::failbit);
vExternIds.clear();

readBinaryPOD(input, qty);

for (unsigned i = 0; i < std::min(qty, size_t(maxQty)); ++i) {
readBinaryPOD(input, objSize);
unique_ptr<char []> buf(new char[objSize]);
input.read(&buf[0], objSize);
data.push_back(new Object(buf.release()));
}
vExternIds.resize(data.size());
return unique_ptr<DataFileInputState>(new DataFileInputState());
}

// Doesn't support external IDs
template <typename dist_t>
void Space<dist_t>::WriteObjectVectorBinData(const ObjectVector& data,
const vector<string>& vExternIds,
const std::string& fileName,
const IdTypeUnsign maxQty) const {
std::ofstream output(fileName, std::ios::binary);
CHECK_MSG(output, "Cannot open file '" + fileName + "' for writing");
output.exceptions(std::ios::badbit | std::ios::failbit);

writeBinaryPOD(output, size_t(data.size()));
for (unsigned i = 0; i < std::min(data.size(), size_t(maxQty)); ++i) {
const Object* o = data[i];
writeBinaryPOD(output, o->bufferlength());
output.write(o->buffer(), o->bufferlength());
}
output.close();
}


template class Space<int>;
template class Space<float>;
template class Space<double>;
Expand Down
100 changes: 71 additions & 29 deletions similarity_search/test/test_space_serial.cc
Original file line number Diff line number Diff line change
Expand Up @@ -43,13 +43,24 @@ namespace similarity {
using namespace std;

template <typename dist_t>
bool fullTestCommon(Space<dist_t>* pSpace, const ObjectVector& dataSet1, const vector<string>& vExternIds1, size_t maxNumRec, const string& tmpFileName,bool bTestExternId) {
pSpace->WriteDataset(dataSet1, vExternIds1, tmpFileName);

bool fullTestCommon(bool binTest, Space<dist_t>* pSpace,
const ObjectVector& dataSet1,
const vector<string>& vExternIds1,
size_t maxNumRec,
const string& tmpFileName,
bool bTestExternId) {
ObjectVector dataSet2;
vector<string> vExternIds2;
unique_ptr<DataFileInputState> inpState;

if (binTest) {
pSpace->WriteDataset(dataSet1, vExternIds1, tmpFileName);
inpState = pSpace->ReadDataset(dataSet2, vExternIds2, tmpFileName);
} else {
pSpace->WriteObjectVectorBinData(dataSet1, vExternIds1, tmpFileName);
inpState = pSpace->ReadObjectVectorFromBinData(dataSet2, vExternIds2, tmpFileName);
}

unique_ptr<DataFileInputState> inpState(pSpace->ReadDataset(dataSet2, vExternIds2, tmpFileName));
pSpace->UpdateParamsFromFile(*inpState);

if (maxNumRec != dataSet2.size()) {
Expand All @@ -64,6 +75,10 @@ bool fullTestCommon(Space<dist_t>* pSpace, const ObjectVector& dataSet1, const v
}

for (size_t i = 0; i < maxNumRec; ++i) {
// Because saving binary data doesn't support saving external IDs just don't test
// correctness of saving/restoring external IDs in this case, but internal IDs
// still need to be checked!

if (bTestExternId) {
if (vExternIds1[i] != vExternIds2[i]) {
LOG(LIB_ERROR) << "External IDs are different, i = " << i << " id1 = '" << vExternIds1[i] << "' id2 = '" << vExternIds2[i] << "'" ;
Expand All @@ -78,13 +93,23 @@ bool fullTestCommon(Space<dist_t>* pSpace, const ObjectVector& dataSet1, const v
pSpace->CreateStrFromObj(dataSet2[i], vExternIds2[i]);
return false;
}
if (dataSet1[i]->id() != dataSet2[i]->id()) {
LOG(LIB_ERROR) << "Objects IDs are different, i = " << i;
LOG(LIB_ERROR) << "Object 1 id: "<< dataSet1[i]->id() << " Object 2 id: " << dataSet2[i]->id();
}
}

return true;
}

template <typename dist_t>
bool fullTest(const string& dataSetFileName, size_t maxNumRec, const string& tmpFileName, const string& spaceName, const char* pSpaceParams[], bool bTestExternId) {
bool fullTest(bool binTest,
const string& dataSetFileName,
size_t maxNumRec,
const string& tmpFileName,
const string& spaceName,
const char* pSpaceParams[],
bool bTestExternId) {
vector<string> spaceParams;

LOG(LIB_INFO) << "Space name: " << spaceName << " distance type: " << DistTypeName<dist_t>() << " data file: " << dataSetFileName << " maxNumRec=" << maxNumRec;
Expand All @@ -108,11 +133,11 @@ bool fullTest(const string& dataSetFileName, size_t maxNumRec, const string& tmp
return false;
}

return fullTestCommon(space.get(), dataSet1, vExternIds1, maxNumRec, tmpFileName, bTestExternId);
return fullTestCommon(binTest, space.get(), dataSet1, vExternIds1, maxNumRec, tmpFileName, bTestExternId);
}

template <typename dist_t>
bool fullTest(const vector<string>& dataSetStr, size_t maxNumRec, const string& tmpFileName, const string& spaceName, const char* pSpaceParams[], bool bTestExternId) {
bool fullTest(bool binTest, const vector<string>& dataSetStr, size_t maxNumRec, const string& tmpFileName, const string& spaceName, const char* pSpaceParams[], bool bTestExternId) {
vector<string> spaceParams;

LOG(LIB_INFO) << "Space name: " << spaceName << " maxNumRec=" << maxNumRec;
Expand Down Expand Up @@ -142,7 +167,7 @@ bool fullTest(const vector<string>& dataSetStr, size_t maxNumRec, const string&
return false;
}

return fullTestCommon(space.get(), dataSet1, vExternIds1, maxNumRec, tmpFileName, bTestExternId);
return fullTestCommon(binTest, space.get(), dataSet1, vExternIds1, maxNumRec, tmpFileName, bTestExternId);
}

const char *emptyParams[] = {NULL};
Expand All @@ -151,49 +176,60 @@ const char *paramsDistCosine[] = {"dist=" SPACE_WORD_EMBED_DIST_COSINE, NULL};

TEST(Test_WordEmbedSpace) {
for (size_t maxNumRec = 1; maxNumRec < MAX_NUM_REC; ++maxNumRec) {
EXPECT_EQ(true, fullTest<float>("glove.6B.100d_100.txt", maxNumRec, "tmp_out_file.txt", SPACE_WORD_EMBED, paramsDistL2, true));
EXPECT_EQ(true, fullTest<double>("glove.6B.100d_100.txt", maxNumRec, "tmp_out_file.txt",SPACE_WORD_EMBED, paramsDistCosine, true));
EXPECT_EQ(true, fullTest<float>("glove.6B.100d_100.txt", maxNumRec, "tmp_out_file.txt", SPACE_WORD_EMBED, paramsDistL2, true));
EXPECT_EQ(true, fullTest<double>("glove.6B.100d_100.txt", maxNumRec, "tmp_out_file.txt",SPACE_WORD_EMBED, paramsDistCosine, true));
bool binTest = false; // saving of external IDs isn't implemented for binary data writing/reading
EXPECT_EQ(true, fullTest<float>(binTest, "glove.6B.100d_100.txt", maxNumRec, "tmp_out_file.txt", SPACE_WORD_EMBED, paramsDistL2, true));
EXPECT_EQ(true, fullTest<double>(binTest, "glove.6B.100d_100.txt", maxNumRec, "tmp_out_file.txt",SPACE_WORD_EMBED, paramsDistCosine, true));
EXPECT_EQ(true, fullTest<float>(binTest, "glove.6B.100d_100.txt", maxNumRec, "tmp_out_file.txt", SPACE_WORD_EMBED, paramsDistL2, true));
EXPECT_EQ(true, fullTest<double>(binTest, "glove.6B.100d_100.txt", maxNumRec, "tmp_out_file.txt",SPACE_WORD_EMBED, paramsDistCosine, true));
}
}

TEST(Test_DenseVectorSpace) {
for (size_t maxNumRec = 1; maxNumRec < MAX_NUM_REC; ++maxNumRec) {
EXPECT_EQ(true, fullTest<float>("final128_10K.txt", maxNumRec, "tmp_out_file.txt", "l2", emptyParams, false));
EXPECT_EQ(true, fullTest<double>("final128_10K.txt", maxNumRec, "tmp_out_file.txt", "l2", emptyParams, false));
for (unsigned binTest = 0; binTest < 2; ++binTest) {
EXPECT_EQ(true, fullTest<float>(binTest, "final128_10K.txt", maxNumRec, "tmp_out_file.txt", "l2", emptyParams, false));
EXPECT_EQ(true, fullTest<double>(binTest, "final128_10K.txt", maxNumRec, "tmp_out_file.txt", "l2", emptyParams, false));
}
}
}

TEST(Test_DenseVectorKLDiv) {
// Test KL-diverg. with and without precomputation of logarithms
for (size_t maxNumRec = 1; maxNumRec < MAX_NUM_REC; ++maxNumRec) {
EXPECT_EQ(true, fullTest<float>("final128_10K.txt", maxNumRec, "tmp_out_file.txt", "kldivgenfast", emptyParams, false));
EXPECT_EQ(true, fullTest<double>("final128_10K.txt", maxNumRec, "tmp_out_file.txt", "kldivgenfast", emptyParams, false));
EXPECT_EQ(true, fullTest<float>("final128_10K.txt", maxNumRec, "tmp_out_file.txt", "kldivgenslow", emptyParams, false));
EXPECT_EQ(true, fullTest<double>("final128_10K.txt", maxNumRec, "tmp_out_file.txt", "kldivgenslow", emptyParams, false));
for (unsigned binTest = 0; binTest < 2; ++binTest) {
EXPECT_EQ(true, fullTest<float>(binTest, "final128_10K.txt", maxNumRec, "tmp_out_file.txt", "kldivgenfast", emptyParams, false));
EXPECT_EQ(true, fullTest<double>(binTest, "final128_10K.txt", maxNumRec, "tmp_out_file.txt", "kldivgenfast", emptyParams, false));
EXPECT_EQ(true, fullTest<float>(binTest, "final128_10K.txt", maxNumRec, "tmp_out_file.txt", "kldivgenslow", emptyParams, false));
EXPECT_EQ(true, fullTest<double>(binTest, "final128_10K.txt", maxNumRec, "tmp_out_file.txt", "kldivgenslow", emptyParams, false));
}
}
}

TEST(Test_SparseVectorSpace) {
for (size_t maxNumRec = 1; maxNumRec < MAX_NUM_REC; ++maxNumRec) {
EXPECT_EQ(true, fullTest<float>("sparse_5K.txt", maxNumRec, "tmp_out_file.txt", "cosinesimil_sparse", emptyParams, false));
EXPECT_EQ(true, fullTest<float>("sparse_5K.txt", maxNumRec, "tmp_out_file.txt", "angulardist_sparse", emptyParams, false));
EXPECT_EQ(true, fullTest<double>("sparse_5K.txt", maxNumRec, "tmp_out_file.txt", "cosinesimil_sparse", emptyParams, false));
EXPECT_EQ(true, fullTest<double>("sparse_5K.txt", maxNumRec, "tmp_out_file.txt", "angulardist_sparse", emptyParams, false));
for (unsigned binTest = 0; binTest < 2; ++binTest) {
EXPECT_EQ(true, fullTest<float>(binTest, "sparse_5K.txt", maxNumRec, "tmp_out_file.txt", "cosinesimil_sparse", emptyParams, false));
EXPECT_EQ(true, fullTest<float>(binTest, "sparse_5K.txt", maxNumRec, "tmp_out_file.txt", "angulardist_sparse", emptyParams, false));
EXPECT_EQ(true, fullTest<double>(binTest, "sparse_5K.txt", maxNumRec, "tmp_out_file.txt", "cosinesimil_sparse", emptyParams, false));
EXPECT_EQ(true, fullTest<double>(binTest, "sparse_5K.txt", maxNumRec, "tmp_out_file.txt", "angulardist_sparse", emptyParams, false));
}
}
}

TEST(Test_SparseVectorSpaceFast) {
for (size_t maxNumRec = 1; maxNumRec < MAX_NUM_REC; ++maxNumRec) {
EXPECT_EQ(true, fullTest<float>("sparse_5K.txt", maxNumRec, "tmp_out_file.txt", "cosinesimil_sparse_fast", emptyParams, false));
EXPECT_EQ(true, fullTest<float>("sparse_5K.txt", maxNumRec, "tmp_out_file.txt", "angulardist_sparse_fast", emptyParams, false));
for (unsigned binTest = 0; binTest < 2; ++binTest) {
EXPECT_EQ(true, fullTest<float>(binTest, "sparse_5K.txt", maxNumRec, "tmp_out_file.txt", "cosinesimil_sparse_fast", emptyParams, false));
EXPECT_EQ(true, fullTest<float>(binTest, "sparse_5K.txt", maxNumRec, "tmp_out_file.txt", "angulardist_sparse_fast", emptyParams, false));
}
}
}

TEST(Test_StringSpace) {
for (size_t maxNumRec = 1; maxNumRec < MAX_NUM_REC; ++maxNumRec) {
EXPECT_EQ(true, fullTest<int>("dna32_4_5K.txt", maxNumRec, "tmp_out_file.txt", "leven", emptyParams, false));
for (unsigned binTest = 0; binTest < 2; ++binTest) {
EXPECT_EQ(true, fullTest<int>(binTest, "dna32_4_5K.txt", maxNumRec, "tmp_out_file.txt", "leven", emptyParams, false));
}
}
}

Expand All @@ -210,7 +246,9 @@ TEST(Test_BitHamming) {
testVect.push_back(ss.str());
}
for (size_t maxNumRec = 1; maxNumRec < MAX_NUM_REC; ++maxNumRec) {
EXPECT_EQ(true, fullTest<int>(testVect, maxNumRec, "tmp_out_file.txt", "bit_hamming", emptyParams, false));
for (unsigned binTest = 0; binTest < 2; ++binTest) {
EXPECT_EQ(true, fullTest<int>(binTest, testVect, maxNumRec, "tmp_out_file.txt", "bit_hamming", emptyParams, false));
}
}
}

Expand All @@ -227,16 +265,20 @@ TEST(Test_BitJaccard) {
testVect.push_back(ss.str());
}
for (size_t maxNumRec = 1; maxNumRec < MAX_NUM_REC; ++maxNumRec) {
EXPECT_EQ(true, fullTest<float>(testVect, maxNumRec, "tmp_out_file.txt", "bit_jaccard", emptyParams, false));
for (unsigned binTest = 0; binTest < 2; ++binTest) {
EXPECT_EQ(true, fullTest<float>(binTest, testVect, maxNumRec, "tmp_out_file.txt", "bit_jaccard", emptyParams, false));
}
}
}

#if defined(WITH_EXTRAS)
TEST(Test_SQFD) {
const char* sqfdParams[] = {"alpha=1", NULL} ;
for (size_t maxNumRec = 1; maxNumRec < MAX_NUM_REC; ++maxNumRec) {
EXPECT_EQ(true, fullTest<float>("sqfd20_10k_10k.txt", maxNumRec, "tmp_out_file.txt", "sqfd_heuristic_func", sqfdParams, false));
EXPECT_EQ(true, fullTest<double>("sqfd20_10k_10k.txt", maxNumRec, "tmp_out_file.txt", "sqfd_heuristic_func", sqfdParams, false));
for (unsigned binTest = 0; binTest < 2; ++binTest) {
EXPECT_EQ(true, fullTest<float>(binTest, "sqfd20_10k_10k.txt", maxNumRec, "tmp_out_file.txt", "sqfd_heuristic_func", sqfdParams, false));
EXPECT_EQ(true, fullTest<double>(binTest, "sqfd20_10k_10k.txt", maxNumRec, "tmp_out_file.txt", "sqfd_heuristic_func", sqfdParams, false));
}
}
}
#endif
Expand Down

0 comments on commit 9067080

Please sign in to comment.