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

Function DoBitmapVisitAndWrite

cpp/src/arrow/util/bitmap_test.cc:1488–1537  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1486namespace {
1487
1488void DoBitmapVisitAndWrite(int64_t part, bool with_offset) {
1489 int64_t bits = part * 4;
1490
1491 random::RandomArrayGenerator rand(/*seed=*/0);
1492 auto arrow_data = rand.ArrayOf(boolean(), bits, 0);
1493
1494 std::shared_ptr<Buffer>& arrow_buffer = arrow_data->data()->buffers[1];
1495
1496 Bitmap bm0(arrow_buffer, 0, part);
1497 Bitmap bm1(arrow_buffer, part * 1, part);
1498 Bitmap bm2(arrow_buffer, part * 2, part);
1499
1500 std::array<Bitmap, 2> out_bms;
1501 std::shared_ptr<Buffer> out, out0, out1;
1502 if (with_offset) {
1503 ASSERT_OK_AND_ASSIGN(out, AllocateBitmap(part * 4));
1504 out_bms[0] = Bitmap(out, part, part);
1505 out_bms[1] = Bitmap(out, part * 2, part);
1506 } else {
1507 ASSERT_OK_AND_ASSIGN(out0, AllocateBitmap(part));
1508 ASSERT_OK_AND_ASSIGN(out1, AllocateBitmap(part));
1509 out_bms[0] = Bitmap(out0, 0, part);
1510 out_bms[1] = Bitmap(out1, 0, part);
1511 }
1512
1513 // out0 = bm0 & bm1, out1= bm0 | bm2
1514 std::array<Bitmap, 3> in_bms{bm0, bm1, bm2};
1515 Bitmap::VisitWordsAndWrite(
1516 in_bms, &out_bms,
1517 [](const std::array<uint64_t, 3>& in, std::array<uint64_t, 2>* out) {
1518 out->at(0) = in[0] & in[1];
1519 out->at(1) = in[0] | in[2];
1520 });
1521
1522 auto pool = MemoryPool::CreateDefault();
1523 ASSERT_OK_AND_ASSIGN(auto exp_0, BitmapAnd(pool.get(), bm0.data(), bm0.offset(),
1524 bm1.data(), bm1.offset(), part, 0));
1525 ASSERT_OK_AND_ASSIGN(auto exp_1, BitmapOr(pool.get(), bm0.data(), bm0.offset(),
1526 bm2.data(), bm2.offset(), part, 0));
1527
1528 ASSERT_TRUE(
1529 BitmapEquals(exp_0->data(), 0, out_bms[0].data(), out_bms[0].offset(), part))
1530 << "exp: " << Bitmap(exp_0->data(), 0, part).ToString() << std::endl
1531 << "got: " << out_bms[0].ToString();
1532
1533 ASSERT_TRUE(
1534 BitmapEquals(exp_1->data(), 0, out_bms[1].data(), out_bms[1].offset(), part))
1535 << "exp: " << Bitmap(exp_1->data(), 0, part).ToString() << std::endl
1536 << "got: " << out_bms[1].ToString();
1537}
1538
1539} // namespace
1540

Callers 1

TEST_PFunction · 0.85

Calls 9

AllocateBitmapFunction · 0.85
VisitWordsAndWriteFunction · 0.85
ASSERT_OK_AND_ASSIGNFunction · 0.70
BitmapFunction · 0.70
BitmapEqualsFunction · 0.70
ArrayOfMethod · 0.45
dataMethod · 0.45
offsetMethod · 0.45
ToStringMethod · 0.45

Tested by

no test coverage detected