| 57 | { |
| 58 | |
| 59 | TEST(CombineBitFields, round_trip) |
| 60 | { |
| 61 | // Create buffers with the data. |
| 62 | std::vector<double> xData{0.0, 1.0, 2.0, 3.0}; |
| 63 | std::vector<double> yData{0.0, 1.0, 2.0, 3.0}; |
| 64 | std::vector<double> zData{0.0, 1.0, 2.0, 3.0}; |
| 65 | std::vector<uint8_t> returnNum{0, 15, 12, 7}; // 4 bits |
| 66 | std::vector<uint8_t> numReturns{15, 13, 1, 0}; // 4 bits |
| 67 | std::vector<uint8_t> classFlags{2, 6, 0, 15}; // 4 bits |
| 68 | std::vector<uint8_t> scanChannel{0, 1, 2, 3}; // 2 bits |
| 69 | std::vector<uint8_t> scanDirFlag{0, 0, 1, 1}; // 1 bit |
| 70 | std::vector<uint8_t> flightEdge{1, 0, 1, 0}; // 1 bit |
| 71 | |
| 72 | // Clean-up previous tests. |
| 73 | std::string uri = Support::temppath("tiledb_test_bit_fields"); |
| 74 | if (FileUtils::directoryExists(uri)) |
| 75 | FileUtils::deleteDirectory(uri); |
| 76 | |
| 77 | // Write to TileDB. |
| 78 | { |
| 79 | // Create point table with dimension registry. |
| 80 | PointTable table; |
| 81 | table.layout()->registerDims( |
| 82 | {Dimension::Id::X, Dimension::Id::Y, Dimension::Id::Z, |
| 83 | Dimension::Id::ReturnNumber, Dimension::Id::NumberOfReturns, |
| 84 | Dimension::Id::ClassFlags, Dimension::Id::ScanChannel, |
| 85 | Dimension::Id::ScanDirectionFlag, |
| 86 | Dimension::Id::EdgeOfFlightLine}); |
| 87 | |
| 88 | // Create buffer reader with data. |
| 89 | BufferReader bufferReader; |
| 90 | PointViewPtr view(new PointView(table)); |
| 91 | for (uint32_t index = 0; index < 4; ++index) |
| 92 | { |
| 93 | view->setField(Dimension::Id::X, index, xData[index]); |
| 94 | view->setField(Dimension::Id::Y, index, yData[index]); |
| 95 | view->setField(Dimension::Id::Z, index, zData[index]); |
| 96 | view->setField(Dimension::Id::ReturnNumber, index, |
| 97 | returnNum[index]); |
| 98 | view->setField(Dimension::Id::NumberOfReturns, index, |
| 99 | numReturns[index]); |
| 100 | view->setField(Dimension::Id::ClassFlags, index, classFlags[index]); |
| 101 | view->setField(Dimension::Id::ScanChannel, index, |
| 102 | scanChannel[index]); |
| 103 | view->setField(Dimension::Id::ScanDirectionFlag, index, |
| 104 | scanDirFlag[index]); |
| 105 | view->setField(Dimension::Id::EdgeOfFlightLine, index, |
| 106 | flightEdge[index]); |
| 107 | } |
| 108 | bufferReader.addView(view); |
| 109 | |
| 110 | // Set TileDB writer options. |
| 111 | Options writerOptions; |
| 112 | writerOptions.add("filename", uri); |
| 113 | writerOptions.add("x_tile_size", 4); |
| 114 | writerOptions.add("y_tile_size", 4); |
| 115 | writerOptions.add("z_tile_size", 4); |
| 116 | writerOptions.add("combine_bit_fields", true); |
nothing calls this directly
no test coverage detected