Helios++
Helios software for LiDAR simulations
VoxelParsingTest.h
1 #pragma once
2 
3 #include <string>
4 #include <VoxelFileParser.h>
5 
6 namespace HeliosTests{
7 
8 
14 class VoxelParsingTest : public BaseTest {
15 public:
16  // *** ATTRIBUTES *** //
17  // ******************** //
24  std::string testDir;
25 
26  // *** CONSTRUCTION *** //
27  // ********************** //
31  VoxelParsingTest(std::string testDir="data/test/") :
32  BaseTest("Voxel parsing test"),
34  {}
35 
36  // *** R U N *** //
37  // *************** //
41  bool run() override;
42 };
43 
44 
46  double eps = 0.0001;
47  std::string vfPath = testDir + "semitransparent_voxels.vox";
48  VoxelFileParser vfp;
49  std::vector<std::shared_ptr<DetailedVoxel>> dvoxels = vfp.parseDetailed(
50  vfPath,
51  2,
52  false
53  );
54  if(dvoxels.size()!=36) return false;
55  std::shared_ptr<DetailedVoxel> dv;
56  double xDiff, yDiff, zDiff;
57 
58  // Expected int values
59  int EXPECTED_nbEchos[36] = {
60  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
61  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
62  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
63  0, 0, 0, 0, 0, 0
64  };
65  int EXPECTED_nbSampling[36] = {
66  49, 120, 169, 180, 153, 139, 302, 216, 116, 38,
67  35, 153, 168, 124, 253, 219, 69, 69, 69, 216,
68  116, 38, 35, 153, 168, 124, 253, 219, 69, 50,
69  16, 8, 38, 54, 174, 48
70  };
71 
72  // Test expected int values
73  for(size_t i = 0 ; i < dvoxels.size() ; i++){
74  dv = dvoxels[i];
75  if(dv->getNbEchos() != EXPECTED_nbEchos[i]) return false;
76  if(dv->getNbSampling() != EXPECTED_nbSampling[i]) return false;
77  }
78 
79  // Expected double values
80  double EXPECTED_PadBVTotal[36] = {
81  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
82  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
83  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
84  0, 0, 0, 0, 0, 0
85  };
86  double EXPECTED_angleMean[36] = {
87  89.7859174, 89.9096456, 89.6270244, 89.3006538, 88.9270184,
88  88.6899252, 88.3412947, 88.0299087, 87.6877344, 87.3695616,
89  87.120519, 86.7490226, 86.382687, 86.0816272, 85.7616811,
90  85.4599773, 85.1357778, 85.1357778, 85.1357778, 88.0299087,
91  87.6877344, 87.3695616, 87.120519, 86.7490226, 86.382687,
92  86.0816272, 85.7616811, 85.4599773, 85.1357778, 84.7967107,
93  84.606863, 84.2140568, 83.8143775, 83.5161812, 83.234543,
94  82.9336984
95  };
96  double EXPECTED_bsPotential[36] = {
97  0.1843913, 0.1772976, 0.1854843, 0.1794923, 0.186054,
98  0.180072, 0.1877376, 0.1861319, 0.1861689, 0.1845732,
99  0.1884445, 0.1901379, 0.1885587, 0.1875307, 0.1897892,
100  0.1915078, 0.1910439, 0.1910439, 0.1910439, 0.1861319,
101  0.1861689, 0.1845732, 0.1884445, 0.1901379, 0.1885587,
102  0.1875307, 0.1897892, 0.1915078, 0.1910439, 0.1889422,
103  0.1939671, 0.1940688, 0.1952733, 0.1931918, 0.1982526,
104  0.1972807
105  };
106  double EXPECTED_x[36] = {
107  5.0, 5.0, 5.0, 5.0,
108  5.0, 5.0, 5.0, 5.0,
109  5.0, 5.0, 5.0, 5.0,
110  15.0, 15.0, 15.0, 15.0,
111  15.0, 15.0, 15.0, 15.0,
112  15.0, 15.0, 15.0, 15.0,
113  25.0, 25.0, 25.0, 25.0,
114  25.0, 25.0, 25.0, 25.0,
115  25.0, 25.0, 25.0, 25.0
116  };
117  double EXPECTED_y[36] = {
118  5.0, 5.0, 5.0, 5.0,
119  15.0, 15.0, 15.0, 15.0,
120  25.0, 25.0, 25.0, 25.0,
121  5.0, 5.0, 5.0, 5.0,
122  15.0, 15.0, 15.0, 15.0,
123  25.0, 25.0, 25.0, 25.0,
124  5.0, 5.0, 5.0, 5.0,
125  15.0, 15.0, 15.0, 15.0,
126  25.0, 25.0, 25.0, 25.0
127  };
128  double EXPECTED_z[36] = {
129  5.0, 15.0, 25.0, 35.0,
130  5.0, 15.0, 25.0, 35.0,
131  5.0, 15.0, 25.0, 35.0,
132  5.0, 15.0, 25.0, 35.0,
133  5.0, 15.0, 25.0, 35.0,
134  5.0, 15.0, 25.0, 35.0,
135  5.0, 15.0, 25.0, 35.0,
136  5.0, 15.0, 25.0, 35.0,
137  5.0, 15.0, 25.0, 35.0
138  };
139 
140  // Test expected double values
141  for(size_t i = 0 ; i < dvoxels.size() ; i++){
142  dv = dvoxels[i];
143  if((*dv)[0] != EXPECTED_PadBVTotal[i]) return false;
144  if((*dv)[1] != EXPECTED_angleMean[i]) return false;
145  if((*dv)["bsPotential"] != EXPECTED_bsPotential[i]) return false;
146  xDiff = dv->getCentroid().x - EXPECTED_x[i];
147  if(xDiff < -eps || xDiff > eps) return false;
148  yDiff = dv->getCentroid().y - EXPECTED_y[i];
149  if(yDiff < -eps || yDiff > eps) return false;
150  zDiff = dv->getCentroid().z - EXPECTED_z[i];
151  if(zDiff < -eps || zDiff > eps) return false;
152  if(dv->halfSize != 5.0) return false;
153  }
154 
155  // Successfully reached end of test
156  return true;
157 }
158 
159 
160 }
BaseTest class.
Definition: BaseTest.h:20
Test for voxel parsing.
Definition: VoxelParsingTest.h:14
VoxelParsingTest(std::string testDir="data/test/")
Constructor for voxel parsing test.
Definition: VoxelParsingTest.h:31
bool run() override
Definition: VoxelParsingTest.h:45
std::string testDir
Where required test files are stored. For VoxelParsingTest it is required that a file named semitrans...
Definition: VoxelParsingTest.h:24
Class for parsing voxel files.
Definition: VoxelFileParser.h:19
std::vector< std::shared_ptr< DetailedVoxel > > parseDetailed(std::string const &path, size_t numHeaderLines=2, bool const exactFormat=true, bool const discardNullPad=false, std::string const separator=" ")
Parse detailed voxels specified at file located at given path.
Definition: VoxelFileParser.cpp:7