diff options
author | Tor Egge <Tor.Egge@oath.com> | 2018-04-13 10:08:39 +0000 |
---|---|---|
committer | Tor Egge <Tor.Egge@oath.com> | 2018-04-13 10:26:28 +0000 |
commit | 22f3b1f8d2cda119f31522cc3b237d22c07d59bb (patch) | |
tree | 3a1257ce4656d0b784b57e343083ab5595afd37e | |
parent | 35e36bf4319a16834ebfc45707cf0e1daee62dec (diff) |
Simplify pagedict4 unit tests by moving ownership of encode and decode
contexts to shared test classes.
13 files changed, 147 insertions, 91 deletions
diff --git a/searchlib/src/tests/diskindex/pagedict4/pagedict4_hugeword_cornercase_test.cpp b/searchlib/src/tests/diskindex/pagedict4/pagedict4_hugeword_cornercase_test.cpp index 72bd2981eef..b27efa2bb89 100644 --- a/searchlib/src/tests/diskindex/pagedict4/pagedict4_hugeword_cornercase_test.cpp +++ b/searchlib/src/tests/diskindex/pagedict4/pagedict4_hugeword_cornercase_test.cpp @@ -7,7 +7,6 @@ #include <vespa/searchlib/test/diskindex/threelevelcountbuffers.h> #include <vespa/searchlib/test/diskindex/pagedict4_mem_writer.h> #include <vespa/searchlib/test/diskindex/pagedict4_mem_seq_reader.h> -#include <vespa/searchlib/test/diskindex/pagedict4_mem_rand_reader.h> #include <vespa/searchlib/index/postinglistcounts.h> #include <vespa/log/log.h> @@ -133,29 +132,16 @@ PostingListCounts makeCounts(uint32_t wantLen) using StartOffset = search::bitcompression::PageDict4StartOffset; using Writer = search::diskindex::test::PageDict4MemWriter; using SeqReader = search::diskindex::test::PageDict4MemSeqReader; -using RandReader = search::diskindex::test::PageDict4MemRandReader; void testWords() { - using EC = search::bitcompression::PostingListCountFileEncodeContext; - using DC = search::bitcompression::PostingListCountFileDecodeContext; - - EC pe; - EC spe; - EC sse; uint32_t pageBitSize = 32768; uint32_t startBits = 15 * 3 + 12; - sse._minChunkDocs = minChunkDocs; - sse._numWordIds = numWordIds; - spe.copyParams(sse); - pe.copyParams(sse); - Writer w(sse, spe, pe); uint32_t ssPad = 64; uint32_t spPad = 64; uint32_t pPad = 64; - w.startPad(ssPad, spPad, pPad); - w.allocWriters(); + Writer w(minChunkDocs, numWordIds, ssPad, spPad, pPad); PostingListCounts baseCounts = makeBaseCounts(); PostingListCounts largeCounts = makeCounts(pageBitSize - startBits); w.addCounts("a", baseCounts); @@ -165,14 +151,7 @@ void testWords() w.addCounts("e", baseCounts); w.flush(); - DC ssd; - ssd._minChunkDocs = minChunkDocs; - ssd._numWordIds = numWordIds; - DC spd; - spd.copyParams(ssd); - DC pd; - pd.copyParams(ssd); - SeqReader r(ssd, spd, pd, w); + SeqReader r(minChunkDocs, numWordIds, w._buffers); uint64_t checkWordNum = 0; PostingListCounts counts; diff --git a/searchlib/src/tests/diskindex/pagedict4/pagedict4test.cpp b/searchlib/src/tests/diskindex/pagedict4/pagedict4test.cpp index f75c04dee59..e914fe7c559 100644 --- a/searchlib/src/tests/diskindex/pagedict4/pagedict4test.cpp +++ b/searchlib/src/tests/diskindex/pagedict4/pagedict4test.cpp @@ -366,9 +366,6 @@ testWords(const std::string &logname, bool firstWordForcedCommon, bool lastWordForcedCommon) { - typedef search::bitcompression::PostingListCountFileEncodeContext EC; - typedef search::bitcompression::PostingListCountFileDecodeContext DC; - LOG(info, "%s: word test start", logname.c_str()); std::vector<WordCounts> myrand; makeWords(myrand, rnd, numWordIds, tupleCount, @@ -384,17 +381,7 @@ testWords(const std::string &logname, } LOG(info, "%s: word counts generated", logname.c_str()); - EC pe; - EC spe; - EC sse; - - sse._minChunkDocs = chunkSize; - sse._numWordIds = numWordIds; - spe.copyParams(sse); - pe.copyParams(sse); - Writer w(sse, spe, pe); - w.startPad(ssPad, spPad, pPad); - w.allocWriters(); + Writer w(chunkSize, numWordIds, ssPad, spPad, pPad); PostingListCounts counts; for (std::vector<WordCounts>::const_iterator @@ -411,23 +398,15 @@ testWords(const std::string &logname, "%s: Used %" PRIu64 "+%" PRIu64 "+%" PRIu64 " bits for %d words", logname.c_str(), - w._pFileBitSize, - w._spFileBitSize, - w._ssFileBitSize, + w._buffers._pFileBitSize, + w._buffers._spFileBitSize, + w._buffers._ssFileBitSize, (int) myrand.size()); StartOffset checkOffset; { - DC ssd; - ssd._minChunkDocs = chunkSize; - ssd._numWordIds = numWordIds; - DC spd; - spd.copyParams(ssd); - DC pd; - pd.copyParams(ssd); - - SeqReader r(ssd, spd, pd, w); + SeqReader r(chunkSize, numWordIds, w._buffers); uint64_t wordNum = 1; uint64_t checkWordNum = 0; @@ -444,20 +423,12 @@ testWords(const std::string &logname, checkOffset._fileOffset += counts._bitLength; checkOffset._accNumDocs += counts._numDocs; } - assert(pd.getReadOffset() == w._pFileBitSize); + assert(r._decoders.pd.getReadOffset() == w._buffers._pFileBitSize); LOG(info, "%s: words seqRead test OK", logname.c_str()); } { - DC ssd; - ssd._minChunkDocs = chunkSize; - ssd._numWordIds = numWordIds; - DC spd; - spd.copyParams(ssd); - DC pd; - pd.copyParams(ssd); - - RandReader rr(ssd, spd, pd, w); + RandReader rr(chunkSize, numWordIds, w._buffers); uint64_t wordNum = 1; uint64_t checkWordNum = 0; diff --git a/searchlib/src/vespa/searchlib/test/diskindex/CMakeLists.txt b/searchlib/src/vespa/searchlib/test/diskindex/CMakeLists.txt index 3c80b981ae6..f4d8853aeca 100644 --- a/searchlib/src/vespa/searchlib/test/diskindex/CMakeLists.txt +++ b/searchlib/src/vespa/searchlib/test/diskindex/CMakeLists.txt @@ -1,6 +1,8 @@ # Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. vespa_add_library(searchlib_searchlib_test_diskindex OBJECT SOURCES + pagedict4_decoders.cpp + pagedict4_encoders.cpp pagedict4_mem_seq_reader.cpp pagedict4_mem_rand_reader.cpp pagedict4_mem_writer.cpp diff --git a/searchlib/src/vespa/searchlib/test/diskindex/pagedict4_decoders.cpp b/searchlib/src/vespa/searchlib/test/diskindex/pagedict4_decoders.cpp new file mode 100644 index 00000000000..122ce582850 --- /dev/null +++ b/searchlib/src/vespa/searchlib/test/diskindex/pagedict4_decoders.cpp @@ -0,0 +1,20 @@ +// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include "pagedict4_decoders.h" + +namespace search::diskindex::test { + +PageDict4Decoders::PageDict4Decoders(uint32_t chunkSize, uint64_t numWordIds) + : ssd(), + spd(), + pd() +{ + ssd._minChunkDocs = chunkSize; + ssd._numWordIds = numWordIds; + spd.copyParams(ssd); + pd.copyParams(ssd); +} + +PageDict4Decoders::~PageDict4Decoders() = default; + +} diff --git a/searchlib/src/vespa/searchlib/test/diskindex/pagedict4_decoders.h b/searchlib/src/vespa/searchlib/test/diskindex/pagedict4_decoders.h new file mode 100644 index 00000000000..c92364ba585 --- /dev/null +++ b/searchlib/src/vespa/searchlib/test/diskindex/pagedict4_decoders.h @@ -0,0 +1,24 @@ +// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#pragma once + +#include <vespa/searchlib/bitcompression/countcompression.h> + +namespace search::diskindex::test { + +/* + * Class for writing to memory based pagedict4 structure + */ +struct PageDict4Decoders +{ + using DC = search::bitcompression::PostingListCountFileDecodeContext; + + DC ssd; + DC spd; + DC pd; + + PageDict4Decoders(uint32_t chunkSize, uint64_t numWordIds); + ~PageDict4Decoders(); +}; + +} diff --git a/searchlib/src/vespa/searchlib/test/diskindex/pagedict4_encoders.cpp b/searchlib/src/vespa/searchlib/test/diskindex/pagedict4_encoders.cpp new file mode 100644 index 00000000000..9d5cc7be9d4 --- /dev/null +++ b/searchlib/src/vespa/searchlib/test/diskindex/pagedict4_encoders.cpp @@ -0,0 +1,20 @@ +// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include "pagedict4_encoders.h" + +namespace search::diskindex::test { + +PageDict4Encoders::PageDict4Encoders(uint32_t chunkSize, uint64_t numWordIds) + : sse(), + spe(), + pe() +{ + sse._minChunkDocs = chunkSize; + sse._numWordIds = numWordIds; + spe.copyParams(sse); + pe.copyParams(sse); +} + +PageDict4Encoders::~PageDict4Encoders() = default; + +} diff --git a/searchlib/src/vespa/searchlib/test/diskindex/pagedict4_encoders.h b/searchlib/src/vespa/searchlib/test/diskindex/pagedict4_encoders.h new file mode 100644 index 00000000000..78885150eff --- /dev/null +++ b/searchlib/src/vespa/searchlib/test/diskindex/pagedict4_encoders.h @@ -0,0 +1,24 @@ +// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#pragma once + +#include <vespa/searchlib/bitcompression/countcompression.h> + +namespace search::diskindex::test { + +/* + * Class for writing to memory based pagedict4 structure + */ +struct PageDict4Encoders +{ + using EC = search::bitcompression::PostingListCountFileEncodeContext; + + EC sse; + EC spe; + EC pe; + + PageDict4Encoders(uint32_t chunkSize, uint64_t numWordIds); + ~PageDict4Encoders(); +}; + +} diff --git a/searchlib/src/vespa/searchlib/test/diskindex/pagedict4_mem_rand_reader.cpp b/searchlib/src/vespa/searchlib/test/diskindex/pagedict4_mem_rand_reader.cpp index abea52bb2ed..fdee620d12d 100644 --- a/searchlib/src/vespa/searchlib/test/diskindex/pagedict4_mem_rand_reader.cpp +++ b/searchlib/src/vespa/searchlib/test/diskindex/pagedict4_mem_rand_reader.cpp @@ -4,20 +4,19 @@ namespace search::diskindex::test { -PageDict4MemRandReader::PageDict4MemRandReader(DC &ssd, - DC &spd, - DC &pd, +PageDict4MemRandReader::PageDict4MemRandReader(uint32_t chunkSize, uint64_t numWordIds, ThreeLevelCountWriteBuffers &wb) - : ThreeLevelCountReadBuffers(ssd, spd, pd, wb), - _ssr(_rcssd, + : _decoders(chunkSize, numWordIds), + _buffers(_decoders.ssd, _decoders.spd, _decoders.pd, wb), + _ssr(_buffers._rcssd, wb._ssHeaderLen, wb._ssFileBitSize, wb._spHeaderLen, wb._spFileBitSize, wb._pHeaderLen, wb._pFileBitSize), - _spData(static_cast<const char *>(_rcspd._comprBuf)), - _pData(static_cast<const char *>(_rcpd._comprBuf)), + _spData(static_cast<const char *>(_buffers._rcspd._comprBuf)), + _pData(static_cast<const char *>(_buffers._rcpd._comprBuf)), _pageSize(search::bitcompression::PageDict4PageParams::getPageByteSize()) { - _ssr.setup(ssd); + _ssr.setup(_decoders.ssd); } PageDict4MemRandReader::~PageDict4MemRandReader() = default; diff --git a/searchlib/src/vespa/searchlib/test/diskindex/pagedict4_mem_rand_reader.h b/searchlib/src/vespa/searchlib/test/diskindex/pagedict4_mem_rand_reader.h index 05a6f386225..f51c6bfb6da 100644 --- a/searchlib/src/vespa/searchlib/test/diskindex/pagedict4_mem_rand_reader.h +++ b/searchlib/src/vespa/searchlib/test/diskindex/pagedict4_mem_rand_reader.h @@ -2,6 +2,7 @@ #pragma once +#include "pagedict4_decoders.h" #include "threelevelcountbuffers.h" #include <vespa/searchlib/bitcompression/pagedict4.h> @@ -10,7 +11,7 @@ namespace search::diskindex::test { /* * Class for performing random lookups in memory based pagedict4 structure */ -class PageDict4MemRandReader : public ThreeLevelCountReadBuffers +class PageDict4MemRandReader { public: using PageDict4SSReader = search::bitcompression::PageDict4SSReader; @@ -19,12 +20,15 @@ public: using PageDict4PLookupRes = search::bitcompression::PageDict4PLookupRes; using StartOffset = search::bitcompression::PageDict4StartOffset; using PostingListCounts = search::index::PostingListCounts; + + PageDict4Decoders _decoders; + ThreeLevelCountReadBuffers _buffers; PageDict4SSReader _ssr; const char *_spData; const char *_pData; size_t _pageSize; - PageDict4MemRandReader(DC &ssd, DC &spd, DC &pd, + PageDict4MemRandReader(uint32_t chunkSize, uint64_t numWordIds, ThreeLevelCountWriteBuffers &wb); ~PageDict4MemRandReader(); bool lookup(const std::string &key, uint64_t &wordNum, diff --git a/searchlib/src/vespa/searchlib/test/diskindex/pagedict4_mem_seq_reader.cpp b/searchlib/src/vespa/searchlib/test/diskindex/pagedict4_mem_seq_reader.cpp index 848088ee6fa..e33a0a1af0e 100644 --- a/searchlib/src/vespa/searchlib/test/diskindex/pagedict4_mem_seq_reader.cpp +++ b/searchlib/src/vespa/searchlib/test/diskindex/pagedict4_mem_seq_reader.cpp @@ -4,18 +4,17 @@ namespace search::diskindex::test { -PageDict4MemSeqReader::PageDict4MemSeqReader(DC &ssd, - DC &spd, - DC &pd, +PageDict4MemSeqReader::PageDict4MemSeqReader(uint32_t chunkSize, uint64_t numWordIds, ThreeLevelCountWriteBuffers &wb) - : ThreeLevelCountReadBuffers(ssd, spd, pd, wb), - _ssr(_rcssd, + : _decoders(chunkSize, numWordIds), + _buffers(_decoders.ssd, _decoders.spd, _decoders.pd, wb), + _ssr(_buffers._rcssd, wb._ssHeaderLen, wb._ssFileBitSize, wb._spHeaderLen, wb._spFileBitSize, wb._pHeaderLen, wb._pFileBitSize), - _pr(_ssr, spd, pd) + _pr(_ssr, _decoders.spd, _decoders.pd) { - _ssr.setup(ssd); + _ssr.setup(_decoders.ssd); _pr.setup(); } diff --git a/searchlib/src/vespa/searchlib/test/diskindex/pagedict4_mem_seq_reader.h b/searchlib/src/vespa/searchlib/test/diskindex/pagedict4_mem_seq_reader.h index f1573c6f3f8..c9709f63796 100644 --- a/searchlib/src/vespa/searchlib/test/diskindex/pagedict4_mem_seq_reader.h +++ b/searchlib/src/vespa/searchlib/test/diskindex/pagedict4_mem_seq_reader.h @@ -2,6 +2,7 @@ #pragma once +#include "pagedict4_decoders.h" #include "threelevelcountbuffers.h" #include <vespa/searchlib/bitcompression/pagedict4.h> @@ -10,18 +11,19 @@ namespace search::diskindex::test { /* * Class for performing sequential reads in memory based pagedict4 structure */ -class PageDict4MemSeqReader : public ThreeLevelCountReadBuffers +class PageDict4MemSeqReader { public: using PageDict4SSReader = search::bitcompression::PageDict4SSReader; using PageDict4Reader = search::bitcompression::PageDict4Reader; using PostingListCounts = search::index::PostingListCounts; + + PageDict4Decoders _decoders; + ThreeLevelCountReadBuffers _buffers; PageDict4SSReader _ssr; PageDict4Reader _pr; - PageDict4MemSeqReader(DC &ssd, - DC &spd, - DC &pd, + PageDict4MemSeqReader(uint32_t chunkSize, uint64_t numWordIds, ThreeLevelCountWriteBuffers &wb); ~PageDict4MemSeqReader(); void readCounts(vespalib::string &word, diff --git a/searchlib/src/vespa/searchlib/test/diskindex/pagedict4_mem_writer.cpp b/searchlib/src/vespa/searchlib/test/diskindex/pagedict4_mem_writer.cpp index 0c49b7f7935..d82f2967a0b 100644 --- a/searchlib/src/vespa/searchlib/test/diskindex/pagedict4_mem_writer.cpp +++ b/searchlib/src/vespa/searchlib/test/diskindex/pagedict4_mem_writer.cpp @@ -5,14 +5,15 @@ namespace search::diskindex::test { -PageDict4MemWriter::PageDict4MemWriter(EC &sse, - EC &spe, - EC &pe) - : ThreeLevelCountWriteBuffers(sse, spe, pe), +PageDict4MemWriter::PageDict4MemWriter(uint32_t chunkSize, uint64_t numWordIds, uint32_t ssPad, uint32_t spPad, uint32_t pPad) + : _encoders(chunkSize, numWordIds), + _buffers(_encoders.sse, _encoders.spe, _encoders.pe), _ssw(NULL), _spw(NULL), _pw(NULL) { + _buffers.startPad(ssPad, spPad, pPad); + allocWriters(); } PageDict4MemWriter::~PageDict4MemWriter() @@ -25,9 +26,9 @@ PageDict4MemWriter::~PageDict4MemWriter() void PageDict4MemWriter::allocWriters() { - _ssw = new PageDict4SSWriter(_sse); - _spw = new PageDict4SPWriter(*_ssw, _spe); - _pw = new PageDict4PWriter(*_spw, _pe); + _ssw = new PageDict4SSWriter(_buffers._sse); + _spw = new PageDict4SPWriter(*_ssw, _buffers._spe); + _pw = new PageDict4PWriter(*_spw, _buffers._pe); _spw->setup(); _pw->setup(); } @@ -36,7 +37,7 @@ void PageDict4MemWriter::flush() { _pw->flush(); - ThreeLevelCountWriteBuffers::flush(); + _buffers.flush(); } void diff --git a/searchlib/src/vespa/searchlib/test/diskindex/pagedict4_mem_writer.h b/searchlib/src/vespa/searchlib/test/diskindex/pagedict4_mem_writer.h index 96f11c0896c..ae36883f844 100644 --- a/searchlib/src/vespa/searchlib/test/diskindex/pagedict4_mem_writer.h +++ b/searchlib/src/vespa/searchlib/test/diskindex/pagedict4_mem_writer.h @@ -2,6 +2,7 @@ #pragma once +#include "pagedict4_encoders.h" #include "threelevelcountbuffers.h" namespace search::bitcompression { @@ -19,7 +20,7 @@ namespace search::diskindex::test { /* * Class for writing to memory based pagedict4 structure */ -class PageDict4MemWriter : public ThreeLevelCountWriteBuffers +class PageDict4MemWriter { public: using PageDict4SSWriter = search::bitcompression::PageDict4SSWriter; @@ -27,15 +28,25 @@ public: using PageDict4PWriter = search::bitcompression::PageDict4PWriter; using PostingListCounts = search::index::PostingListCounts; +private: + PageDict4Encoders _encoders; +public: + ThreeLevelCountWriteBuffers _buffers; +private: PageDict4SSWriter *_ssw; PageDict4SPWriter *_spw; PageDict4PWriter *_pw; - PageDict4MemWriter(EC &sse, EC &spe, EC &pe); - ~PageDict4MemWriter(); void allocWriters(); +public: + PageDict4MemWriter(uint32_t chunkSize, uint64_t numWordIds, uint32_t ssPad, uint32_t spPad, uint32_t pPad); + ~PageDict4MemWriter(); void flush(); void addCounts(const std::string &word, const PostingListCounts &counts); + void startPad(uint32_t ssHeaderLen, uint32_t spHeaderLen, uint32_t pHeaderLen) + { + _buffers.startPad(ssHeaderLen, spHeaderLen, pHeaderLen); + } }; } |