mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-23 16:12:01 +00:00
Merge pull request #9143 from ClickHouse/bit-test-many-fuzz
Fixed fuzz test and incorrect behaviour of bitTestAll/Any functions
This commit is contained in:
commit
629db7efa0
@ -142,8 +142,9 @@ private:
|
||||
{
|
||||
if (auto pos_col_const = checkAndGetColumnConst<ColumnVector<ValueType>>(block.getByPosition(arguments[i]).column.get()))
|
||||
{
|
||||
const auto pos = pos_col_const->template getValue<ValueType>();
|
||||
mask = mask | (1 << pos);
|
||||
const auto pos = pos_col_const->getUInt(0);
|
||||
if (pos < 8 * sizeof(ValueType))
|
||||
mask = mask | (ValueType(1) << pos);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -175,21 +176,22 @@ private:
|
||||
}
|
||||
|
||||
template <typename PosType, typename ValueType>
|
||||
bool addToMaskImpl(PaddedPODArray<ValueType> & mask, const IColumn * const pos_col_untyped)
|
||||
bool NO_SANITIZE_UNDEFINED addToMaskImpl(PaddedPODArray<ValueType> & mask, const IColumn * const pos_col_untyped)
|
||||
{
|
||||
if (const auto pos_col = checkAndGetColumn<ColumnVector<PosType>>(pos_col_untyped))
|
||||
{
|
||||
const auto & pos = pos_col->getData();
|
||||
|
||||
for (const auto i : ext::range(0, mask.size()))
|
||||
mask[i] = mask[i] | (1 << pos[i]);
|
||||
if (pos[i] < 8 * sizeof(ValueType))
|
||||
mask[i] = mask[i] | (ValueType(1) << pos[i]);
|
||||
|
||||
return true;
|
||||
}
|
||||
else if (const auto pos_col_const = checkAndGetColumnConst<ColumnVector<PosType>>(pos_col_untyped))
|
||||
{
|
||||
const auto & pos = pos_col_const->template getValue<PosType>();
|
||||
const auto new_mask = 1 << pos;
|
||||
const auto new_mask = pos < 8 * sizeof(ValueType) ? ValueType(1) << pos : 0;
|
||||
|
||||
for (const auto i : ext::range(0, mask.size()))
|
||||
mask[i] = mask[i] | new_mask;
|
||||
|
@ -0,0 +1,200 @@
|
||||
0 1
|
||||
1 0
|
||||
2 1
|
||||
3 0
|
||||
4 1
|
||||
5 0
|
||||
6 1
|
||||
7 0
|
||||
8 0
|
||||
9 0
|
||||
10 0
|
||||
11 0
|
||||
12 0
|
||||
13 0
|
||||
14 0
|
||||
15 0
|
||||
16 0
|
||||
17 0
|
||||
18 0
|
||||
19 0
|
||||
20 0
|
||||
21 0
|
||||
22 0
|
||||
23 0
|
||||
24 0
|
||||
25 0
|
||||
26 0
|
||||
27 0
|
||||
28 0
|
||||
29 0
|
||||
30 0
|
||||
31 0
|
||||
32 0
|
||||
33 0
|
||||
34 0
|
||||
35 0
|
||||
36 0
|
||||
37 0
|
||||
38 0
|
||||
39 0
|
||||
40 0
|
||||
41 0
|
||||
42 0
|
||||
43 0
|
||||
44 0
|
||||
45 0
|
||||
46 0
|
||||
47 0
|
||||
48 0
|
||||
49 0
|
||||
50 0
|
||||
51 0
|
||||
52 0
|
||||
53 0
|
||||
54 0
|
||||
55 0
|
||||
56 0
|
||||
57 0
|
||||
58 0
|
||||
59 0
|
||||
60 0
|
||||
61 0
|
||||
62 0
|
||||
63 0
|
||||
64 0
|
||||
65 0
|
||||
66 0
|
||||
67 0
|
||||
68 0
|
||||
69 0
|
||||
70 0
|
||||
71 0
|
||||
72 0
|
||||
73 0
|
||||
74 0
|
||||
75 0
|
||||
76 0
|
||||
77 0
|
||||
78 0
|
||||
79 0
|
||||
80 0
|
||||
81 0
|
||||
82 0
|
||||
83 0
|
||||
84 0
|
||||
85 0
|
||||
86 0
|
||||
87 0
|
||||
88 0
|
||||
89 0
|
||||
90 0
|
||||
91 0
|
||||
92 0
|
||||
93 0
|
||||
94 0
|
||||
95 0
|
||||
96 0
|
||||
97 0
|
||||
98 0
|
||||
99 0
|
||||
0 1
|
||||
1 0
|
||||
2 1
|
||||
3 0
|
||||
4 1
|
||||
5 0
|
||||
6 1
|
||||
7 0
|
||||
8 1
|
||||
9 1
|
||||
10 1
|
||||
11 1
|
||||
12 1
|
||||
13 1
|
||||
14 1
|
||||
15 1
|
||||
16 1
|
||||
17 1
|
||||
18 1
|
||||
19 1
|
||||
20 1
|
||||
21 1
|
||||
22 1
|
||||
23 1
|
||||
24 1
|
||||
25 1
|
||||
26 1
|
||||
27 1
|
||||
28 1
|
||||
29 1
|
||||
30 1
|
||||
31 1
|
||||
32 1
|
||||
33 1
|
||||
34 1
|
||||
35 1
|
||||
36 1
|
||||
37 1
|
||||
38 1
|
||||
39 1
|
||||
40 1
|
||||
41 1
|
||||
42 1
|
||||
43 1
|
||||
44 1
|
||||
45 1
|
||||
46 1
|
||||
47 1
|
||||
48 1
|
||||
49 1
|
||||
50 1
|
||||
51 1
|
||||
52 1
|
||||
53 1
|
||||
54 1
|
||||
55 1
|
||||
56 1
|
||||
57 1
|
||||
58 1
|
||||
59 1
|
||||
60 1
|
||||
61 1
|
||||
62 1
|
||||
63 1
|
||||
64 1
|
||||
65 1
|
||||
66 1
|
||||
67 1
|
||||
68 1
|
||||
69 1
|
||||
70 1
|
||||
71 1
|
||||
72 1
|
||||
73 1
|
||||
74 1
|
||||
75 1
|
||||
76 1
|
||||
77 1
|
||||
78 1
|
||||
79 1
|
||||
80 1
|
||||
81 1
|
||||
82 1
|
||||
83 1
|
||||
84 1
|
||||
85 1
|
||||
86 1
|
||||
87 1
|
||||
88 1
|
||||
89 1
|
||||
90 1
|
||||
91 1
|
||||
92 1
|
||||
93 1
|
||||
94 1
|
||||
95 1
|
||||
96 1
|
||||
97 1
|
||||
98 1
|
||||
99 1
|
@ -0,0 +1,2 @@
|
||||
SELECT number, bitTestAny(toUInt8(1 + 4 + 16 + 64), number) FROM numbers(100);
|
||||
SELECT number, bitTestAll(toUInt8(1 + 4 + 16 + 64), number) FROM numbers(100);
|
Loading…
Reference in New Issue
Block a user