Changeset View
Changeset View
Standalone View
Standalone View
src/test/prevector_tests.cpp
// Copyright (c) 2015-2016 The Bitcoin Core developers | // Copyright (c) 2015-2016 The Bitcoin Core developers | ||||
// Distributed under the MIT software license, see the accompanying | // Distributed under the MIT software license, see the accompanying | ||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php. | // file COPYING or http://www.opensource.org/licenses/mit-license.php. | ||||
#include "prevector.h" | #include "prevector.h" | ||||
#include <vector> | #include <vector> | ||||
#include "reverse_iterator.h" | |||||
#include "serialize.h" | #include "serialize.h" | ||||
#include "streams.h" | #include "streams.h" | ||||
#include "test/test_bitcoin.h" | #include "test/test_bitcoin.h" | ||||
#include <boost/range/adaptor/reversed.hpp> | |||||
#include <boost/test/unit_test.hpp> | #include <boost/test/unit_test.hpp> | ||||
BOOST_FIXTURE_TEST_SUITE(prevector_tests, TestingSetup) | BOOST_FIXTURE_TEST_SUITE(prevector_tests, TestingSetup) | ||||
template <unsigned int N, typename T> class prevector_tester { | template <unsigned int N, typename T> class prevector_tester { | ||||
typedef std::vector<T> realtype; | typedef std::vector<T> realtype; | ||||
realtype real_vector; | realtype real_vector; | ||||
realtype real_vector_alt; | realtype real_vector_alt; | ||||
Show All 26 Lines | void test() { | ||||
local_check(pretype(real_vector.begin(), real_vector.end()) == | local_check(pretype(real_vector.begin(), real_vector.end()) == | ||||
pre_vector); | pre_vector); | ||||
local_check(pretype(pre_vector.begin(), pre_vector.end()) == | local_check(pretype(pre_vector.begin(), pre_vector.end()) == | ||||
pre_vector); | pre_vector); | ||||
size_t pos = 0; | size_t pos = 0; | ||||
for (const T &v : pre_vector) { | for (const T &v : pre_vector) { | ||||
local_check(v == real_vector[pos++]); | local_check(v == real_vector[pos++]); | ||||
} | } | ||||
// FIXME: For some reason, the prevector iterrator doesn't conform to | for (const T &v : reverse_iterate(pre_vector)) { | ||||
// what boost::adaptors::reverse expect. | |||||
for (const T &v : boost::adaptors::reverse(pre_vector)) { | |||||
local_check(v == real_vector[--pos]); | local_check(v == real_vector[--pos]); | ||||
} | } | ||||
for (const T &v : const_pre_vector) { | for (const T &v : const_pre_vector) { | ||||
local_check(v == real_vector[pos++]); | local_check(v == real_vector[pos++]); | ||||
} | } | ||||
for (const T &v : boost::adaptors::reverse(const_pre_vector)) { | for (const T &v : reverse_iterate(const_pre_vector)) { | ||||
local_check(v == real_vector[--pos]); | local_check(v == real_vector[--pos]); | ||||
} | } | ||||
CDataStream ss1(SER_DISK, 0); | CDataStream ss1(SER_DISK, 0); | ||||
CDataStream ss2(SER_DISK, 0); | CDataStream ss2(SER_DISK, 0); | ||||
ss1 << real_vector; | ss1 << real_vector; | ||||
ss2 << pre_vector; | ss2 << pre_vector; | ||||
local_check_equal(ss1.size(), ss2.size()); | local_check_equal(ss1.size(), ss2.size()); | ||||
for (Size s = 0; s < ss1.size(); s++) { | for (Size s = 0; s < ss1.size(); s++) { | ||||
▲ Show 20 Lines • Show All 193 Lines • Show Last 20 Lines |