]> git.proxmox.com Git - ceph.git/blame - ceph/src/arrow/cpp/src/arrow/compute/kernels/scalar_boolean_test.cc
import quincy 17.2.0
[ceph.git] / ceph / src / arrow / cpp / src / arrow / compute / kernels / scalar_boolean_test.cc
CommitLineData
1d09f67e
TL
1// Licensed to the Apache Software Foundation (ASF) under one
2// or more contributor license agreements. See the NOTICE file
3// distributed with this work for additional information
4// regarding copyright ownership. The ASF licenses this file
5// to you under the Apache License, Version 2.0 (the
6// "License"); you may not use this file except in compliance
7// with the License. You may obtain a copy of the License at
8//
9// http://www.apache.org/licenses/LICENSE-2.0
10//
11// Unless required by applicable law or agreed to in writing,
12// software distributed under the License is distributed on an
13// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14// KIND, either express or implied. See the License for the
15// specific language governing permissions and limitations
16// under the License.
17
18#include <functional>
19#include <memory>
20#include <utility>
21#include <vector>
22
23#include <gtest/gtest.h>
24
25#include "arrow/chunked_array.h"
26#include "arrow/compute/api_scalar.h"
27#include "arrow/compute/kernels/test_util.h"
28#include "arrow/testing/gtest_common.h"
29#include "arrow/testing/gtest_util.h"
30#include "arrow/util/checked_cast.h"
31
32namespace arrow {
33
34using internal::checked_pointer_cast;
35
36namespace compute {
37
38void CheckBooleanScalarArrayBinary(std::string func_name, Datum array) {
39 for (std::shared_ptr<Scalar> scalar :
40 {std::make_shared<BooleanScalar>(), std::make_shared<BooleanScalar>(true),
41 std::make_shared<BooleanScalar>(false)}) {
42 ASSERT_OK_AND_ASSIGN(Datum actual, CallFunction(func_name, {Datum(scalar), array}));
43
44 ASSERT_OK_AND_ASSIGN(auto constant_array,
45 MakeArrayFromScalar(*scalar, array.length()));
46
47 ASSERT_OK_AND_ASSIGN(Datum expected,
48 CallFunction(func_name, {Datum(constant_array), array}));
49 AssertDatumsEqual(expected, actual);
50
51 ASSERT_OK_AND_ASSIGN(actual, CallFunction(func_name, {array, Datum(scalar)}));
52 ASSERT_OK_AND_ASSIGN(expected,
53 CallFunction(func_name, {array, Datum(constant_array)}));
54 AssertDatumsEqual(expected, actual);
55 }
56}
57
58TEST(TestBooleanKernel, Invert) {
59 auto arr =
60 ArrayFromJSON(boolean(), "[true, false, true, null, false, true, false, null]");
61 auto expected =
62 ArrayFromJSON(boolean(), "[false, true, false, null, true, false, true, null]");
63 CheckScalarUnary("invert", arr, expected);
64}
65
66TEST(TestBooleanKernel, And) {
67 auto left = ArrayFromJSON(boolean(), " [true, true, true, false, false, null]");
68 auto right = ArrayFromJSON(boolean(), " [true, false, null, false, null, null]");
69 auto expected = ArrayFromJSON(boolean(), "[true, false, null, false, null, null]");
70 CheckScalarBinary("and", left, right, expected);
71 CheckBooleanScalarArrayBinary("and", left);
72}
73
74TEST(TestBooleanKernel, Or) {
75 auto left = ArrayFromJSON(boolean(), " [true, true, true, false, false, null]");
76 auto right = ArrayFromJSON(boolean(), " [true, false, null, false, null, null]");
77 auto expected = ArrayFromJSON(boolean(), "[true, true, null, false, null, null]");
78 CheckScalarBinary("or", left, right, expected);
79 CheckBooleanScalarArrayBinary("or", left);
80}
81
82TEST(TestBooleanKernel, Xor) {
83 auto left = ArrayFromJSON(boolean(), " [true, true, true, false, false, null]");
84 auto right = ArrayFromJSON(boolean(), " [true, false, null, false, null, null]");
85 auto expected = ArrayFromJSON(boolean(), "[false, true, null, false, null, null]");
86 CheckScalarBinary("xor", left, right, expected);
87 CheckBooleanScalarArrayBinary("xor", left);
88}
89
90TEST(TestBooleanKernel, AndNot) {
91 auto left = ArrayFromJSON(
92 boolean(), "[true, true, true, false, false, false, null, null, null]");
93 auto right = ArrayFromJSON(
94 boolean(), "[true, false, null, true, false, null, true, false, null]");
95 auto expected = ArrayFromJSON(
96 boolean(), "[false, true, null, false, false, null, null, null, null]");
97 CheckScalarBinary("and_not", left, right, expected);
98 CheckBooleanScalarArrayBinary("and_not", left);
99}
100
101TEST(TestBooleanKernel, KleeneAnd) {
102 auto left = ArrayFromJSON(boolean(), " [true, true, true, false, false, null]");
103 auto right = ArrayFromJSON(boolean(), " [true, false, null, false, null, null]");
104 auto expected = ArrayFromJSON(boolean(), "[true, false, null, false, false, null]");
105 CheckScalarBinary("and_kleene", left, right, expected);
106 CheckBooleanScalarArrayBinary("and_kleene", left);
107
108 left = ArrayFromJSON(boolean(), " [true, true, false, null, null]");
109 right = ArrayFromJSON(boolean(), " [true, false, false, true, false]");
110 expected = ArrayFromJSON(boolean(), "[true, false, false, null, false]");
111 CheckScalarBinary("and_kleene", left, right, expected);
112 CheckBooleanScalarArrayBinary("and_kleene", left);
113
114 left = ArrayFromJSON(boolean(), " [true, true, false, true]");
115 right = ArrayFromJSON(boolean(), " [true, false, false, false]");
116 expected = ArrayFromJSON(boolean(), "[true, false, false, false]");
117 CheckScalarBinary("and_kleene", left, right, expected);
118 CheckBooleanScalarArrayBinary("and_kleene", left);
119}
120
121TEST(TestBooleanKernel, KleeneAndNot) {
122 auto left = ArrayFromJSON(
123 boolean(), "[true, true, true, false, false, false, null, null, null]");
124 auto right = ArrayFromJSON(
125 boolean(), "[true, false, null, true, false, null, true, false, null]");
126 auto expected = ArrayFromJSON(
127 boolean(), "[false, true, null, false, false, false, false, null, null]");
128 CheckScalarBinary("and_not_kleene", left, right, expected);
129 CheckBooleanScalarArrayBinary("and_not_kleene", left);
130
131 left = ArrayFromJSON(boolean(), " [true, true, false, false]");
132 right = ArrayFromJSON(boolean(), " [true, false, true, false]");
133 expected = ArrayFromJSON(boolean(), "[false, true, false, false]");
134 CheckScalarBinary("and_not_kleene", left, right, expected);
135 CheckBooleanScalarArrayBinary("and_not_kleene", left);
136}
137
138TEST(TestBooleanKernel, KleeneOr) {
139 auto left = ArrayFromJSON(boolean(), " [true, true, true, false, false, null]");
140 auto right = ArrayFromJSON(boolean(), " [true, false, null, false, null, null]");
141 auto expected = ArrayFromJSON(boolean(), "[true, true, true, false, null, null]");
142 CheckScalarBinary("or_kleene", left, right, expected);
143 CheckBooleanScalarArrayBinary("or_kleene", left);
144
145 left = ArrayFromJSON(boolean(), " [true, true, false, null, null]");
146 right = ArrayFromJSON(boolean(), " [true, false, false, true, false]");
147 expected = ArrayFromJSON(boolean(), "[true, true, false, true, null]");
148 CheckScalarBinary("or_kleene", left, right, expected);
149 CheckBooleanScalarArrayBinary("or_kleene", left);
150
151 left = ArrayFromJSON(boolean(), " [true, true, false, false]");
152 right = ArrayFromJSON(boolean(), " [true, false, false, true]");
153 expected = ArrayFromJSON(boolean(), "[true, true, false, true]");
154 CheckScalarBinary("or_kleene", left, right, expected);
155 CheckBooleanScalarArrayBinary("or_kleene", left);
156}
157
158} // namespace compute
159} // namespace arrow