00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 
00033 
00034 
00035 
00036 
00037 #include <voxel_grid/voxel_grid.h>
00038 #include <gtest/gtest.h>
00039 
00040 TEST(voxel_grid, basicMarkingAndClearing){
00041   int size_x = 50, size_y = 10, size_z = 16;
00042   voxel_grid::VoxelGrid vg(size_x, size_y, size_z);
00043 
00044   
00045   int table_z = 12;
00046   int table_x_min = 5, table_x_max = 15;
00047   int table_y_min = 0, table_y_max = 3;
00048   for(int x = table_x_min; x <= table_x_max; x++){
00049     vg.markVoxelLine(x, table_y_min, table_z, x, table_y_max, table_z);
00050   }
00051 
00052   for(int i = table_x_min; i <= table_x_max; ++i){
00053     for(int j = table_y_min; j <= table_y_max; ++j){
00054       
00055       ASSERT_EQ(voxel_grid::MARKED, vg.getVoxel(i, j, table_z));
00056     }
00057   }
00058 
00059   int mark_count = 0;
00060   unsigned int unknown_count = 0;
00061   
00062   for(unsigned int i = 0; i < vg.sizeX(); ++i){
00063     for(unsigned int j = 0; j < vg.sizeY(); ++j){
00064       for(unsigned int k = 0; k < vg.sizeZ(); ++k){
00065         if(vg.getVoxel(i, j, k) == voxel_grid::MARKED){
00066           mark_count++;
00067         }
00068         else if(vg.getVoxel(i, j, k) == voxel_grid::UNKNOWN){
00069           unknown_count++;
00070         }
00071       }
00072     }
00073   }
00074   ASSERT_EQ(mark_count, 44);
00075 
00076   
00077   ASSERT_EQ(unknown_count, vg.sizeX() * vg.sizeY() * vg.sizeZ() - 44);
00078 
00079   
00080   vg.clearVoxelLine(table_x_min, table_y_min, table_z, table_x_max, table_y_min, table_z);
00081 
00082   mark_count = 0;
00083   unknown_count = 0;
00084   int free_count = 0;
00085   
00086   for(unsigned int i = 0; i < vg.sizeX(); ++i){
00087     for(unsigned int j = 0; j < vg.sizeY(); ++j){
00088       for(unsigned int k = 0; k < vg.sizeZ(); ++k){
00089         if(vg.getVoxel(i, j, k) == voxel_grid::MARKED){
00090           mark_count++;
00091         }
00092         else if(vg.getVoxel(i, j, k) == voxel_grid::FREE){
00093           free_count++;
00094         }
00095         else if(vg.getVoxel(i, j, k) == voxel_grid::UNKNOWN){
00096           unknown_count++;
00097         }
00098       }
00099     }
00100   }
00101 
00102   
00103   ASSERT_EQ(mark_count, 33);
00104 
00105   
00106   ASSERT_EQ(free_count, 11);
00107 
00108   
00109   ASSERT_EQ(unknown_count, vg.sizeX() * vg.sizeY() * vg.sizeZ() - 44);
00110 
00111   
00112   for(unsigned int i = 0; i < vg.sizeZ(); ++i){
00113     vg.markVoxel(0, 0, i);
00114     ASSERT_EQ(vg.getVoxel(0, 0, i), voxel_grid::MARKED);
00115   }
00116 
00117   vg.printColumnGrid();
00118   vg.printVoxelGrid();
00119 
00120   
00121   vg.clearVoxelLine(0, 0, 0, 0, 0, vg.sizeZ() - 1);
00122 
00123   for(unsigned int i = 0; i < vg.sizeZ(); ++i){
00124     ASSERT_EQ(vg.getVoxel(0, 0, i), voxel_grid::FREE);
00125   }
00126 
00127   mark_count = 0;
00128 
00129 
00130 }
00131 
00132 int main(int argc, char** argv){
00133   testing::InitGoogleTest(&argc, argv);
00134   return RUN_ALL_TESTS();
00135 }