summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@oath.com>2018-04-13 10:08:39 +0000
committerTor Egge <Tor.Egge@oath.com>2018-04-13 10:26:28 +0000
commit22f3b1f8d2cda119f31522cc3b237d22c07d59bb (patch)
tree3a1257ce4656d0b784b57e343083ab5595afd37e
parent35e36bf4319a16834ebfc45707cf0e1daee62dec (diff)
Simplify pagedict4 unit tests by moving ownership of encode and decode
contexts to shared test classes.
-rw-r--r--searchlib/src/tests/diskindex/pagedict4/pagedict4_hugeword_cornercase_test.cpp25
-rw-r--r--searchlib/src/tests/diskindex/pagedict4/pagedict4test.cpp43
-rw-r--r--searchlib/src/vespa/searchlib/test/diskindex/CMakeLists.txt2
-rw-r--r--searchlib/src/vespa/searchlib/test/diskindex/pagedict4_decoders.cpp20
-rw-r--r--searchlib/src/vespa/searchlib/test/diskindex/pagedict4_decoders.h24
-rw-r--r--searchlib/src/vespa/searchlib/test/diskindex/pagedict4_encoders.cpp20
-rw-r--r--searchlib/src/vespa/searchlib/test/diskindex/pagedict4_encoders.h24
-rw-r--r--searchlib/src/vespa/searchlib/test/diskindex/pagedict4_mem_rand_reader.cpp15
-rw-r--r--searchlib/src/vespa/searchlib/test/diskindex/pagedict4_mem_rand_reader.h8
-rw-r--r--searchlib/src/vespa/searchlib/test/diskindex/pagedict4_mem_seq_reader.cpp13
-rw-r--r--searchlib/src/vespa/searchlib/test/diskindex/pagedict4_mem_seq_reader.h10
-rw-r--r--searchlib/src/vespa/searchlib/test/diskindex/pagedict4_mem_writer.cpp17
-rw-r--r--searchlib/src/vespa/searchlib/test/diskindex/pagedict4_mem_writer.h17
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);
+ }
};
}