OpenWalnut  1.5.0dev
WMWriteCSV_test.h
1 //---------------------------------------------------------------------------
2 //
3 // Project: OpenWalnut ( http://www.openwalnut.org )
4 //
5 // Copyright 2009 OpenWalnut Community, BSV@Uni-Leipzig and CNCF@MPI-CBS
6 // For more information see http://www.openwalnut.org/copying
7 //
8 // This file is part of OpenWalnut.
9 //
10 // OpenWalnut is free software: you can redistribute it and/or modify
11 // it under the terms of the GNU Lesser General Public License as published by
12 // the Free Software Foundation, either version 3 of the License, or
13 // (at your option) any later version.
14 //
15 // OpenWalnut is distributed in the hope that it will be useful,
16 // but WITHOUT ANY WARRANTY; without even the implied warranty of
17 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 // GNU Lesser General Public License for more details.
19 //
20 // You should have received a copy of the GNU Lesser General Public License
21 // along with OpenWalnut. If not, see <http://www.gnu.org/licenses/>.
22 //
23 //---------------------------------------------------------------------------
24 
25 #ifndef WMWRITECSV_TEST_H
26 #define WMWRITECSV_TEST_H
27 
28 #include <iostream>
29 #include <list>
30 #include <memory>
31 #include <string>
32 #include <vector>
33 
34 #include <cxxtest/TestSuite.h>
35 
36 #include "../WMWriteCSV.h"
37 
38 
39 /**
40  * test class of the writeCSV class
41  */
42 class WMWriteCSVTest : public CxxTest::TestSuite
43 {
44 public:
45  /**
46  * A shared_ptr for a float vector
47  */
48  typedef std::shared_ptr< std::vector< float > > SPFloatVector;
49 
50  /**
51  * A shared_ptr for a size_t vector
52  */
53  typedef std::shared_ptr< std::vector< size_t > > SPSizeVector;
54 
55  /**
56  * test for converting a fiber to a tuple of vectors and ids
57  */
59  {
60  WMWriteCSV writerCSV;
61  std::tuple < WDataSetFibers::SPtr, std::vector< std::tuple < float, float, float, size_t > > >
62  samples = createSampleFibers();
63  WDataSetFibers::SPtr fibers = std::get< 0 >( samples );
64  std::vector< std::tuple < float, float, float, size_t > > referenceList = std::get< 1 >( samples );
65  std::list< std::tuple < float, float, float, size_t > > testList = writerCSV.getListOfInternalVertex( fibers );
66 
67  TS_ASSERT_EQUALS( referenceList.size(), testList.size() );
68 
69  size_t referenceListCounter = 0;
70  for( auto element = testList.begin(); element != testList.end(); element++ )
71  {
72  std::tuple < float, float, float, size_t > refTuple = referenceList.at( referenceListCounter++ );
73 
74  osg::Vec3 refVector( std::get< 0 >( refTuple ), std::get< 1 >( refTuple ), std::get< 2 >( refTuple ) );
75  size_t refIndex = std::get< 3 >( refTuple );
76 
77  osg::Vec3 testVector( std::get< 0 >( *element ), std::get< 1 >( *element ), std::get< 2 >( *element ) );
78  size_t testIndex = std::get< 3 >( *element );
79 
80  TS_ASSERT_EQUALS( refVector.x(), testVector.x() );
81  TS_ASSERT_EQUALS( refVector.y(), testVector.y() );
82  TS_ASSERT_EQUALS( refVector.z(), testVector.z() );
83  TS_ASSERT_EQUALS( refIndex, testIndex );
84  }
85  }
86 
87  /**
88  * test the checks whether the source domain contains the specified float
89  */
90  void testContains()
91  {
92  WMWriteCSV writerCSV;
93 
94  std::list< std::tuple < std::string, float , bool > > refList;
95 
96  refList.push_back( std::tuple < std::string, float, bool >(
97  "2212,1,0,4.20922e-09,4.20922e-09,0.0199097,0.0250083,725.314,-1.86984,4.55793,225.244,-1.86984,"
98  "4.55793,0.0125,-0.00614681,0.0255574,0.999654,0,0,0,0,0,0,0,0,0,0,0,1,-0.154322,0.156973,-500,0,"
99  "1,0,277.4,0,[0;1;0;3;-1;-1;-1;-1;-1;-1],Transportation,NULL,NULL",
100  -1.86984,
101  true
102  ) );
103 
104  refList.push_back( std::tuple < std::string, float, bool >(
105  "2212,1,0,4.20922e-09,4.20922e-09,0.0199097,0.0250083,725.314,-1.86984,4.55793,225.244,-1.86984,"
106  "4.55793,0.0125,-0.00614681,0.0255574,0.999654,0,0,0,0,0,0,0,0,0,0,0,1,-0.154322,0.156973,-500,0,"
107  "1,0,277.4,0,[0;1;0;3;-1;-1;-1;-1;-1;-1],Transportation,NULL,NULL",
108  -123.123,
109  false
110  ) );
111 
112  refList.push_back( std::tuple < std::string, float, bool >(
113  "2212,1,0,4.96962e-09,4.96962e-09,0.0184161,0.0250029,844.443,-9.20755,2.35148,344.394,-9.20755,"
114  "2.35148,0.0125,-0.0047637,0.0141168,0.999889,1,2,0,0,0,0,0,0,0,0,0,1,-3.1341,0.319804,-500,0,32,"
115  "0,461.8,0,[0;2;2;3;-1;-1;-1;-1;-1;-1],Transportation,NULL,NULL",
116  0.999889,
117  true
118  ) );
119 
120  refList.push_back( std::tuple < std::string, float, bool >(
121  "2212,1,0,4.96962e-09,4.96962e-09,0.0184161,0.0250029,844.443,-9.20755,2.35148,344.394,-9.20755,"
122  "2.35148,0.0125,-0.0047637,0.0141168,0.999889,1,2,0,0,0,0,0,0,0,0,0,1,-3.1341,0.319804,-500,0,32,"
123  "0,461.8,0,[0;2;2;3;-1;-1;-1;-1;-1;-1],Transportation,NULL,NULL",
124  123.123,
125  false
126  ) );
127 
128  for( auto element : refList )
129  {
130  std::string sourceString = std::get<0 >( element );
131  float num = std::get< 1 >( element );
132  bool result = std::get< 2 >( element );
133 
134  TS_ASSERT_EQUALS( writerCSV.contains( sourceString, num ), result );
135  }
136  }
137 
138  /**
139  * test goes through the existing EvenIDs and returns the next one.
140  */
142  {
143  WMWriteCSV writerCSV;
144 
145  std::list< std::tuple < float, float, float, size_t > > listOfInternalVertex;
146 
147  size_t refCounter = 0;
148  for( refCounter = 0; refCounter < 100; refCounter++ )
149  {
150  listOfInternalVertex.push_back( std::tuple < float, float, float, size_t >( 0.0, 0.0, 0.0, refCounter ) );
151  }
152 
153  TS_ASSERT_EQUALS( writerCSV.createStartCounter( listOfInternalVertex ), refCounter );
154 
155  listOfInternalVertex.clear();
156 
157  listOfInternalVertex.push_back( std::tuple < float, float, float, size_t >( 0.0, 0.0, 0.0, 13 ) );
158  listOfInternalVertex.push_back( std::tuple < float, float, float, size_t >( 0.0, 0.0, 0.0, 214 ) );
159  listOfInternalVertex.push_back( std::tuple < float, float, float, size_t >( 0.0, 0.0, 0.0, 44 ) );
160  listOfInternalVertex.push_back( std::tuple < float, float, float, size_t >( 0.0, 0.0, 0.0, 23 ) );
161  listOfInternalVertex.push_back( std::tuple < float, float, float, size_t >( 0.0, 0.0, 0.0, 64 ) );
162  listOfInternalVertex.push_back( std::tuple < float, float, float, size_t >( 0.0, 0.0, 0.0, 223 ) );
163  listOfInternalVertex.push_back( std::tuple < float, float, float, size_t >( 0.0, 0.0, 0.0, 132 ) );
164  listOfInternalVertex.push_back( std::tuple < float, float, float, size_t >( 0.0, 0.0, 0.0, 322 ) );
165 
166  TS_ASSERT_EQUALS( writerCSV.createStartCounter( listOfInternalVertex ), 323 );
167  }
168 
169 private:
170  /**
171  * helpermethod that generates a fiber example
172  * \return std::tuple < WDataSetFibers::SPtr, std::vector< std::tuple < osg::Vec3, size_t > > > The fibers
173  */
174  std::tuple < WDataSetFibers::SPtr, std::vector< std::tuple < float, float, float, size_t > > > createSampleFibers()
175  {
176  std::vector< std::tuple < float, float, float, size_t > > referenceList;
177 
178  SPFloatVector vertices = SPFloatVector( new std::vector< float >() );
179  SPSizeVector fiberStartIndexes = SPSizeVector( new std::vector< size_t >() );
180  SPSizeVector fiberLengths = SPSizeVector( new std::vector< size_t >() );
181  SPSizeVector verticesReverse = SPSizeVector( new std::vector< size_t >() );
182  SPSizeVector eventIDs = SPSizeVector( new std::vector< size_t >() );
183 
184  size_t eventIDCounter = 0;
185  size_t counter = 0;
186 
187  //create vertices
188  for( size_t vertexCounter = 0; vertexCounter < 10; vertexCounter++ )
189  {
190  vertices->push_back( vertexCounter );
191  vertices->push_back( vertexCounter );
192  vertices->push_back( vertexCounter );
193 
194  if( counter == 2 )
195  {
196  counter = 0;
197  eventIDCounter++;
198  }
199 
200  eventIDs->push_back( eventIDCounter );
201 
202  std::tuple < float, float, float, size_t > tupleTemp( vertexCounter, vertexCounter, vertexCounter, eventIDCounter );
203 
204  referenceList.push_back( tupleTemp );
205  counter++;
206  }
207 
208  size_t fiberLength = 0;
209  size_t fiberStartIndex = 0;
210  size_t reversePos = 0;
211  size_t currentEventID = eventIDs->at( 0 );
212 
213  fiberStartIndexes->push_back( fiberStartIndex );
214 
215  //calculate fibers
216  for( size_t eID : *eventIDs )
217  {
218  if( currentEventID != eID )
219  {
220  fiberStartIndexes->push_back( fiberStartIndex );
221  fiberLengths->push_back( fiberLength );
222 
223  currentEventID = eID;
224  fiberLength = 0;
225 
226  reversePos++;
227  }
228  fiberLength++;
229  fiberStartIndex++;
230  verticesReverse->push_back( reversePos );
231  }
232  fiberStartIndexes->push_back( fiberLength );
233 
234  WDataSetFibers::SPtr fibers = std::shared_ptr< WDataSetFibers >( new WDataSetFibers(
235  vertices,
236  fiberStartIndexes,
237  fiberLengths,
238  verticesReverse
239  ) );
240 
241  std::tuple < WDataSetFibers::SPtr, std::vector< std::tuple < float, float, float, size_t > > >
242  returnTuple( fibers, referenceList );
243  return returnTuple;
244  }
245 };
246 
247 #endif // WMWRITECSV_TEST_H
Represents a simple set of WFibers.
std::shared_ptr< WDataSetFibers > SPtr
Pointer to dataset.
test class of the writeCSV class
void testgetListOfInternalVertex()
test for converting a fiber to a tuple of vectors and ids
void testContains()
test the checks whether the source domain contains the specified float
std::shared_ptr< std::vector< size_t > > SPSizeVector
A shared_ptr for a size_t vector.
std::shared_ptr< std::vector< float > > SPFloatVector
A shared_ptr for a float vector.
std::tuple< WDataSetFibers::SPtr, std::vector< std::tuple< float, float, float, size_t > > > createSampleFibers()
helpermethod that generates a fiber example
void testCreateStartCounter()
test goes through the existing EvenIDs and returns the next one.
Class for safe the point-connector data.
Definition: WMWriteCSV.h:43
std::list< std::tuple< float, float, float, size_t > > getListOfInternalVertex(WDataSetFibers::SPtr fibers)
Helpermethod to create a List of internal vertex with id.
Definition: WMWriteCSV.cpp:133
size_t createStartCounter(std::list< std::tuple< float, float, float, size_t > > listOfInternalVertex)
Helpermethod goes through the existing EvenIDs and returns the next one.
Definition: WMWriteCSV.cpp:207
bool contains(std::string sourceString, float num)
Helpermethod: checks whether the source domain contains the specified float.
Definition: WMWriteCSV.cpp:200