Separated project into src, doc and test directories.
[physicssim.git] / test / proximity_list_test.cpp
blob8eff879245a403e24b64702cecfaf48888702b72
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>
6 #include <algorithm>
7 #include <cmath>
8 #include <iostream>
9 #include <vector>
11 struct Distance1
13 typedef float result_type;
15 template<class T>
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());
28 std::vector<int> vec;
29 for(size_t i = 0; i < 10; ++i)
31 vec.push_back(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;
42 p1.insert(1);
43 p1.insert(2);
44 p1.insert(3);
46 BOOST_CHECK_EQUAL(p1.size(), 3);
48 std::vector<int> vec;
49 for(size_t i = 0; i < 10; ++i)
51 vec.push_back(i);
53 p1.insert(vec.begin(), vec.end());
55 BOOST_CHECK_EQUAL(p1.size(), 13);
57 BOOST_AUTO_TEST_CASE(find_nearest)
59 boost::mt19937 rng;
60 boost::uniform_int<> size(0, 100);
61 boost::variate_generator<boost::mt19937 &, boost::uniform_int<> > random(
62 rng, size);
64 std::vector<int> vec;
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)
73 int query = random();
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);