ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
track_test.cc
Go to the documentation of this file.
1 // Copyright (c) 2018, ETH Zurich and UNC Chapel Hill.
2 // All rights reserved.
3 //
4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions are met:
6 //
7 // * Redistributions of source code must retain the above copyright
8 // notice, this list of conditions and the following disclaimer.
9 //
10 // * Redistributions in binary form must reproduce the above copyright
11 // notice, this list of conditions and the following disclaimer in the
12 // documentation and/or other materials provided with the distribution.
13 //
14 // * Neither the name of ETH Zurich and UNC Chapel Hill nor the names of
15 // its contributors may be used to endorse or promote products derived
16 // from this software without specific prior written permission.
17 //
18 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
22 // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23 // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24 // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25 // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26 // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 // POSSIBILITY OF SUCH DAMAGE.
29 //
30 // Author: Johannes L. Schoenberger (jsch-at-demuc-dot-de)
31 
32 #define TEST_NAME "base/track"
33 #include "util/testing.h"
34 
35 #include "base/track.h"
36 
37 using namespace colmap;
38 
39 BOOST_AUTO_TEST_CASE(TestTrackElement) {
40  TrackElement track_el;
41  BOOST_CHECK_EQUAL(track_el.image_id, kInvalidImageId);
42  BOOST_CHECK_EQUAL(track_el.point2D_idx, kInvalidPoint2DIdx);
43 }
44 
45 BOOST_AUTO_TEST_CASE(TestDefault) {
46  Track track;
47  BOOST_CHECK_EQUAL(track.Length(), 0);
48  BOOST_CHECK_EQUAL(track.Elements().size(), track.Length());
49 }
50 
51 BOOST_AUTO_TEST_CASE(TestSetElements) {
52  Track track;
53  std::vector<TrackElement> elements;
54  elements.emplace_back(0, 1);
55  elements.emplace_back(0, 2);
56  track.SetElements(elements);
57  BOOST_CHECK_EQUAL(track.Length(), 2);
58  BOOST_CHECK_EQUAL(track.Elements().size(), track.Length());
59  BOOST_CHECK_EQUAL(track.Element(0).image_id, 0);
60  BOOST_CHECK_EQUAL(track.Element(0).point2D_idx, 1);
61  BOOST_CHECK_EQUAL(track.Element(1).image_id, 0);
62  BOOST_CHECK_EQUAL(track.Element(1).point2D_idx, 2);
63  for (size_t i = 0; i < track.Length(); ++i) {
64  BOOST_CHECK_EQUAL(track.Element(i).image_id, track.Elements()[i].image_id);
65  BOOST_CHECK_EQUAL(track.Element(i).point2D_idx,
66  track.Elements()[i].point2D_idx);
67  }
68 }
69 
70 BOOST_AUTO_TEST_CASE(TestAddElement) {
71  Track track;
72  track.AddElement(0, 1);
73  track.AddElement(TrackElement(0, 2));
74  std::vector<TrackElement> elements;
75  elements.emplace_back(0, 1);
76  elements.emplace_back(0, 2);
77  track.AddElements(elements);
78  BOOST_CHECK_EQUAL(track.Length(), 4);
79  BOOST_CHECK_EQUAL(track.Elements().size(), track.Length());
80  BOOST_CHECK_EQUAL(track.Element(0).image_id, 0);
81  BOOST_CHECK_EQUAL(track.Element(0).point2D_idx, 1);
82  BOOST_CHECK_EQUAL(track.Element(1).image_id, 0);
83  BOOST_CHECK_EQUAL(track.Element(1).point2D_idx, 2);
84  BOOST_CHECK_EQUAL(track.Element(2).image_id, 0);
85  BOOST_CHECK_EQUAL(track.Element(2).point2D_idx, 1);
86  BOOST_CHECK_EQUAL(track.Element(3).image_id, 0);
87  BOOST_CHECK_EQUAL(track.Element(3).point2D_idx, 2);
88  for (size_t i = 0; i < track.Length(); ++i) {
89  BOOST_CHECK_EQUAL(track.Element(i).image_id, track.Elements()[i].image_id);
90  BOOST_CHECK_EQUAL(track.Element(i).point2D_idx,
91  track.Elements()[i].point2D_idx);
92  }
93 }
94 
95 BOOST_AUTO_TEST_CASE(TestDeleteElement) {
96  Track track;
97  track.AddElement(0, 1);
98  track.AddElement(0, 2);
99  track.AddElement(0, 3);
100  track.AddElement(0, 3);
101  BOOST_CHECK_EQUAL(track.Length(), 4);
102  BOOST_CHECK_EQUAL(track.Elements().size(), track.Length());
103  track.DeleteElement(0);
104  BOOST_CHECK_EQUAL(track.Length(), 3);
105  BOOST_CHECK_EQUAL(track.Elements().size(), track.Length());
106  BOOST_CHECK_EQUAL(track.Element(0).image_id, 0);
107  BOOST_CHECK_EQUAL(track.Element(0).point2D_idx, 2);
108  BOOST_CHECK_EQUAL(track.Element(1).image_id, 0);
109  BOOST_CHECK_EQUAL(track.Element(1).point2D_idx, 3);
110  BOOST_CHECK_EQUAL(track.Element(2).image_id, 0);
111  BOOST_CHECK_EQUAL(track.Element(2).point2D_idx, 3);
112  track.DeleteElement(0, 3);
113  BOOST_CHECK_EQUAL(track.Length(), 1);
114  BOOST_CHECK_EQUAL(track.Elements().size(), track.Length());
115  BOOST_CHECK_EQUAL(track.Element(0).image_id, 0);
116  BOOST_CHECK_EQUAL(track.Element(0).point2D_idx, 2);
117 }
118 
119 BOOST_AUTO_TEST_CASE(TestReserve) {
120  Track track;
121  track.Reserve(2);
122  BOOST_CHECK_EQUAL(track.Elements().capacity(), 2);
123 }
124 
125 BOOST_AUTO_TEST_CASE(TestCompress) {
126  Track track;
127  track.AddElement(0, 1);
128  track.AddElement(0, 2);
129  track.AddElement(0, 3);
130  track.AddElement(0, 3);
131  BOOST_CHECK_EQUAL(track.Elements().capacity(), 4);
132  track.DeleteElement(0);
133  track.DeleteElement(0);
134  BOOST_CHECK_EQUAL(track.Elements().capacity(), 4);
135  track.Compress();
136  BOOST_CHECK_EQUAL(track.Elements().capacity(), 2);
137 }
void SetElements(const std::vector< TrackElement > &elements)
Definition: track.h:88
void AddElement(const TrackElement &element)
Definition: track.h:103
size_t Length() const
Definition: track.h:82
void AddElements(const std::vector< TrackElement > &elements)
Definition: track.h:111
void Compress()
Definition: track.h:124
const std::vector< TrackElement > & Elements() const
Definition: track.h:84
void DeleteElement(const size_t idx)
Definition: track.h:115
void Reserve(const size_t num_elements)
Definition: track.h:120
const TrackElement & Element(const size_t idx) const
Definition: track.h:93
const point2D_t kInvalidPoint2DIdx
Definition: types.h:79
const image_t kInvalidImageId
Definition: types.h:76
image_t image_id
Definition: track.h:22
point2D_t point2D_idx
Definition: track.h:24
BOOST_AUTO_TEST_CASE(TestTrackElement)
Definition: track_test.cc:39