1 #include "../src/util/proximity_list.hpp"
2 #define BOOST_TEST_MODULE ProximityListTest
3 #include <boost/test/unit_test.hpp>
4 #include <boost/bind.hpp>
5 #include <boost/random.hpp>
13 typedef float result_type
;
16 result_type
operator()(const T
&left
, const T
&right
) const
18 return std::abs(left
- right
);
22 BOOST_AUTO_TEST_CASE(constructors
)
24 proximity_list
<int, Distance1
> p1
;
26 BOOST_CHECK(p1
.begin() == p1
.end());
29 for(size_t i
= 0; i
< 10; ++i
)
34 proximity_list
<int, Distance1
> p2(vec
.begin(), vec
.end());
36 BOOST_CHECK_EQUAL(vec
.size(), p2
.size());
39 BOOST_AUTO_TEST_CASE(insert
)
41 proximity_list
<int, Distance1
> p1
;
46 BOOST_CHECK_EQUAL(p1
.size(), 3);
49 for(size_t i
= 0; i
< 10; ++i
)
53 p1
.insert(vec
.begin(), vec
.end());
55 BOOST_CHECK_EQUAL(p1
.size(), 13);
57 BOOST_AUTO_TEST_CASE(find_nearest
)
60 boost::uniform_int
<> size(0, 100);
61 boost::variate_generator
<boost::mt19937
&, boost::uniform_int
<> > random(
65 for(size_t i
= 0; i
< 10; ++i
)
67 vec
.push_back(random());
69 proximity_list
<int, Distance1
> p1(vec
.begin(), vec
.end());
71 for(size_t i
= 0; i
< 100; ++i
)
74 int nearest1
= *p1
.find_nearest(query
);
75 int nearest2
= *std::max_element(vec
.begin(), vec
.end(), boost::bind(
76 std::less
<Distance1::result_type
>(),
77 boost::bind(Distance1(), _2
, query
),
78 boost::bind(Distance1(), _1
, query
)));
80 BOOST_CHECK_EQUAL(nearest1
, nearest2
);