Line data Source code
1 : // Copyright (c) 2014-2025 The Dash Core 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 <governance/governance.h> 6 : 7 : 8 : #include <boost/test/unit_test.hpp> 9 : 10 : #include <cmath> 11 : 12 146 : BOOST_AUTO_TEST_SUITE(ratecheck_tests) 13 : 14 148 : BOOST_AUTO_TEST_CASE(ratecheck_test) 15 : { 16 1 : CRateCheckBuffer buffer; 17 : 18 1 : BOOST_CHECK(buffer.GetCount() == 0); 19 1 : BOOST_CHECK(buffer.GetMinTimestamp() == std::numeric_limits<int64_t>::max()); 20 1 : BOOST_CHECK(buffer.GetMaxTimestamp() == 0); 21 1 : BOOST_CHECK(buffer.GetRate() == 0.0); 22 : 23 1 : buffer.AddTimestamp(1); 24 : 25 1 : BOOST_TEST_MESSAGE("buffer.GetMinTimestamp() = " << buffer.GetMinTimestamp()); 26 : 27 1 : BOOST_CHECK(buffer.GetCount() == 1); 28 1 : BOOST_CHECK(buffer.GetMinTimestamp() == 1); 29 1 : BOOST_CHECK(buffer.GetMaxTimestamp() == 1); 30 1 : BOOST_CHECK(buffer.GetRate() == 0.0); 31 : 32 1 : buffer.AddTimestamp(2); 33 1 : BOOST_CHECK(buffer.GetCount() == 2); 34 1 : BOOST_CHECK(buffer.GetMinTimestamp() == 1); 35 1 : BOOST_CHECK(buffer.GetMaxTimestamp() == 2); 36 : //BOOST_CHECK(fabs(buffer.GetRate() - 2.0) < 1.0e-9); 37 1 : BOOST_CHECK(buffer.GetRate() == 0.0); 38 : 39 1 : buffer.AddTimestamp(3); 40 1 : BOOST_CHECK(buffer.GetCount() == 3); 41 1 : BOOST_CHECK(buffer.GetMinTimestamp() == 1); 42 1 : BOOST_CHECK(buffer.GetMaxTimestamp() == 3); 43 : 44 1 : int64_t nMin = buffer.GetMinTimestamp(); 45 1 : int64_t nMax = buffer.GetMaxTimestamp(); 46 1 : double dRate = buffer.GetRate(); 47 : 48 1 : BOOST_TEST_MESSAGE("buffer.GetCount() = " << buffer.GetCount()); 49 1 : BOOST_TEST_MESSAGE("nMin = " << nMin); 50 1 : BOOST_TEST_MESSAGE("nMax = " << nMax); 51 1 : BOOST_TEST_MESSAGE("buffer.GetRate() = " << dRate); 52 : 53 : //BOOST_CHECK(fabs(buffer.GetRate() - (3.0/2.0)) < 1.0e-9); 54 1 : BOOST_CHECK(buffer.GetRate() == 0.0); 55 : 56 1 : buffer.AddTimestamp(4); 57 1 : BOOST_CHECK(buffer.GetCount() == 4); 58 1 : BOOST_CHECK(buffer.GetMinTimestamp() == 1); 59 1 : BOOST_CHECK(buffer.GetMaxTimestamp() == 4); 60 : //BOOST_CHECK(fabs(buffer.GetRate() - (4.0/3.0)) < 1.0e-9); 61 1 : BOOST_CHECK(buffer.GetRate() == 0.0); 62 : 63 1 : buffer.AddTimestamp(5); 64 1 : BOOST_CHECK(buffer.GetCount() == 5); 65 1 : BOOST_CHECK(buffer.GetMinTimestamp() == 1); 66 1 : BOOST_CHECK(buffer.GetMaxTimestamp() == 5); 67 1 : BOOST_CHECK(fabs(buffer.GetRate() - (5.0/4.0)) < 1.0e-9); 68 : 69 1 : buffer.AddTimestamp(6); 70 1 : BOOST_CHECK(buffer.GetCount() == 5); 71 1 : BOOST_CHECK(buffer.GetMinTimestamp() == 2); 72 1 : BOOST_CHECK(buffer.GetMaxTimestamp() == 6); 73 1 : BOOST_CHECK(fabs(buffer.GetRate() - (5.0/4.0)) < 1.0e-9); 74 : 75 1 : CRateCheckBuffer buffer2; 76 : 77 1 : BOOST_TEST_MESSAGE("Before loop tests"); 78 11 : for(int64_t i = 1; i < 11; ++i) { 79 10 : BOOST_TEST_MESSAGE("In loop: i = " << i); 80 10 : buffer2.AddTimestamp(i); 81 10 : BOOST_CHECK(buffer2.GetCount() == (i <= 5 ? i : 5)); 82 10 : BOOST_CHECK(buffer2.GetMinTimestamp() == std::max(int64_t(1), i - 4)); 83 10 : BOOST_CHECK(buffer2.GetMaxTimestamp() == i); 84 10 : } 85 1 : } 86 : 87 146 : BOOST_AUTO_TEST_SUITE_END()