Danny Robson
7b083df977
almost_equal only operates on two reals, or two integers (and even then only on the same signedness).
90 lines
2.1 KiB
C++
90 lines
2.1 KiB
C++
#include "point.hpp"
|
|
|
|
#include "debug.hpp"
|
|
#include "tap.hpp"
|
|
#include "types.hpp"
|
|
|
|
using namespace util;
|
|
|
|
int
|
|
main (void)
|
|
{
|
|
util::TAP::logger tap;
|
|
|
|
// Redim to lower dimension
|
|
{
|
|
const point3f p(0.f, 1.f, 2.f);
|
|
const point2f q = p.redim<2> ();
|
|
|
|
tap.expect (
|
|
almost_equal (q[0], p[0]) &&
|
|
almost_equal (q[1], p[1]),
|
|
"redim to lower dimension"
|
|
);
|
|
}
|
|
|
|
// Redim to higher dimension without fill
|
|
{
|
|
const point2f p(0.f, 1.f);
|
|
const point3f q = p.redim<3> ();
|
|
|
|
tap.expect (
|
|
almost_equal (p[0], q[0]) &&
|
|
almost_equal (p[1], q[1]),
|
|
"redim to higher dimension"
|
|
);
|
|
}
|
|
|
|
// Redim to higher dimension with fill
|
|
{
|
|
static const point4f FILL (1.f, 2.f, 3.f, 4.f);
|
|
const point2f p (0.1f, 1.f);
|
|
const point4f q = p.template redim<4> (FILL);
|
|
|
|
tap.expect (
|
|
almost_equal (q[0], p[0]) &&
|
|
almost_equal (q[1], p[1]) &&
|
|
almost_equal (q[2], FILL[2]) &&
|
|
almost_equal (q[3], FILL[3]),
|
|
|
|
"redim to higher with fill"
|
|
);
|
|
}
|
|
|
|
// Simple linking check for coord type casting. Relies on truncation.
|
|
{
|
|
const point2f pf (0.5f, 0.2f);
|
|
const point2u pu (0, 0);
|
|
|
|
tap.expect_eq (pf.template cast<point2u::value_type> (), pu, "type cast with truncation");
|
|
}
|
|
|
|
// redim to 4-dimension homogenous coords
|
|
{
|
|
const point2f p (3, 4);
|
|
const point4f q = p.homog<4> ();
|
|
|
|
tap.expect (
|
|
almost_equal (q.x, 3.f) &&
|
|
almost_equal (q.y, 4.f) &&
|
|
almost_equal (q.z, 0.f) &&
|
|
almost_equal (q.w, 1.f),
|
|
|
|
"homogenous redim"
|
|
);
|
|
}
|
|
|
|
// trivial checks for distance metrics
|
|
{
|
|
const point2f a (1, 2);
|
|
const point2f b (9, 5);
|
|
|
|
tap.expect_eq (distance2 (a, b), 73.f, "distance2");
|
|
tap.expect_eq (distance (a, b), std::sqrt (73.f), "distance");
|
|
tap.expect_eq (manhattan (a, b), 11.f, "manhattan");
|
|
tap.expect_eq (chebyshev (a, b), 8.f, "chebyshev");
|
|
}
|
|
|
|
return tap.status ();
|
|
}
|