1
#include "../utest/utest.h"
2
#include <libnr/nr-types.h>
3
#include <libnr/nr-point-fns.h>
10
int main(int argc, char *argv[]) {
11
utest_start("Basic NR::Point operations");
13
UTEST_TEST("X,Y values") {
18
NR::Point const a(1.5, 2.0);
19
UTEST_TEST("x,y constructor and operator[] const") {
20
UTEST_ASSERT(a[X] == 1.5);
21
UTEST_ASSERT(a[Y] == 2.0);
24
NR::Point const b(-2.0, 3.0);
26
UTEST_TEST("copy constructor") {
28
UTEST_ASSERT(a == a_copy);
29
UTEST_ASSERT(!(a != a_copy));
32
UTEST_TEST("non-const operator[]") {
35
UTEST_ASSERT(a_copy != a);
36
UTEST_ASSERT(a_copy != b);
38
UTEST_ASSERT(a_copy == b);
41
NR::Point const ab(-0.5, 5.0);
42
UTEST_TEST("binary +, -") {
44
UTEST_ASSERT(a + b == ab);
45
UTEST_ASSERT(ab - a == b);
46
UTEST_ASSERT(ab - b == a);
47
UTEST_ASSERT(ab + a != b);
50
UTEST_TEST("unary-") {
51
UTEST_ASSERT(-a == Point(-a[X], -a[Y]));
54
UTEST_TEST("scale, divide") {
55
UTEST_ASSERT(-a == -1.0 * a);
56
UTEST_ASSERT(a + a + a == 3.0 * a);
57
UTEST_ASSERT(a / .5 == 2.0 * a);
61
UTEST_ASSERT( dot(a, b) == ( a[X] * b[X] +
63
UTEST_ASSERT( dot(a, NR::rot90(a)) == 0.0 );
64
UTEST_ASSERT( dot(-a, NR::rot90(a)) == 0.0 );
67
double const small = pow(2.0, -1070);
69
Point const small_left(-small, 0.0);
70
Point const smallish_3_neg4(3.0 * small, -4.0 * small);
72
UTEST_TEST("L1, L2, LInfty norms") {
73
UTEST_ASSERT(L1(small_left) == small);
74
UTEST_ASSERT(L2(small_left) == small);
75
UTEST_ASSERT(LInfty(small_left) == small);
77
UTEST_ASSERT(L1(smallish_3_neg4) == 7.0 * small);
78
UTEST_ASSERT(L2(smallish_3_neg4) == 5.0 * small);
79
UTEST_ASSERT(LInfty(smallish_3_neg4) == 4.0 * small);
82
UTEST_TEST("operator+=") {
85
UTEST_ASSERT(x == ab);
88
UTEST_TEST("operator/=") {
91
UTEST_ASSERT(x == a + a);
94
UTEST_TEST("normalize") {
97
UTEST_ASSERT(x == Point(-1.0, 0.0));
101
UTEST_ASSERT(x == Point(0.6, -0.8));
104
return utest_end() ? 0 : 1;