MCPcopy Create free account
hub / github.com/apache/arrow / TestCaseWhenRandom

Function TestCaseWhenRandom

cpp/src/arrow/compute/kernels/scalar_if_else_test.cc:1461–1511  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1459}
1460
1461void TestCaseWhenRandom(const std::shared_ptr<DataType>& type, int64_t len = 300) {
1462 random::RandomArrayGenerator rand(/*seed=*/0);
1463
1464 // Adding 64 consecutive 1's and 0's in the cond array to test all-true/ all-false
1465 // word code paths
1466 ASSERT_OK_AND_ASSIGN(auto always_true, MakeArrayFromScalar(BooleanScalar(true), 64));
1467 ASSERT_OK_AND_ASSIGN(auto always_false, MakeArrayFromScalar(BooleanScalar(false), 64));
1468 auto maybe_true_with_nulls =
1469 rand.ArrayOf(boolean(), len - 64 * 2, /*null_probability=*/0.04);
1470 auto maybe_true_all_valid =
1471 rand.ArrayOf(boolean(), len - 64 * 2, /*null_probability=*/0.0);
1472 ASSERT_OK_AND_ASSIGN(auto concat1,
1473 Concatenate({always_true, always_false, maybe_true_with_nulls}));
1474 auto cond1 = checked_pointer_cast<BooleanArray>(concat1);
1475 ASSERT_OK_AND_ASSIGN(auto concat2,
1476 Concatenate({always_true, maybe_true_all_valid, always_false}));
1477 auto cond2 = checked_pointer_cast<BooleanArray>(concat2);
1478
1479 auto value1 = rand.ArrayOf(type, len, /*null_probability=*/0.04);
1480 auto value2 = rand.ArrayOf(type, len, /*null_probability=*/0.04);
1481 auto value_else = rand.ArrayOf(type, len, /*null_probability=*/0.04);
1482
1483 auto value1_span = ArraySpan(*value1->data());
1484 auto value2_span = ArraySpan(*value2->data());
1485 auto value_else_span = ArraySpan(*value_else->data());
1486
1487 for (const bool has_else : {true, false}) {
1488 ASSERT_OK_AND_ASSIGN(auto builder, MakeBuilder(type));
1489 ASSERT_OK(builder->Reserve(len));
1490 for (int64_t i = 0; i < len; ++i) {
1491 if (cond1->IsValid(i) && cond1->Value(i)) {
1492 ASSERT_OK(builder->AppendArraySlice(value1_span, i, /*length=*/1));
1493 } else if (cond2->IsValid(i) && cond2->Value(i)) {
1494 ASSERT_OK(builder->AppendArraySlice(value2_span, i, /*length=*/1));
1495 } else if (has_else) {
1496 ASSERT_OK(builder->AppendArraySlice(value_else_span, i, /*length=*/1));
1497 } else {
1498 ASSERT_OK(builder->AppendNull());
1499 }
1500 }
1501 ASSERT_OK_AND_ASSIGN(auto expected_data, builder->Finish());
1502
1503 if (has_else) {
1504 CheckScalar("case_when", {MakeStruct({cond1, cond2}), value1, value2, value_else},
1505 expected_data);
1506 } else {
1507 CheckScalar("case_when", {MakeStruct({cond1, cond2}), value1, value2},
1508 expected_data);
1509 }
1510 }
1511}
1512
1513template <typename Type>
1514class TestCaseWhenNumeric : public ::testing::Test {};

Callers 2

TYPED_TESTFunction · 0.85
TESTFunction · 0.85

Calls 10

CheckScalarFunction · 0.85
MakeStructFunction · 0.70
ArraySpanFunction · 0.50
ArrayOfMethod · 0.45
dataMethod · 0.45
ReserveMethod · 0.45
IsValidMethod · 0.45
ValueMethod · 0.45
AppendArraySliceMethod · 0.45
AppendNullMethod · 0.45

Tested by

no test coverage detected