11 #include "eckit/testing/Test.h"
12 #include "eckit/types/FloatCompare.h"
19 using namespace eckit::testing;
20 using eckit::types::is_approximately_equal;
24 CASE(
"Various distance measuring functions return sensible things") {
62 const std::string sql = std::string(
"select rad(45.0,0.0,1.0,lat,lon), ") +
63 "rad(10.0,0.0,0.0,lat,lon), " +
64 "distance(46.0,0.0,lat,lon), " +
65 "km(46.0,0.0,lat,lon), " +
66 "dist(100.,46.0,1.0,lat,lon), " +
67 "dist(40.0,5.0,1000.0,lat,lon) " +
68 "from \"" +
f.path() +
"\";";
70 const double eps = 7.e-6;
76 EXPECT((*it)[0] == 1);
77 EXPECT((*it)[1] == 0);
78 EXPECT(is_approximately_equal((*it)[2], 111120., eps));
79 EXPECT(is_approximately_equal((*it)[3], 111.12, eps));
80 EXPECT((*it)[4] == 0);
81 EXPECT((*it)[5] == 1);
84 EXPECT((*it)[0] == 0);
85 EXPECT((*it)[1] == 0);
87 EXPECT(is_approximately_equal((*it)[2], 4889280., eps));
88 EXPECT(is_approximately_equal((*it)[3], 4889.28, eps));
89 EXPECT((*it)[4] == 0);
90 EXPECT((*it)[5] == 0);
93 EXPECT((*it)[0] == 0);
94 EXPECT((*it)[1] == 0);
96 EXPECT(is_approximately_equal((*it)[2], 15112320., eps));
97 EXPECT(is_approximately_equal((*it)[3], 15112.32, eps));
98 EXPECT((*it)[4] == 0);
99 EXPECT((*it)[5] == 0);
102 EXPECT((*it)[0] == 0);
103 EXPECT((*it)[1] == 0);
104 EXPECT(is_approximately_equal((*it)[2], 13398177.5541776344, eps));
105 EXPECT(is_approximately_equal((*it)[3], 13398.1775541776344, eps));
106 EXPECT((*it)[4] == 0);
107 EXPECT((*it)[5] == 0);
113 const std::string sql2 = std::string(
"select "
114 "distance(90.0,0.0,lat,lon), "
115 "km(90.0,0.0,lat,lon), "
116 "distance(-90.0,0.0,lat,lon), "
117 "km(-90.0,0.0,lat,lon), "
118 "distance(0.0,180.0,lat,lon), "
119 "km(0.0,180.0,lat,lon), "
120 "from \"") +
f.path() +
"\";";
127 EXPECT(is_approximately_equal((*it)[0], 5000400., eps));
128 EXPECT(is_approximately_equal((*it)[1], 5000.4, eps));
130 EXPECT(is_approximately_equal((*it)[2], 15001200., eps));
131 EXPECT(is_approximately_equal((*it)[3], 15001.2, eps));
133 EXPECT(is_approximately_equal((*it)[4], 15001200., eps));
134 EXPECT(is_approximately_equal((*it)[5], 15001.2, eps));
137 EXPECT(is_approximately_equal((*it)[0], 0., eps));
138 EXPECT(is_approximately_equal((*it)[1], 0., eps));
140 EXPECT(is_approximately_equal((*it)[2], 20001600., eps));
141 EXPECT(is_approximately_equal((*it)[3], 20001.6, eps));
143 EXPECT(is_approximately_equal((*it)[4], 10000800., eps));
144 EXPECT(is_approximately_equal((*it)[5], 10000.8, eps));
147 EXPECT(is_approximately_equal((*it)[0], 20001600., eps));
148 EXPECT(is_approximately_equal((*it)[1], 20001.6, eps));
150 EXPECT(is_approximately_equal((*it)[2], 0., eps));
151 EXPECT(is_approximately_equal((*it)[3], 0., eps));
153 EXPECT(is_approximately_equal((*it)[4], 10000800., eps));
154 EXPECT(is_approximately_equal((*it)[5], 10000.8, eps));
158 EXPECT(is_approximately_equal((*it)[0], 15001200., eps));
159 EXPECT(is_approximately_equal((*it)[1], 15001.2, eps));
161 EXPECT(is_approximately_equal((*it)[2], 5000400., eps));
162 EXPECT(is_approximately_equal((*it)[3], 5000.4, eps));
164 EXPECT(is_approximately_equal((*it)[4], 10000800., eps));
165 EXPECT(is_approximately_equal((*it)[5], 10000.8, eps));
171 CASE(
"Inside or outside detection works for circles") {
203 const std::string sql = std::string(
"select ") +
204 "circle(x, 46.0, y, 11.0, 1.0), "
205 "circle(x, 46.0, y, 11.0, 1.5), "
206 "circle(x, 0.0, y, 0.0, 1.0), "
207 "circle(x, 0.0, y, 0.0, -1.0), "
208 "circle(x, 0.0, y, 0.0, 0.0), "
209 "circle(x, 45.5, y, -37.4, 117.7966), "
210 "circle(x, 45.5, y, -37.4, 117.7967) "
211 "from \"" +
f.path() +
"\";";
217 EXPECT((*it)[0] == 0);
218 EXPECT((*it)[1] == 1);
219 EXPECT((*it)[2] == 0);
220 EXPECT((*it)[3] == 0);
221 EXPECT((*it)[4] == 0);
222 EXPECT((*it)[5] == 1);
223 EXPECT((*it)[6] == 1);
226 EXPECT((*it)[0] == 0);
227 EXPECT((*it)[1] == 0);
228 EXPECT((*it)[2] == 1);
229 EXPECT((*it)[3] == 1);
230 EXPECT((*it)[4] == 1);
231 EXPECT((*it)[5] == 1);
232 EXPECT((*it)[6] == 1);
235 EXPECT((*it)[0] == 0);
236 EXPECT((*it)[1] == 0);
237 EXPECT((*it)[2] == 0);
238 EXPECT((*it)[3] == 0);
239 EXPECT((*it)[4] == 0);
240 EXPECT((*it)[5] == 0);
241 EXPECT((*it)[6] == 1);
244 EXPECT((*it)[0] == 0);
245 EXPECT((*it)[1] == 0);
246 EXPECT((*it)[2] == 0);
247 EXPECT((*it)[3] == 0);
248 EXPECT((*it)[4] == 0);
249 EXPECT((*it)[5] == 1);
250 EXPECT((*it)[6] == 1);
255 CASE(
"Norms are correctly calculated") {
285 const std::string sql = std::string(
"select ") +
287 "from \"" +
f.path() +
"\";";
296 EXPECT(is_approximately_equal((*it)[0], 12.));
303 int main(
int argc,
char* argv[]) {
304 return run_tests(argc, argv);
void setNumberOfColumns(size_t n)
int setColumn(size_t index, const std::string &name, api::ColumnType type)
int main(int argc, char *argv[])
CASE("Various distance measuring functions return sensible things")