PIVX Core  5.6.99
P2P Digital Currency
convertbits_tests.cpp
Go to the documentation of this file.
1 // Copyright (c) 2018 The Zcash developers
2 // Distributed under the MIT software license, see the accompanying
3 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
4 
5 #include <utilstrencodings.h>
6 #include <test/test_pivx.h>
7 #include "sapling/sapling_util.h"
8 
9 #include <boost/test/unit_test.hpp>
10 
12 
13 BOOST_AUTO_TEST_CASE(convertbits_deterministic)
14 {
15  for (size_t i = 0; i < 256; i++) {
16  std::vector<unsigned char> input(32, i);
17  std::vector<unsigned char> data;
18  std::vector<unsigned char> output;
19  ConvertBits<8, 5, true>([&](unsigned char c) { data.push_back(c); }, input.begin(), input.end());
20  ConvertBits<5, 8, false>([&](unsigned char c) { output.push_back(c); }, data.begin(), data.end());
21  BOOST_CHECK_EQUAL(data.size(), 52);
22  BOOST_CHECK_EQUAL(output.size(), 32);
23  BOOST_CHECK(input == output);
24  }
25 
26  for (size_t i = 0; i < 256; i++) {
27  std::vector<unsigned char> input(43, i);
28  std::vector<unsigned char> data;
29  std::vector<unsigned char> output;
30  ConvertBits<8, 5, true>([&](unsigned char c) { data.push_back(c); }, input.begin(), input.end());
31  ConvertBits<5, 8, false>([&](unsigned char c) { output.push_back(c); }, data.begin(), data.end());
32  BOOST_CHECK_EQUAL(data.size(), 69);
33  BOOST_CHECK_EQUAL(output.size(), 43);
34  BOOST_CHECK(input == output);
35  }
36 }
37 
38 BOOST_AUTO_TEST_CASE(convertbits_random)
39 {
40  for (size_t i = 0; i < 1000; i++) {
41  auto input = random_uint256();
42  std::vector<unsigned char> data;
43  std::vector<unsigned char> output;
44  ConvertBits<8, 5, true>([&](unsigned char c) { data.push_back(c); }, input.begin(), input.end());
45  ConvertBits<5, 8, false>([&](unsigned char c) { output.push_back(c); }, data.begin(), data.end());
46  BOOST_CHECK_EQUAL(data.size(), 52);
47  BOOST_CHECK_EQUAL(output.size(), 32);
48  BOOST_CHECK(input == uint256(output));
49  }
50 }
51 
256-bit opaque blob.
Definition: uint256.h:138
BOOST_AUTO_TEST_CASE(convertbits_deterministic)
BOOST_AUTO_TEST_SUITE_END()
#define BOOST_FIXTURE_TEST_SUITE(a, b)
Definition: object.cpp:14
#define BOOST_CHECK_EQUAL(v1, v2)
Definition: object.cpp:18
#define BOOST_CHECK(expr)
Definition: object.cpp:17
uint256 random_uint256()
Basic testing setup.
Definition: test_pivx.h:51