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