13 #ifndef piecewise_superellipse_creator_test_suite_hpp
14 #define piecewise_superellipse_creator_test_suite_hpp
28 template<
typename data__>
96 std::cout <<
"figure(" << figno <<
");" << std::endl;
99 std::cout <<
"cp_x=[";
100 for (pp=0; pp<ns; ++pp)
104 for (i=0; i<=bez.degree(); ++i)
106 std::cout << bez.get_control_point(i).x();
112 std::cout << std::endl;
114 std::cout <<
"];" << std::endl;
116 std::cout <<
"cp_y=[";
117 for (pp=0; pp<ns; ++pp)
121 for (i=0; i<=bez.degree(); ++i)
123 std::cout << bez.get_control_point(i).y();
129 std::cout << std::endl;
131 std::cout <<
"];" << std::endl;
134 std::vector<data__> t(129);
135 for (i=0; i<static_cast<index_type>(t.size()); ++i)
137 t[i]=tmin+(tmax-tmin)*static_cast<data__>(i)/(t.size()-1);
141 std::cout <<
"curve_x=[";
142 for (i=0; i<static_cast<index_type>(t.size()); ++i)
144 std::cout << pc.
f(t[i]).x();
145 if (i<static_cast<index_type>(t.size()-1))
148 std::cout <<
"];" << std::endl;
150 std::cout <<
"curve_y=[";
151 for (i=0; i<static_cast<index_type>(t.size()); ++i)
153 std::cout << pc.
f(t[i]).y();
154 if (i<static_cast<index_type>(t.size()-1))
157 std::cout <<
"];" << std::endl;
159 std::cout <<
"setenv('GNUTERM', 'x11');" << std::endl;
160 std::cout <<
"plot(curve_x, curve_y, '-k');" << std::endl;
161 std::cout <<
"hold on;" << std::endl;
162 std::cout <<
"plot(cp_x', cp_y', '-or', 'MarkerFaceColor', [0 0 0]);" << std::endl;
163 std::cout <<
"hold off;" << std::endl;
168 superellipse_creator_type he_creator(4);
169 data_type dt0(3), dt1(2), dt2(3), dt3(2), t0(-1);
184 piecewise_curve_type pc;
187 TEST_ASSERT(he_creator.
create(pc));
191 TEST_ASSERT((f-fref).norm() < 5e-6);
200 piecewise_curve_type pc;
203 TEST_ASSERT(he_creator.
create(pc));
207 TEST_ASSERT((f-fref).norm() < 5e-6);
216 piecewise_curve_type pc;
219 TEST_ASSERT(he_creator.
create(pc));
223 TEST_ASSERT((f-fref).norm() < 5e-6);
233 superellipse_creator_type he_creator(4);
234 data_type dt0(3), dt1(2), dt2(3), dt3(2), t0(-1);
249 piecewise_curve_type pc;
252 TEST_ASSERT(he_creator.
create(pc));
254 fref << static_cast<data_type>(1.547913),
static_cast<data_type
>(1.903984), 0;
256 TEST_ASSERT((f-fref).norm() < 5e-6);
263 piecewise_curve_type pc;
266 TEST_ASSERT(he_creator.
create(pc));
268 fref << static_cast<data_type>(0.397104),
static_cast<data_type
>(1.058210), 0;
270 TEST_ASSERT((f-fref).norm() < 5e-6);
277 piecewise_curve_type pc;
278 he_creator.
set_exponents(static_cast<data_type>(1./5.), static_cast<data_type>(1./5.));
280 TEST_ASSERT(he_creator.
create(pc));
282 fref << static_cast<data_type>(0.134030),
static_cast<data_type
>(1.149813), 0;
284 TEST_ASSERT((f-fref).norm() < 5e-6);
291 piecewise_curve_type pc;
292 he_creator.
set_exponents(static_cast<data_type>(1.2), static_cast<data_type>(1.2));
294 TEST_ASSERT(he_creator.
create(pc));
296 fref << static_cast<data_type>(1.173693),
static_cast<data_type
>(1.617232), 0;
298 TEST_ASSERT((f-fref).norm() < 5e-6);
305 piecewise_curve_type pc;
308 TEST_ASSERT(he_creator.
create(pc));
310 fref << static_cast<data_type>(1.76445),
static_cast<data_type
>(1.897658), 0;
312 TEST_ASSERT((f-fref).norm() < 5e-6);
319 piecewise_curve_type pc;
320 he_creator.
set_exponents(static_cast<data_type>(1./3.), static_cast<data_type>(3.));
322 TEST_ASSERT(he_creator.
create(pc));
324 fref << static_cast<data_type>(1.1199889),
static_cast<data_type
>(1.604568), 0;
326 TEST_ASSERT((f-fref).norm() < 5e-6);
333 piecewise_curve_type pc;
334 he_creator.
set_exponents(static_cast<data_type>(3.), static_cast<data_type>(1./3.));
336 TEST_ASSERT(he_creator.
create(pc));
338 fref << static_cast<data_type>(1.149061),
static_cast<data_type
>(1.645629), 0;
340 TEST_ASSERT((f-fref).norm() < 5e-6);
351 superellipse_creator_type he_creator(4);
352 data_type dt0(3), dt1(2), dt2(3), dt3(2), t0(-1);
367 piecewise_curve_type pc;
370 TEST_ASSERT(he_creator.
create(pc));
372 fref << static_cast<data_type>(1.544666),
static_cast<data_type
>(1.904765), 0;
374 TEST_ASSERT((f-fref).norm() < 6e-6);
381 piecewise_curve_type pc;
384 TEST_ASSERT(he_creator.
create(pc));
386 fref << static_cast<data_type>(0.360349),
static_cast<data_type
>(1.00602), 0;
388 TEST_ASSERT((f-fref).norm() < 5e-6);
395 piecewise_curve_type pc;
396 he_creator.
set_exponents(static_cast<data_type>(1./5.), static_cast<data_type>(1./5.));
398 TEST_ASSERT(he_creator.
create(pc));
400 if (
typeid(data_type)==
typeid(float))
402 #if defined(_MSC_VER)
403 # if (!defined(_WIN64) && (_MSC_VER==1600))
404 fref << static_cast<data_type>(46.939301),
static_cast<data_type
>(3.475554), 0;
406 fref << static_cast<data_type>(47.022247),
static_cast<data_type
>(3.483002), 0;
408 #elif defined(__GNUC__) && defined(__clang__)
409 fref << static_cast<data_type>(47.022247),
static_cast<data_type
>(3.483002), 0;
410 #elif defined(__GNUC__) && !defined(__clang__)
411 fref << static_cast<data_type>(47.022247),
static_cast<data_type
>(3.483002), 0;
413 fref << static_cast<data_type>(47.022301),
static_cast<data_type
>(3.482945), 0;
418 fref << static_cast<data_type>(46.87239),
static_cast<data_type
>(3.468185), 0;
421 TEST_ASSERT((f-fref).norm() < 5e-6);
428 piecewise_curve_type pc;
429 he_creator.
set_exponents(static_cast<data_type>(1.2), static_cast<data_type>(1.2));
431 TEST_ASSERT(he_creator.
create(pc));
433 fref << static_cast<data_type>(1.168557),
static_cast<data_type
>(1.614039), 0;
435 TEST_ASSERT((f-fref).norm() < 5e-6);
442 piecewise_curve_type pc;
445 TEST_ASSERT(he_creator.
create(pc));
447 if (
typeid(data_type)==
typeid(float))
450 # if (!defined(_WIN64) && (_MSC_VER==1600))
451 fref << static_cast<data_type>(1.351444),
static_cast<data_type
>(2.2766607), 0;
453 fref << static_cast<data_type>(1.351675),
static_cast<data_type
>(2.2758243), 0;
456 fref << static_cast<data_type>(1.351337),
static_cast<data_type
>(2.2768044), 0;
461 fref << static_cast<data_type>(1.349747),
static_cast<data_type
>(2.277204), 0;
464 TEST_ASSERT((f-fref).norm() < 6e-6);
471 piecewise_curve_type pc;
472 he_creator.
set_exponents(static_cast<data_type>(1./3.), static_cast<data_type>(3.));
474 TEST_ASSERT(he_creator.
create(pc));
476 fref << static_cast<data_type>(1.203145),
static_cast<data_type
>(1.619022), 0;
478 TEST_ASSERT((f-fref).norm() < 5e-6);
485 piecewise_curve_type pc;
486 he_creator.
set_exponents(static_cast<data_type>(3.), static_cast<data_type>(1./3.));
488 TEST_ASSERT(he_creator.
create(pc));
490 fref << static_cast<data_type>(1.135717),
static_cast<data_type
>(1.623672), 0;
492 TEST_ASSERT((f-fref).norm() < 5e-6);
506 superellipse_creator_type he_creator(6);
507 data_type dt0(3), dt1(2), dt2(3), dt3(2), dt4(3), dt5(2), t0(-1);
524 piecewise_curve_type pc;
527 TEST_ASSERT(he_creator.
create(pc));
529 fref << static_cast<data_type>(1.819996),
static_cast<data_type
>(1.243964), 0;
531 TEST_ASSERT((f-fref).norm() < 5e-6);
540 piecewise_curve_type pc;
543 TEST_ASSERT(he_creator.
create(pc));
545 fref << static_cast<data_type>(1.019236),
static_cast<data_type
>(0.267005), 0;
547 TEST_ASSERT((f-fref).norm() < 5e-6);
556 piecewise_curve_type pc;
557 he_creator.
set_exponents(static_cast<data_type>(1./5.), static_cast<data_type>(1./5.));
559 TEST_ASSERT(he_creator.
create(pc));
561 fref << static_cast<data_type>(1.108429),
static_cast<data_type
>(0.525021), 0;
563 TEST_ASSERT((f-fref).norm() < 7e-6);
572 piecewise_curve_type pc;
573 he_creator.
set_exponents(static_cast<data_type>(1.2), static_cast<data_type>(1.2));
575 TEST_ASSERT(he_creator.
create(pc));
577 fref << static_cast<data_type>(1.530603),
static_cast<data_type
>(1.024579), 0;
579 TEST_ASSERT((f-fref).norm() < 5e-6);
588 piecewise_curve_type pc;
591 TEST_ASSERT(he_creator.
create(pc));
593 fref << static_cast<data_type>(1.926631),
static_cast<data_type
>(1.313695), 0;
595 TEST_ASSERT((f-fref).norm() < 5e-6);
604 piecewise_curve_type pc;
605 he_creator.
set_exponents(static_cast<data_type>(1./3.), static_cast<data_type>(3.));
607 TEST_ASSERT(he_creator.
create(pc));
609 fref << static_cast<data_type>(1.664021),
static_cast<data_type
>(1.092592), 0;
611 TEST_ASSERT((f-fref).norm() < 5e-6);
620 piecewise_curve_type pc;
621 he_creator.
set_exponents(static_cast<data_type>(3.), static_cast<data_type>(1./3.));
623 TEST_ASSERT(he_creator.
create(pc));
625 fref << static_cast<data_type>(1.333809),
static_cast<data_type
>(0.985460), 0;
627 TEST_ASSERT((f-fref).norm() < 5e-6);
637 superellipse_creator_type he_creator(6);
638 data_type dt0(3), dt1(2), dt2(3), dt3(2), dt4(3), dt5(2), t0(-1);
655 piecewise_curve_type pc;
658 TEST_ASSERT(he_creator.
create(pc));
660 fref << static_cast<data_type>(1.791588),
static_cast<data_type
>(1.333412), 0;
662 TEST_ASSERT((f-fref).norm() < 5e-6);
674 piecewise_curve_type pc;
677 TEST_ASSERT(he_creator.
create(pc));
679 fref << static_cast<data_type>(0.931743),
static_cast<data_type
>(0.302345), 0;
681 TEST_ASSERT((f-fref).norm() < 5e-6);
693 piecewise_curve_type pc;
694 he_creator.
set_exponents(static_cast<data_type>(1./5.), static_cast<data_type>(1./5.));
696 TEST_ASSERT(he_creator.
create(pc));
698 if (
typeid(data_type)==
typeid(float))
700 #if defined(_MSC_VER)
701 # if (!defined(_WIN64) && (_MSC_VER==1600))
702 fref << static_cast<data_type>(-23.633450),
static_cast<data_type
>(11.261473), 0;
704 fref << static_cast<data_type>(-23.633438),
static_cast<data_type
>(11.261538), 0;
706 #elif defined(__GNUC__) && defined(__clang__)
707 fref << static_cast<data_type>(-23.633438),
static_cast<data_type
>(11.261538), 0;
708 #elif defined(__GNUC__) && !defined(__clang__)// && defined(NDEBUG)
709 fref << static_cast<data_type>(-23.633438),
static_cast<data_type
>(11.261538), 0;
711 fref << static_cast<data_type>(-19.968788),
static_cast<data_type
>(9.096475), 0;
716 fref << static_cast<data_type>(-14.07074),
static_cast<data_type
>(6.209714), 0;
719 TEST_ASSERT((f-fref).norm() < 5e-6);
731 piecewise_curve_type pc;
732 he_creator.
set_exponents(static_cast<data_type>(1.2), static_cast<data_type>(1.2));
734 TEST_ASSERT(he_creator.
create(pc));
736 fref << static_cast<data_type>(1.471385),
static_cast<data_type
>(1.124692), 0;
738 TEST_ASSERT((f-fref).norm() < 5e-6);
750 piecewise_curve_type pc;
753 TEST_ASSERT(he_creator.
create(pc));
755 if (
typeid(data_type)==
typeid(float))
758 # if (!defined(_WIN64) && (_MSC_VER==1600))
759 fref << static_cast<data_type>(1.928875),
static_cast<data_type
>(1.436862), 0;
761 fref << static_cast<data_type>(1.930066),
static_cast<data_type
>(1.438622), 0;
764 fref << static_cast<data_type>(1.928891),
static_cast<data_type
>(1.436470), 0;
769 fref << static_cast<data_type>(1.935626),
static_cast<data_type
>(1.432817), 0;
772 TEST_ASSERT((f-fref).norm() < 6e-6);
784 piecewise_curve_type pc;
785 he_creator.
set_exponents(static_cast<data_type>(1./3.), static_cast<data_type>(3.));
787 TEST_ASSERT(he_creator.
create(pc));
789 fref << static_cast<data_type>(1.647633),
static_cast<data_type
>(1.190923), 0;
791 TEST_ASSERT((f-fref).norm() < 5e-6);
803 piecewise_curve_type pc;
804 he_creator.
set_exponents(static_cast<data_type>(3.), static_cast<data_type>(1./3.));
806 TEST_ASSERT(he_creator.
create(pc));
808 fref << static_cast<data_type>(1.314240),
static_cast<data_type
>(1.100464), 0;
810 TEST_ASSERT((f-fref).norm() < 5e-6);
823 superellipse_creator_type he_creator(8);
824 data_type dt0(3), dt1(2), dt2(3), dt3(2), dt4(2), dt5(1), dt6(2), dt7(1), t0(-1);
843 piecewise_curve_type pc;
846 TEST_ASSERT(he_creator.
create(pc));
848 fref << static_cast<data_type>(1.859473),
static_cast<data_type
>(1.104687), 0;
850 TEST_ASSERT((f-fref).norm() < 5e-6);
857 piecewise_curve_type pc;
860 TEST_ASSERT(he_creator.
create(pc));
862 fref << static_cast<data_type>(1.147263),
static_cast<data_type
>(0.188791), 0;
864 TEST_ASSERT((f-fref).norm() < 5e-6);
871 piecewise_curve_type pc;
872 he_creator.
set_exponents(static_cast<data_type>(1./5.), static_cast<data_type>(1./5.));
874 TEST_ASSERT(he_creator.
create(pc));
876 fref << static_cast<data_type>(1.209256),
static_cast<data_type
>(0.430468), 0;
878 TEST_ASSERT((f-fref).norm() < 5e-5);
885 piecewise_curve_type pc;
886 he_creator.
set_exponents(static_cast<data_type>(1.2), static_cast<data_type>(1.2));
888 TEST_ASSERT(he_creator.
create(pc));
890 fref << static_cast<data_type>(1.616116),
static_cast<data_type
>(0.869995), 0;
892 TEST_ASSERT((f-fref).norm() < 5e-6);
899 piecewise_curve_type pc;
902 TEST_ASSERT(he_creator.
create(pc));
904 fref << static_cast<data_type>(1.937615),
static_cast<data_type
>(1.281272), 0;
906 TEST_ASSERT((f-fref).norm() < 5e-6);
913 piecewise_curve_type pc;
914 he_creator.
set_exponents(static_cast<data_type>(1./3.), static_cast<data_type>(3.));
916 TEST_ASSERT(he_creator.
create(pc));
918 fref << static_cast<data_type>(1.774508),
static_cast<data_type
>(0.938826), 0;
920 TEST_ASSERT((f-fref).norm() < 5e-6);
927 piecewise_curve_type pc;
928 he_creator.
set_exponents(static_cast<data_type>(3.), static_cast<data_type>(1./3.));
930 TEST_ASSERT(he_creator.
create(pc));
932 fref << static_cast<data_type>(1.407137),
static_cast<data_type
>(0.785128), 0;
934 TEST_ASSERT((f-fref).norm() < 5e-6);
945 superellipse_creator_type he_creator(8);
946 data_type dt0(3), dt1(2), dt2(3), dt3(2), dt4(2), dt5(1), dt6(2), dt7(1), t0(-1);
965 piecewise_curve_type pc;
968 TEST_ASSERT(he_creator.
create(pc));
970 fref << static_cast<data_type>(1.859616),
static_cast<data_type
>(1.104135), 0;
972 TEST_ASSERT((f-fref).norm() < 5e-6);
979 piecewise_curve_type pc;
980 he_creator.
set_exponents(static_cast<data_type>(1./2.), static_cast<data_type>(1./2.));
982 TEST_ASSERT(he_creator.
create(pc));
984 fref << static_cast<data_type>(1.148073),
static_cast<data_type
>(0.176278), 0;
986 TEST_ASSERT((f-fref).norm() < 5e-6);
993 piecewise_curve_type pc;
994 he_creator.
set_exponents(static_cast<data_type>(1./5.), static_cast<data_type>(1./5.));
996 TEST_ASSERT(he_creator.
create(pc));
998 if (
typeid(data_type)==
typeid(float))
1000 #if defined(_MSC_VER)
1001 # if (!defined(_WIN64) && (_MSC_VER==1600))
1002 fref << static_cast<data_type>(-1.200153),
static_cast<data_type
>(2.997783), 0;
1004 fref << static_cast<data_type>(-1.328213),
static_cast<data_type
>(3.102814), 0;
1006 #elif defined(__GNUC__) && defined(__clang__)
1007 fref << static_cast<data_type>(-1.328212),
static_cast<data_type
>(3.102814), 0;
1008 #elif defined(__GNUC__) && !defined(__clang__)
1009 fref << static_cast<data_type>(-1.328212),
static_cast<data_type
>(3.102814), 0;
1011 fref << static_cast<data_type>(-1.324945),
static_cast<data_type
>(3.099777), 0;
1016 fref << static_cast<data_type>(-1.799115),
static_cast<data_type
>(3.268398), 0;
1019 TEST_ASSERT((f-fref).norm() < 5e-6);
1026 piecewise_curve_type pc;
1027 he_creator.
set_exponents(static_cast<data_type>(1.2), static_cast<data_type>(1.2));
1029 TEST_ASSERT(he_creator.
create(pc));
1031 fref << static_cast<data_type>(1.615210),
static_cast<data_type
>(0.869275), 0;
1033 TEST_ASSERT((f-fref).norm() < 5e-6);
1040 piecewise_curve_type pc;
1043 TEST_ASSERT(he_creator.
create(pc));
1045 if (
typeid(data_type)==
typeid(float))
1048 # if (!defined(_WIN64) && (_MSC_VER==1600))
1049 fref << static_cast<data_type>(1.970994),
static_cast<data_type
>(1.330452), 0;
1051 fref << static_cast<data_type>(1.970389),
static_cast<data_type
>(1.330017), 0;
1054 fref << static_cast<data_type>(1.975022),
static_cast<data_type
>(1.332086), 0;
1059 fref << static_cast<data_type>(1.971965),
static_cast<data_type
>(1.328557), 0;
1062 TEST_ASSERT((f-fref).norm() < 6e-6);
1069 piecewise_curve_type pc;
1070 he_creator.
set_exponents(static_cast<data_type>(1./3.), static_cast<data_type>(3.));
1072 TEST_ASSERT(he_creator.
create(pc));
1074 fref << static_cast<data_type>(1.822104),
static_cast<data_type
>(0.938021), 0;
1076 TEST_ASSERT((f-fref).norm() < 5e-6);
1083 piecewise_curve_type pc;
1084 he_creator.
set_exponents(static_cast<data_type>(3.), static_cast<data_type>(1./3.));
1086 TEST_ASSERT(he_creator.
create(pc));
1088 fref << static_cast<data_type>(1.423473),
static_cast<data_type
>(0.786496), 0;
1090 TEST_ASSERT((f-fref).norm() < 5e-6);
virtual bool create(piecewise< bezier, data_type, dim__, tolerance_type > &pc) const
Definition: piecewise_superellipse_creator.hpp:144
void AddTests(const double &)
Definition: piecewise_superellipse_creator_test_suite.hpp:54
void set_max_degree(const index_type &md)
Definition: piecewise_superellipse_creator.hpp:135
tolerance_type tol
Definition: piecewise_superellipse_creator_test_suite.hpp:40
void set_segment_dt(const data_type &dtt, const index_type &i)
Definition: piecewise_creator_base.hpp:64
tol__ tolerance_type
Definition: piecewise.hpp:278
eli::geom::curve::piecewise< eli::geom::curve::bezier, data__, 3 > piecewise_curve_type
Definition: piecewise_superellipse_creator_test_suite.hpp:32
data__ data_type
Definition: piecewise.hpp:276
piecewise_curve_type::point_type point_type
Definition: piecewise_superellipse_creator_test_suite.hpp:34
data_type get_parameter_min() const
Definition: piecewise.hpp:366
eli::geom::curve::piecewise_superellipse_creator< data__, 3, tolerance_type > superellipse_creator_type
Definition: piecewise_superellipse_creator_test_suite.hpp:38
curve_type::index_type index_type
Definition: piecewise.hpp:271
index_type number_segments() const
Definition: piecewise.hpp:419
void set_exponents(const data_type &mm, const data_type &nn)
Definition: piecewise_superellipse_creator.hpp:106
void create_6seg3deg_test()
Definition: piecewise_superellipse_creator_test_suite.hpp:504
Definition: piecewise.hpp:244
piecewise_superellipse_creator_test_suite()
Definition: piecewise_superellipse_creator_test_suite.hpp:78
curve__< data__, dim__, tol__ > curve_type
Definition: piecewise.hpp:270
void create_8seg3deg_test()
Definition: piecewise_superellipse_creator_test_suite.hpp:821
void octave_print(int figno, const piecewise_curve_type &pc) const
Definition: piecewise_superellipse_creator_test_suite.hpp:87
piecewise_curve_type::curve_type curve_type
Definition: piecewise_superellipse_creator_test_suite.hpp:33
void create_6seg6deg_test()
Definition: piecewise_superellipse_creator_test_suite.hpp:635
void AddTests(const long double &)
Definition: piecewise_superellipse_creator_test_suite.hpp:65
void create_4seg6deg_test()
Definition: piecewise_superellipse_creator_test_suite.hpp:349
void create_8seg6deg_test()
Definition: piecewise_superellipse_creator_test_suite.hpp:943
data_type get_parameter_max() const
Definition: piecewise.hpp:374
void create_4seg3deg_test()
Definition: piecewise_superellipse_creator_test_suite.hpp:231
void set_axis(const data_type &aa, const data_type &bb)
Definition: piecewise_superellipse_creator.hpp:77
point_type f(const data_type &t) const
Definition: piecewise.hpp:1732
Definition: piecewise_superellipse_creator_test_suite.hpp:29
void AddTests(const float &)
Definition: piecewise_superellipse_creator_test_suite.hpp:43
void create_degenerate_test()
Definition: piecewise_superellipse_creator_test_suite.hpp:166
error_code get(curve_type &curve, const index_type &index) const
Definition: piecewise.hpp:729
piecewise_curve_type::index_type index_type
Definition: piecewise_superellipse_creator_test_suite.hpp:36
Definition: piecewise_superellipse_creator.hpp:63
curve_type::point_type point_type
Definition: piecewise.hpp:272
piecewise_curve_type::data_type data_type
Definition: piecewise_superellipse_creator_test_suite.hpp:35
void set_t0(const data_type &tt0)
Definition: piecewise_creator_base.hpp:61
~piecewise_superellipse_creator_test_suite()
Definition: piecewise_superellipse_creator_test_suite.hpp:82
piecewise_curve_type::tolerance_type tolerance_type
Definition: piecewise_superellipse_creator_test_suite.hpp:37