+ EXPECT_FALSE(reader.jump(data.size() + 1));
+ EXPECT_EQ(reader.value(), std::numeric_limits<uint32_t>::max());
+}
+
+template <class Reader, class List>
+void testJumpTo(const std::vector<uint32_t>& data, const List& list) {
+ CHECK(!data.empty());
+
+ Reader reader(list);
+
+ std::mt19937 gen;
+ std::uniform_int_distribution<> values(0, data.back());
+ const size_t iters = Reader::EncoderType::skipQuantum == 0 ? 100 : 10000;
+ for (size_t i = 0; i < iters; ++i) {
+ const uint32_t value = values(gen);
+ auto it = std::lower_bound(data.begin(), data.end(), value);
+ CHECK(it != data.end());
+ EXPECT_TRUE(reader.jumpTo(value));
+ EXPECT_EQ(reader.value(), *it);
+ }
+
+ EXPECT_TRUE(reader.jumpTo(0));
+ EXPECT_EQ(reader.value(), 0);
+
+ if (data.front() > 0) {
+ EXPECT_TRUE(reader.jumpTo(1));
+ EXPECT_EQ(reader.value(), data.front());
+ }
+
+ EXPECT_TRUE(reader.jumpTo(data.back()));
+ EXPECT_EQ(reader.value(), data.back());
+
+ EXPECT_FALSE(reader.jumpTo(data.back() + 1));