| 149 | } |
| 150 | |
| 151 | TEST(TestBooleanAggregation, Sum) { |
| 152 | const ScalarAggregateOptions& options = ScalarAggregateOptions::Defaults(); |
| 153 | ValidateBooleanAgg<Sum>("[]", std::make_shared<UInt64Scalar>(), options); |
| 154 | ValidateBooleanAgg<Sum>("[null]", std::make_shared<UInt64Scalar>(), options); |
| 155 | ValidateBooleanAgg<Sum>("[null, false]", std::make_shared<UInt64Scalar>(0), options); |
| 156 | ValidateBooleanAgg<Sum>("[true]", std::make_shared<UInt64Scalar>(1), options); |
| 157 | ValidateBooleanAgg<Sum>("[true, false, true]", std::make_shared<UInt64Scalar>(2), |
| 158 | options); |
| 159 | ValidateBooleanAgg<Sum>("[true, false, true, true, null]", |
| 160 | std::make_shared<UInt64Scalar>(3), options); |
| 161 | |
| 162 | const ScalarAggregateOptions& options_min_count_zero = |
| 163 | ScalarAggregateOptions(/*skip_nulls=*/true, /*min_count=*/0); |
| 164 | ValidateBooleanAgg<Sum>("[]", std::make_shared<UInt64Scalar>(0), |
| 165 | options_min_count_zero); |
| 166 | ValidateBooleanAgg<Sum>("[null]", std::make_shared<UInt64Scalar>(0), |
| 167 | options_min_count_zero); |
| 168 | |
| 169 | std::string json = "[true, null, false, null]"; |
| 170 | ValidateBooleanAgg<Sum>(json, std::make_shared<UInt64Scalar>(1), |
| 171 | ScalarAggregateOptions(/*skip_nulls=*/true, /*min_count=*/1)); |
| 172 | ValidateBooleanAgg<Sum>(json, std::make_shared<UInt64Scalar>(1), |
| 173 | ScalarAggregateOptions(/*skip_nulls=*/true, /*min_count=*/2)); |
| 174 | ValidateBooleanAgg<Sum>(json, std::make_shared<UInt64Scalar>(), |
| 175 | ScalarAggregateOptions(/*skip_nulls=*/true, /*min_count=*/3)); |
| 176 | ValidateBooleanAgg<Sum>("[]", std::make_shared<UInt64Scalar>(0), |
| 177 | ScalarAggregateOptions(/*skip_nulls=*/false, /*min_count=*/0)); |
| 178 | ValidateBooleanAgg<Sum>(json, std::make_shared<UInt64Scalar>(), |
| 179 | ScalarAggregateOptions(/*skip_nulls=*/false, /*min_count=*/0)); |
| 180 | ValidateBooleanAgg<Sum>("[]", std::make_shared<UInt64Scalar>(), |
| 181 | ScalarAggregateOptions(/*skip_nulls=*/false, /*min_count=*/3)); |
| 182 | ValidateBooleanAgg<Sum>(json, std::make_shared<UInt64Scalar>(), |
| 183 | ScalarAggregateOptions(/*skip_nulls=*/false, /*min_count=*/3)); |
| 184 | |
| 185 | json = "[true, false]"; |
| 186 | ValidateBooleanAgg<Sum>(json, std::make_shared<UInt64Scalar>(1), |
| 187 | ScalarAggregateOptions(/*skip_nulls=*/false, /*min_count=*/1)); |
| 188 | ValidateBooleanAgg<Sum>(json, std::make_shared<UInt64Scalar>(1), |
| 189 | ScalarAggregateOptions(/*skip_nulls=*/false, /*min_count=*/2)); |
| 190 | ValidateBooleanAgg<Sum>(json, std::make_shared<UInt64Scalar>(), |
| 191 | ScalarAggregateOptions(/*skip_nulls=*/false, /*min_count=*/3)); |
| 192 | |
| 193 | EXPECT_THAT(Sum(MakeScalar(true)), |
| 194 | ResultWith(Datum(std::make_shared<UInt64Scalar>(1)))); |
| 195 | EXPECT_THAT(Sum(MakeScalar(false)), |
| 196 | ResultWith(Datum(std::make_shared<UInt64Scalar>(0)))); |
| 197 | EXPECT_THAT(Sum(MakeNullScalar(boolean())), |
| 198 | ResultWith(Datum(MakeNullScalar(uint64())))); |
| 199 | EXPECT_THAT(Sum(MakeNullScalar(boolean()), |
| 200 | ScalarAggregateOptions(/*skip_nulls=*/true, /*min_count=*/0)), |
| 201 | ResultWith(ScalarFromJSON(uint64(), "0"))); |
| 202 | EXPECT_THAT(Sum(MakeNullScalar(boolean()), |
| 203 | ScalarAggregateOptions(/*skip_nulls=*/false, /*min_count=*/0)), |
| 204 | ResultWith(ScalarFromJSON(uint64(), "null"))); |
| 205 | } |
| 206 | |
| 207 | TEST(TestBooleanAggregation, Product) { |
| 208 | const ScalarAggregateOptions& options = ScalarAggregateOptions::Defaults(); |
no test coverage detected