DGtal 1.4.0
Loading...
Searching...
No Matches
testAstroid2D.cpp
Go to the documentation of this file.
1
33#include <iostream>
34#include <random>
35#include "DGtalCatch.h"
36#include "DGtal/helpers/StdDefs.h"
37#include "DGtal/shapes/parametric/Astroid2D.h"
38
40
41using namespace DGtal;
42using namespace Z2i;
43
44
46
48 std::uniform_real_distribution<double>& unif,
49 std::default_random_engine& re )
50{
51 double res;
52 do {
53 res = unif(re);
54 }
55 while ( res == Approx(0.) );
56 return res;
57}
58
60 std::uniform_real_distribution<double>& unif,
61 std::default_random_engine& re )
62{
63 return RealPoint(notNullValue(unif,re),notNullValue(unif,re));
64}
65
66TEST_CASE("Astroid2D")
67{
68 std::uniform_real_distribution<double> unif(-10000,10000);
69 std::default_random_engine re;
70
71 SECTION("center()")
72 {
73 const RealPoint center(unif(re),unif(re));
74 Shape shape( center, unif(re), unif(re) );
75 REQUIRE( shape.center() == center );
76 }
77
78 SECTION("Lower and upper bounds")
79 {
80 Shape shape( unif(re), unif(re), unif(re), unif(re) );
81 REQUIRE( shape.getLowerBound() <= shape.getUpperBound() );
82 }
83
84 SECTION("parameter() with null x-radius -> division by 0.")
85 {
86 Shape shape( unif(re), unif(re), 0., notNullValue(unif,re) );
87 REQUIRE_NOTHROW( shape.parameter(notNullRealPoint(unif,re)) );
88 }
89
90 SECTION("parameter() with null y-radius -> division by 0.")
91 {
92 Shape shape( unif(re), unif(re), notNullValue(unif,re), 0. );
93 REQUIRE_NOTHROW( shape.parameter(notNullRealPoint(unif,re)) );
94 }
95
96 SECTION("parameter() with null x-radius and y-radius -> undefined behaviour.")
97 {
98 Shape shape( unif(re), unif(re), 0., 0. );
99 REQUIRE_NOTHROW( shape.parameter(notNullRealPoint(unif,re)) );
100 }
101
102 SECTION("parameter() where (x,y) parameter with x == center -> pi/2 or 3*pi/2")
103 {
104 const double centerX = unif(re);
105 Shape shape( centerX, unif(re), unif(re), unif(re) );
106 const RealPoint point( centerX, unif(re) );
107 REQUIRE_NOTHROW( shape.parameter(point) );
108 double res = shape.parameter(point);
109 REQUIRE_THAT( res, Catch::WithinAbs(M_PI_2,DBL_EPSILON) || Catch::WithinAbs(3*M_PI_2,DBL_EPSILON) );
110 }
111
112 SECTION("parameter() with point parameter with null y -> 0. or pi")
113 {
114 const double centerY = unif(re);
115 Shape shape( unif(re), centerY, unif(re), unif(re) );
116 const RealPoint point( unif(re), centerY );
117 REQUIRE_NOTHROW( shape.parameter(point) );
118 double res = shape.parameter(point);
119 REQUIRE_THAT( res, Catch::WithinAbs(0.,DBL_EPSILON) || Catch::WithinAbs(M_PI,DBL_EPSILON) );
120 }
121}
Aim: Model of the concept StarShaped represents an astroid.
Definition Astroid2D.h:62
RealPoint getLowerBound() const
Definition Astroid2D.h:122
RealPoint center() const
Definition Astroid2D.h:139
RealPoint getUpperBound() const
Definition Astroid2D.h:131
double parameter(const RealPoint &p) const
Aim: Implements basic operations that will be used in Point and Vector classes.
Space::RealPoint RealPoint
Definition StdDefs.h:97
DGtal is the top-level namespace which contains all DGtal functions and types.
TEST_CASE("Astroid2D")
RealPoint notNullRealPoint(std::uniform_real_distribution< double > &unif, std::default_random_engine &re)
Astroid2D< Space > Shape
double notNullValue(std::uniform_real_distribution< double > &unif, std::default_random_engine &re)
SECTION("Testing constant forward iterators")
REQUIRE(domain.isInside(aPoint))