Line data Source code
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 : 11 : BOOST_FIXTURE_TEST_SUITE(convertbits_tests, BasicTestingSetup) 12 : 13 2 : BOOST_AUTO_TEST_CASE(convertbits_deterministic) 14 : { 15 257 : for (size_t i = 0; i < 256; i++) { 16 512 : std::vector<unsigned char> input(32, i); 17 512 : std::vector<unsigned char> data; 18 256 : std::vector<unsigned char> output; 19 13568 : ConvertBits<8, 5, true>([&](unsigned char c) { data.push_back(c); }, input.begin(), input.end()); 20 8448 : ConvertBits<5, 8, false>([&](unsigned char c) { output.push_back(c); }, data.begin(), data.end()); 21 256 : BOOST_CHECK_EQUAL(data.size(), 52); 22 256 : BOOST_CHECK_EQUAL(output.size(), 32); 23 512 : BOOST_CHECK(input == output); 24 : } 25 : 26 257 : for (size_t i = 0; i < 256; i++) { 27 512 : std::vector<unsigned char> input(43, i); 28 512 : std::vector<unsigned char> data; 29 256 : std::vector<unsigned char> output; 30 17920 : ConvertBits<8, 5, true>([&](unsigned char c) { data.push_back(c); }, input.begin(), input.end()); 31 11264 : ConvertBits<5, 8, false>([&](unsigned char c) { output.push_back(c); }, data.begin(), data.end()); 32 256 : BOOST_CHECK_EQUAL(data.size(), 69); 33 256 : BOOST_CHECK_EQUAL(output.size(), 43); 34 512 : BOOST_CHECK(input == output); 35 : } 36 1 : } 37 : 38 2 : BOOST_AUTO_TEST_CASE(convertbits_random) 39 : { 40 1001 : for (size_t i = 0; i < 1000; i++) { 41 1000 : auto input = random_uint256(); 42 2000 : std::vector<unsigned char> data; 43 1000 : std::vector<unsigned char> output; 44 53000 : ConvertBits<8, 5, true>([&](unsigned char c) { data.push_back(c); }, input.begin(), input.end()); 45 33000 : ConvertBits<5, 8, false>([&](unsigned char c) { output.push_back(c); }, data.begin(), data.end()); 46 1000 : BOOST_CHECK_EQUAL(data.size(), 52); 47 1000 : BOOST_CHECK_EQUAL(output.size(), 32); 48 2000 : BOOST_CHECK(input == uint256(output)); 49 : } 50 1 : } 51 : 52 : BOOST_AUTO_TEST_SUITE_END()