Circular_arc_3 (beginning of it) + Fixing Warning

This commit is contained in:
Pedro Machado Manhaes de Castro 2006-08-10 14:58:34 +00:00
parent d44480dd0d
commit f7c9d94fd4
1 changed files with 86 additions and 0 deletions

View File

@ -198,7 +198,92 @@ void _test_line_arc_equal(SK sk) {
} }
} }
} }
}
template <class SK>
void _test_circular_arc_equal(SK sk) {
typedef typename SK::RT RT;
typedef typename SK::FT FT;
typedef typename SK::Root_of_2 Root_of_2;
typedef typename SK::Circular_arc_point_3 Circular_arc_point_3;
typedef typename SK::Circular_arc_3 Circular_arc_3;
typedef typename SK::Point_3 Point_3;
typedef typename SK::Plane_3 Plane_3;
typedef typename SK::Circle_3 Circle_3;
typedef typename SK::Sphere_3 Sphere_3;
typedef typename SK::Algebraic_kernel AK;
typedef typename SK::Get_equation Get_equation;
typedef typename SK::Equal_3 Equal_3;
typedef typename SK::Construct_circle_3 Construct_circle_3;
typedef typename SK::Construct_sphere_3 Construct_sphere_3;
typedef typename SK::Construct_circular_arc_3 Construct_circular_arc_3;
typedef typename SK::Polynomials_for_circle_3 Polynomials_for_circle_3;
typedef typename AK::Polynomial_for_spheres_2_3 Polynomial_for_spheres_2_3;
typedef typename AK::Polynomial_1_3 Polynomial_1_3;
typedef typename AK::Polynomials_for_line_3 Polynomials_for_line_3;
typedef typename AK::Root_for_spheres_2_3 Root_for_spheres_2_3;
Equal_3 theEqual_3 = sk.equal_3_object();
Get_equation theGet_equation = sk.get_equation_object();
Construct_circle_3 theConstruct_circle_3 = sk.construct_circle_3_object();
Construct_sphere_3 theConstruct_sphere_3 = sk.construct_sphere_3_object();
Construct_circular_arc_3 theConstruct_circular_arc_3 = sk.construct_circular_arc_3_object();
CGAL::Random generatorOfgenerator;
int random_seed = generatorOfgenerator.get_int(0, 123456);
CGAL::Random theRandom(random_seed);
int random_max = 127;
int random_min = -127;
std::cout << "Testing Equal_3 for Circular_arc_3..." << std::endl;
for(int i=0; i<100; i++) {
int a,b,c,d,u,v,r;
FT x,y,z;
do {
a = theRandom.get_int(random_min,random_max);
b = theRandom.get_int(random_min,random_max);
c = theRandom.get_int(random_min,random_max);
d = theRandom.get_int(random_min,random_max);
} while((a == 0) && (b == 0) && (c == 0));
u = theRandom.get_int(random_min,random_max);
v = theRandom.get_int(random_min,random_max);
do {
r = theRandom.get_int(random_min,random_max);
} while(r <= 0);
if(a != 0) {
x = FT(-(b*u + c*v + d),a);
y = FT(u);
z = FT(v);
} else if(b != 0) {
x = FT(u);
y = FT(-(a*u + c*v + d),b);
z = FT(v);
} else {
x = FT(u);
y = FT(v);
z = FT(-(a*u + b*v + d),c);
}
const Plane_3 plane = Plane_3(a,b,c,d);
const Plane_3 plane2 = Plane_3(2*a,2*b,2*c,2*d);
const FT sqr = FT(r);
const Point_3 p = Point_3(x,y,z);
const Polynomials_for_circle_3 pfc =
std::make_pair(Polynomial_for_spheres_2_3(x,y,z,r),
Polynomial_1_3(a,b,c,d));
Circle_3 circle3 = theConstruct_circle_3(pfc);
Circle_3 circle = theConstruct_circle_3(p,sqr,plane);
Circular_arc_3 circle_arc3 = theConstruct_circular_arc_3(circle3);
Circular_arc_3 circle_arc = theConstruct_circular_arc_3(circle);
Circle_3 circle2 = theConstruct_circle_3(p,sqr,plane2);
Circular_arc_3 circle_arc2 = theConstruct_circular_arc_3(circle2);
assert(theEqual_3(circle_arc,circle_arc2));
assert(theEqual_3(circle_arc,circle_arc3));
Circular_arc_3 cother = circle_arc2;
assert(theEqual_3(circle_arc,cother));
assert(cother.rep().is_full());
// When the !if_full(), we use the compare of circular_arc_point, already tested
}
} }
template <class SK> template <class SK>
@ -487,6 +572,7 @@ void _test_spherical_kernel_predicates(SK sk)
_test_circular_arc_point_equal(sk); _test_circular_arc_point_equal(sk);
_test_circle_equal(sk); _test_circle_equal(sk);
_test_line_arc_equal(sk); _test_line_arc_equal(sk);
_test_circular_arc_equal(sk);
_test_has_on_predicate(sk); _test_has_on_predicate(sk);
_test_do_overlap_predicate(sk); _test_do_overlap_predicate(sk);
std::cout << "All tests on predicates are OK." << std::endl; std::cout << "All tests on predicates are OK." << std::endl;