void TextIndexMergerTestCase::checkMergedResult(TermIteratorPtr& pTermIt, TermMap& answer) { CPPUNIT_ASSERT(pTermIt); CPPUNIT_ASSERT_EQUAL((int64_t)answer.size(), pTermIt->size()); size_t termCount = 0; while (pTermIt->hasNext()) { TermIterator::TermEntry entry = pTermIt->next(); const TextTermIterator::TermType* pTerm = dynamic_cast<const TextTermIterator::TermType*>(entry.term); CPPUNIT_ASSERT(pTerm != NULL); uint64_t hash = pTerm->getValue(); FX_TRACE("Term hash: %llu", hash); TermMap::const_iterator it = answer.find(hash); CPPUNIT_ASSERT(it != answer.end()); CPPUNIT_ASSERT_EQUAL(it->first, hash); const TermMeta& termMeta = entry.postingIterator->getTermMeta(); size_t df = it->second.size(); CPPUNIT_ASSERT_EQUAL((df_t)df, termMeta.getDocFreq()); ctf_t ctf = 0; for (size_t i = 0; i < df; ++i) { docid_t docId = entry.postingIterator->skipTo(it->second[i].first); CPPUNIT_ASSERT_EQUAL(it->second[i].first, docId); tf_t tf = it->second[i].second.size(); CPPUNIT_ASSERT_EQUAL(tf, entry.postingIterator->freq()); for (size_t j = 0; j < (size_t)tf; ++j) { loc_t posExp = it->second[i].second[j]; loc_t pos = entry.postingIterator->skipToPosition(posExp); CPPUNIT_ASSERT_EQUAL(posExp, pos); } ctf += it->second[i].second.size(); } CPPUNIT_ASSERT_EQUAL(ctf, termMeta.getCTF()); termCount++; } CPPUNIT_ASSERT_EQUAL(answer.size(), termCount); }