| 1422 | namespace { |
| 1423 | |
| 1424 | void 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 |
no test coverage detected