Line data Source code
1 : // Copyright (c) 2012-2013 The Bitcoin Core developers 2 : // Distributed under the MIT/X11 software license, see the accompanying 3 : // file COPYING or http://www.opensource.org/licenses/mit-license.php. 4 : 5 : #include "compressor.h" 6 : #include "util/system.h" 7 : #include "test/test_pivx.h" 8 : 9 : #include <stdint.h> 10 : 11 : #include <boost/test/unit_test.hpp> 12 : 13 : // amounts 0.00000001 .. 0.00100000 14 : #define NUM_MULTIPLES_UNIT 100000 15 : 16 : // amounts 0.01 .. 100.00 17 : #define NUM_MULTIPLES_CENT 10000 18 : 19 : // amounts 1 .. 10000 20 : #define NUM_MULTIPLES_1BTC 10000 21 : 22 : // amounts 50 .. 21000000 23 : #define NUM_MULTIPLES_50BTC 420000 24 : 25 : BOOST_FIXTURE_TEST_SUITE(compress_tests, BasicTestingSetup) 26 : 27 540000 : bool static TestEncode(uint64_t in) { 28 540000 : return in == DecompressAmount(CompressAmount(in)); 29 : } 30 : 31 100000 : bool static TestDecode(uint64_t in) { 32 100000 : return in == CompressAmount(DecompressAmount(in)); 33 : } 34 : 35 6 : bool static TestPair(uint64_t dec, uint64_t enc) { 36 12 : return CompressAmount(dec) == enc && 37 6 : DecompressAmount(enc) == dec; 38 : } 39 : 40 3 : BOOST_AUTO_TEST_CASE(compress_amounts) 41 : { 42 2 : BOOST_CHECK(TestPair( 0, 0x0)); 43 2 : BOOST_CHECK(TestPair( 1, 0x1)); 44 2 : BOOST_CHECK(TestPair( CENT, 0x7)); 45 2 : BOOST_CHECK(TestPair( COIN, 0x9)); 46 2 : BOOST_CHECK(TestPair( 50*COIN, 0x32)); 47 2 : BOOST_CHECK(TestPair(21000000*COIN, 0x1406f40)); 48 : 49 100001 : for (uint64_t i = 1; i <= NUM_MULTIPLES_UNIT; i++) 50 200000 : BOOST_CHECK(TestEncode(i)); 51 : 52 10001 : for (uint64_t i = 1; i <= NUM_MULTIPLES_CENT; i++) 53 20000 : BOOST_CHECK(TestEncode(i * CENT)); 54 : 55 10001 : for (uint64_t i = 1; i <= NUM_MULTIPLES_1BTC; i++) 56 20000 : BOOST_CHECK(TestEncode(i * COIN)); 57 : 58 420001 : for (uint64_t i = 1; i <= NUM_MULTIPLES_50BTC; i++) 59 840000 : BOOST_CHECK(TestEncode(i * 50 * COIN)); 60 : 61 100001 : for (uint64_t i = 0; i < 100000; i++) 62 200000 : BOOST_CHECK(TestDecode(i)); 63 1 : } 64 : 65 : BOOST_AUTO_TEST_SUITE_END()