DGtal  1.2.beta
Typedefs | Functions
testAstroid2D.cpp File Reference
#include <iostream>
#include <random>
#include "DGtalCatch.h"
#include "DGtal/helpers/StdDefs.h"
#include "DGtal/shapes/parametric/Astroid2D.h"
Include dependency graph for testAstroid2D.cpp:

Go to the source code of this file.

Typedefs

typedef Z2i::Space Space
 
typedef Z2i::Point Point
 
typedef Z2i::RealPoint RealPoint
 
typedef Astroid2D< SpaceShape
 

Functions

double notNullValue (std::uniform_real_distribution< double > &unif, std::default_random_engine &re)
 
RealPoint notNullRealPoint (std::uniform_real_distribution< double > &unif, std::default_random_engine &re)
 
 TEST_CASE ("Astroid2D")
 

Detailed Description

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

Author
Adrien Krähenbühl (krahe.nosp@m.nbuh.nosp@m.l@uni.nosp@m.stra.nosp@m..fr ) Laboratoire ICube, UMR 7357, Université de Strasbourg, France
Date
2019/07/18

Functions for testing the methods of the Astroid2D shape. In particular, test the parameter() method for cas leadind to a division by 0.

This file is part of the DGtal library.

Definition in file testAstroid2D.cpp.

Typedef Documentation

◆ Point

typedef Z2i::Point Point

Definition at line 45 of file testAstroid2D.cpp.

◆ RealPoint

◆ Shape

typedef Astroid2D<Space> Shape

◆ Space

typedef Z2i::Space Space

Definition at line 44 of file testAstroid2D.cpp.

Function Documentation

◆ notNullRealPoint()

RealPoint notNullRealPoint ( std::uniform_real_distribution< double > &  unif,
std::default_random_engine &  re 
)

Definition at line 62 of file testAstroid2D.cpp.

References notNullValue(), re, and unif().

Referenced by TEST_CASE().

65 {
67 }
double notNullValue(std::uniform_real_distribution< double > &unif, std::default_random_engine &re)
std::uniform_real_distribution< double > unif(-1000000., 1000000.)
Z2i::RealPoint RealPoint
std::default_random_engine re

◆ notNullValue()

double notNullValue ( std::uniform_real_distribution< double > &  unif,
std::default_random_engine &  re 
)

Definition at line 50 of file testAstroid2D.cpp.

References re, and unif().

Referenced by notNullRealPoint(), and TEST_CASE().

53 {
54  double res;
55  do {
56  res = unif(re);
57  }
58  while ( res == Approx(0.) );
59  return res;
60 }
std::uniform_real_distribution< double > unif(-1000000., 1000000.)
std::default_random_engine re

◆ TEST_CASE()

TEST_CASE ( "Astroid2D"  )

Definition at line 69 of file testAstroid2D.cpp.

References DGtal::Astroid2D< TSpace >::center(), DGtal::Astroid2D< TSpace >::getLowerBound(), DGtal::Astroid2D< TSpace >::getUpperBound(), notNullRealPoint(), notNullValue(), DGtal::Astroid2D< TSpace >::parameter(), re, REQUIRE(), SECTION(), and unif().

70 {
71  std::uniform_real_distribution<double> unif(-10000,10000);
72  std::default_random_engine re;
73 
74  SECTION("center()")
75  {
76  const RealPoint center(unif(re),unif(re));
77  Shape shape( center, unif(re), unif(re) );
78  REQUIRE( shape.center() == center );
79  }
80 
81  SECTION("Lower and upper bounds")
82  {
83  Shape shape( unif(re), unif(re), unif(re), unif(re) );
84  REQUIRE( shape.getLowerBound() <= shape.getUpperBound() );
85  }
86 
87  SECTION("parameter() with null x-radius -> division by 0.")
88  {
89  Shape shape( unif(re), unif(re), 0., notNullValue(unif,re) );
90  REQUIRE_NOTHROW( shape.parameter(notNullRealPoint(unif,re)) );
91  }
92 
93  SECTION("parameter() with null y-radius -> division by 0.")
94  {
95  Shape shape( unif(re), unif(re), notNullValue(unif,re), 0. );
96  REQUIRE_NOTHROW( shape.parameter(notNullRealPoint(unif,re)) );
97  }
98 
99  SECTION("parameter() with null x-radius and y-radius -> undefined behaviour.")
100  {
101  Shape shape( unif(re), unif(re), 0., 0. );
102  REQUIRE_NOTHROW( shape.parameter(notNullRealPoint(unif,re)) );
103  }
104 
105  SECTION("parameter() where (x,y) parameter with x == center -> pi/2 or 3*pi/2")
106  {
107  const double centerX = unif(re);
108  Shape shape( centerX, unif(re), unif(re), unif(re) );
109  const RealPoint point( centerX, unif(re) );
110  REQUIRE_NOTHROW( shape.parameter(point) );
111  double res = shape.parameter(point);
112  REQUIRE_THAT( res, Catch::WithinAbs(M_PI_2,DBL_EPSILON) || Catch::WithinAbs(3*M_PI_2,DBL_EPSILON) );
113  }
114 
115  SECTION("parameter() with point parameter with null y -> 0. or pi")
116  {
117  const double centerY = unif(re);
118  Shape shape( unif(re), centerY, unif(re), unif(re) );
119  const RealPoint point( unif(re), centerY );
120  REQUIRE_NOTHROW( shape.parameter(point) );
121  double res = shape.parameter(point);
122  REQUIRE_THAT( res, Catch::WithinAbs(0.,DBL_EPSILON) || Catch::WithinAbs(M_PI,DBL_EPSILON) );
123  }
124 }
double notNullValue(std::uniform_real_distribution< double > &unif, std::default_random_engine &re)
std::uniform_real_distribution< double > unif(-1000000., 1000000.)
Aim: Implements basic operations that will be used in Point and Vector classes.
Definition: PointVector.h:165
REQUIRE(domain.isInside(aPoint))
RealPoint notNullRealPoint(std::uniform_real_distribution< double > &unif, std::default_random_engine &re)
Point center(const std::vector< Point > &points)
SECTION("Testing constant forward iterators")
std::default_random_engine re