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 : 43370 : explicit DumbCheck(const bool _result) : result(_result)
19 : : {
20 : 43370 : }
21 : :
22 : 2850 : bool operator()() const
23 : : {
24 : 2850 : return result;
25 : : }
26 : : };
27 : : } // namespace
28 : :
29 [ + - ]: 132 : FUZZ_TARGET(checkqueue)
30 : : {
31 : 130 : FuzzedDataProvider fuzzed_data_provider(buffer.data(), buffer.size());
32 : :
33 : 130 : const unsigned int batch_size = fuzzed_data_provider.ConsumeIntegralInRange<unsigned int>(0, 1024);
34 : 130 : CCheckQueue<DumbCheck> check_queue_1{batch_size, /*worker_threads_num=*/0};
35 [ + - ]: 130 : CCheckQueue<DumbCheck> check_queue_2{batch_size, /*worker_threads_num=*/0};
36 : 130 : std::vector<DumbCheck> checks_1;
37 : 130 : std::vector<DumbCheck> checks_2;
38 [ + - ]: 130 : const int size = fuzzed_data_provider.ConsumeIntegralInRange<int>(0, 1024);
39 [ + + ]: 21815 : for (int i = 0; i < size; ++i) {
40 [ + - ]: 21685 : const bool result = fuzzed_data_provider.ConsumeBool();
41 [ + - ]: 21685 : checks_1.emplace_back(result);
42 [ + - ]: 21685 : checks_2.emplace_back(result);
43 : 21685 : }
44 [ + - + + ]: 130 : if (fuzzed_data_provider.ConsumeBool()) {
45 [ + - ]: 102 : check_queue_1.Add(std::move(checks_1));
46 : 102 : }
47 [ + - + + ]: 130 : if (fuzzed_data_provider.ConsumeBool()) {
48 [ + - ]: 94 : (void)check_queue_1.Wait();
49 : 94 : }
50 : :
51 [ + - ]: 130 : CCheckQueueControl<DumbCheck> check_queue_control{&check_queue_2};
52 [ + - + + ]: 130 : if (fuzzed_data_provider.ConsumeBool()) {
53 [ + - ]: 65 : check_queue_control.Add(std::move(checks_2));
54 : 65 : }
55 [ + - + + ]: 130 : if (fuzzed_data_provider.ConsumeBool()) {
56 [ + - ]: 13 : (void)check_queue_control.Wait();
57 : 13 : }
58 : 130 : }
|