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

Function DoBitmapVisitAndWrite

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

Source from the content-addressed store, hash-verified

1422namespace {
1423
1424void DoBitmapVisitAndWrite(int64_t part, bool with_offset) {
1425 int64_t bits = part * 4;
1426
1427 random::RandomArrayGenerator rand(/*seed=*/0);
1428 auto arrow_data = rand.ArrayOf(boolean(), bits, 0);
1429
1430 std::shared_ptr<Buffer>& arrow_buffer = arrow_data->data()->buffers[1];
1431
1432 Bitmap bm0(arrow_buffer, 0, part);
1433 Bitmap bm1(arrow_buffer, part * 1, part);
1434 Bitmap bm2(arrow_buffer, part * 2, part);
1435
1436 std::array<Bitmap, 2> out_bms;
1437 std::shared_ptr<Buffer> out, out0, out1;
1438 if (with_offset) {
1439 ASSERT_OK_AND_ASSIGN(out, AllocateBitmap(part * 4));
1440 out_bms[0] = Bitmap(out, part, part);
1441 out_bms[1] = Bitmap(out, part * 2, part);
1442 } else {
1443 ASSERT_OK_AND_ASSIGN(out0, AllocateBitmap(part));
1444 ASSERT_OK_AND_ASSIGN(out1, AllocateBitmap(part));
1445 out_bms[0] = Bitmap(out0, 0, part);
1446 out_bms[1] = Bitmap(out1, 0, part);
1447 }
1448
1449 // out0 = bm0 & bm1, out1= bm0 | bm2
1450 std::array<Bitmap, 3> in_bms{bm0, bm1, bm2};
1451 Bitmap::VisitWordsAndWrite(
1452 in_bms, &out_bms,
1453 [](const std::array<uint64_t, 3>& in, std::array<uint64_t, 2>* out) {
1454 out->at(0) = in[0] & in[1];
1455 out->at(1) = in[0] | in[2];
1456 });
1457
1458 auto pool = MemoryPool::CreateDefault();
1459 ASSERT_OK_AND_ASSIGN(auto exp_0, BitmapAnd(pool.get(), bm0.data(), bm0.offset(),
1460 bm1.data(), bm1.offset(), part, 0));
1461 ASSERT_OK_AND_ASSIGN(auto exp_1, BitmapOr(pool.get(), bm0.data(), bm0.offset(),
1462 bm2.data(), bm2.offset(), part, 0));
1463
1464 ASSERT_TRUE(
1465 BitmapEquals(exp_0->data(), 0, out_bms[0].data(), out_bms[0].offset(), part))
1466 << "exp: " << Bitmap(exp_0->data(), 0, part).ToString() << std::endl
1467 << "got: " << out_bms[0].ToString();
1468
1469 ASSERT_TRUE(
1470 BitmapEquals(exp_1->data(), 0, out_bms[1].data(), out_bms[1].offset(), part))
1471 << "exp: " << Bitmap(exp_1->data(), 0, part).ToString() << std::endl
1472 << "got: " << out_bms[1].ToString();
1473}
1474
1475} // namespace
1476

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