Fixed unit tests

This commit is contained in:
r.kuznetsov 2015-11-12 17:59:59 +03:00
parent 5ff1caa2fa
commit 0d25c86615

View file

@ -15,166 +15,58 @@
namespace
{
void MarkNodesAsReaded(df::TFeaturesInfo & features, vector<FeatureID> const & featuresToRead)
{
for (df::FeatureInfo & info : features)
{
if (find(featuresToRead.begin(), featuresToRead.end(), info.m_id) != featuresToRead.end())
info.m_isOwner = true;
}
}
// void ResetReadedMark(vector<df::FeatureInfo> & features)
// {
// for (size_t i = 0; i < features.size(); ++i)
// features[i].m_isOwner = false;
// }
}
UNIT_TEST(MemoryFeatureIndex_SimpleTest)
void MarkNodesAsReaded(df::TFeaturesInfo & features, vector<FeatureID> const & featuresToRead)
{
// df::TileInfo info1(1, 1, 10);
// df::TileInfo info2(1, 2, 10);
// set<FeatureID> features;
// for (size_t i = 0; i < 10; ++i)
// {
// info1.m_featureInfo.push_back(df::FeatureInfo(FeatureID(0, i)));
// info2.m_featureInfo.push_back(df::FeatureInfo(FeatureID(0, 2 * i)));
// features.insert(info1.m_featureInfo.back().m_id);
// features.insert(info2.m_featureInfo.back().m_id);
// }
// df::MemoryFeatureIndex index;
// {
// vector<size_t> result;
// index.ReadFeaturesRequest(info1.m_featureInfo, result);
// MarkNodesAsReaded(info1.m_featureInfo, result);
// }
// {
// vector<size_t> result;
// index.ReadFeaturesRequest(info2.m_featureInfo, result);
// MarkNodesAsReaded(info2.m_featureInfo, result);
// }
// set<FeatureID> readedFeatures;
// for (size_t i = 0; i < info1.m_featureInfo.size(); ++i)
// TEST_EQUAL(readedFeatures.insert(info1.m_featureInfo[i].m_id).second, true, ());
// for (size_t i = 0; i < info2.m_featureInfo.size(); ++i)
// {
// if (info2.m_featureInfo[i].m_isOwner)
// TEST_EQUAL(readedFeatures.insert(info2.m_featureInfo[i].m_id).second, true, ());
// }
// TEST_EQUAL(readedFeatures.size(), features.size(), ());
}
UNIT_TEST(MemoryFeatureIndex_Test)
{
// df::TileInfo info1(1, 1, 10);
// df::TileInfo info2(1, 2, 10);
// for (size_t i = 0; i < 10; ++i)
// {
// FeatureID id1(0, i);
// FeatureID id2(0, 2 * i);
// info1.m_featureInfo.push_back(df::FeatureInfo(FeatureID(0, i)));
// info2.m_featureInfo.push_back(df::FeatureInfo(FeatureID(0, 2 * i)));
// }
// df::MemoryFeatureIndex index;
// {
// vector<size_t> result;
// index.ReadFeaturesRequest(info1.m_featureInfo, result);
// TEST_EQUAL(result.size(), info1.m_featureInfo.size(), ());
// MarkNodesAsReaded(info1.m_featureInfo, result);
// }
// {
// vector<size_t> result;
// index.ReadFeaturesRequest(info2.m_featureInfo, result);
// TEST_EQUAL(result.size(), 5, ());
// MarkNodesAsReaded(info2.m_featureInfo, result);
// }
// index.RemoveFeatures(info1.m_featureInfo);
// ResetReadedMark(info1.m_featureInfo);
// {
// vector<size_t> result;
// index.ReadFeaturesRequest(info2.m_featureInfo, result);
// TEST_EQUAL(result.size(), 5, ());
// MarkNodesAsReaded(info2.m_featureInfo, result);
// }
// for (size_t i = 0; i < info2.m_featureInfo.size(); ++i)
// TEST_EQUAL(info2.m_featureInfo[i].m_isOwner, true, ());
// index.RemoveFeatures(info2.m_featureInfo);
// ResetReadedMark(info2.m_featureInfo);
// {
// vector<size_t> result;
// index.ReadFeaturesRequest(info1.m_featureInfo, result);
// TEST_EQUAL(result.size(), info1.m_featureInfo.size(), ());
// MarkNodesAsReaded(info1.m_featureInfo, result);
// }
// for (size_t i = 0; i < info1.m_featureInfo.size(); ++i)
// TEST_EQUAL(info1.m_featureInfo[i].m_isOwner, true, ());
}
namespace
{
void JoinFinishFinction(threads::IRoutine * routine, threads::Condition & condition, int & counter)
for (df::FeatureInfo & info : features)
{
condition.Lock();
counter++;
condition.Unlock();
delete routine;
condition.Signal();
}
class TestRoutine : public threads::IRoutine
{
public:
TestRoutine(df::TFeaturesInfo & features, df::MemoryFeatureIndex &index)
: m_features(features)
, m_index(index)
{
}
virtual void Do()
{
vector<FeatureID> result;
df::MemoryFeatureIndex::Lock lock(m_index);
m_index.ReadFeaturesRequest(m_features, result);
MarkNodesAsReaded(m_features, result);
}
private:
df::TFeaturesInfo & m_features;
df::MemoryFeatureIndex & m_index;
};
void GenerateFeatures(df::TFeaturesInfo & features)
{
for (int i = 0; i < 10000; ++i)
features.push_back(df::FeatureInfo(FeatureID(MwmSet::MwmId(), rand())));
if (find(featuresToRead.begin(), featuresToRead.end(), info.m_id) != featuresToRead.end())
info.m_isOwner = true;
}
}
void JoinFinishFinction(threads::IRoutine * routine, threads::Condition & condition, int & counter)
{
condition.Lock();
counter++;
condition.Unlock();
delete routine;
condition.Signal();
}
class TestRoutine : public threads::IRoutine
{
public:
TestRoutine(df::TFeaturesInfo & features, df::MemoryFeatureIndex &index)
: m_features(features)
, m_index(index)
{}
virtual void Do()
{
vector<FeatureID> result;
df::MemoryFeatureIndex::Lock lock(m_index);
m_index.ReadFeaturesRequest(m_features, result);
MarkNodesAsReaded(m_features, result);
}
private:
df::TFeaturesInfo & m_features;
df::MemoryFeatureIndex & m_index;
};
void GenerateFeatures(df::TFeaturesInfo & features, int taskIndex)
{
int const kCount = 10000;
for (int i = 0; i < kCount; ++i)
features.push_back(df::FeatureInfo(FeatureID(MwmSet::MwmId(), taskIndex * kCount + i)));
}
} // namespace
UNIT_TEST(MemoryFeatureIndex_MT_Test)
{
std::srand(std::time(0));
const int TASK_COUNT = 10;
threads::Condition cond;
int counter = 0;
@ -185,7 +77,7 @@ UNIT_TEST(MemoryFeatureIndex_MT_Test)
for (int i = 0; i < TASK_COUNT; ++i)
{
GenerateFeatures(features[i]);
GenerateFeatures(features[i], i);
pool.PushBack(new TestRoutine(features[i], index));
}