Branch data Line data Source code
1 : : // Copyright (c) 2020-2022 The Bitcoin 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 <checkqueue.h> 6 : : #include <test/fuzz/FuzzedDataProvider.h> 7 : : #include <test/fuzz/fuzz.h> 8 : : #include <test/fuzz/util.h> 9 : : 10 : : #include <cstdint> 11 : : #include <string> 12 : : #include <vector> 13 : : 14 : : namespace { 15 : : struct DumbCheck { 16 : : bool result = false; 17 : : 18 : 22616 : explicit DumbCheck(const bool _result) : result(_result) 19 : : { 20 : 22616 : } 21 : : 22 : 1114 : bool operator()() const 23 : : { 24 : 1114 : return result; 25 [ + - ]: 173 : } 26 : : }; 27 : : } // namespace 28 : : 29 [ - + ]: 408 : FUZZ_TARGET(checkqueue) 30 : : { 31 : 62 : FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size()); 32 : : 33 : 62 : const unsigned int batch_size = fuzzed_data_provider.ConsumeIntegralInRange<unsigned int>(0, 1024); 34 : 62 : CCheckQueue<DumbCheck> check_queue_1{batch_size}; 35 [ + - ]: 62 : CCheckQueue<DumbCheck> check_queue_2{batch_size}; 36 : 62 : std::vector<DumbCheck> checks_1; 37 : 62 : std::vector<DumbCheck> checks_2; 38 [ + - ]: 62 : const int size = fuzzed_data_provider.ConsumeIntegralInRange<int>(0, 1024); 39 [ + + ]: 11370 : for (int i = 0; i < size; ++i) { 40 [ + - ]: 11308 : const bool result = fuzzed_data_provider.ConsumeBool(); 41 [ + - ]: 11308 : checks_1.emplace_back(result); 42 [ + - ]: 11308 : checks_2.emplace_back(result); 43 : 11308 : } 44 [ + - + + ]: 62 : if (fuzzed_data_provider.ConsumeBool()) { 45 [ + - ]: 52 : check_queue_1.Add(std::move(checks_1)); 46 : 52 : } 47 [ + - + + ]: 62 : if (fuzzed_data_provider.ConsumeBool()) { 48 [ + - ]: 49 : (void)check_queue_1.Wait(); 49 : 49 : } 50 : : 51 [ + - ]: 62 : CCheckQueueControl<DumbCheck> check_queue_control{&check_queue_2}; 52 [ + - + + ]: 62 : if (fuzzed_data_provider.ConsumeBool()) { 53 [ + - ]: 31 : check_queue_control.Add(std::move(checks_2)); 54 : 31 : } 55 [ + - + + ]: 62 : if (fuzzed_data_provider.ConsumeBool()) { 56 [ + - ]: 2 : (void)check_queue_control.Wait(); 57 : 2 : } 58 : 62 : }