1 // This is brl/bseg/sdet/tests/test_sel.cxx
2 
3 #include <iostream>
4 #include <cmath>
5 #include <vector>
6 #include <cstdlib>
7 #include <string>
8 #include "testlib/testlib_test.h"
9 #ifdef _MSC_VER
10 #  include "vcl_msvc_warnings.h"
11 #endif
12 #include "vnl/vnl_math.h"
13 #include <sdet/sdet_curve_model.h>
14 #include <sdet/sdet_sel.h>
15 
16 //: Test the symbolic edge linker methods
MAIN(test_sel)17 MAIN( test_sel )
18 {
19   double tolerance = 1e-3;
20   bool test_passed = true;
21 
22   //*******************************************************
23   START (" Test sdet_edgel class");
24   //sdet_edgel constructors
25   sdet_edgel* eA = new sdet_edgel(vgl_point_2d<double>(0.0,0.0), 0.0);
26   sdet_edgel* eB = new sdet_edgel(vgl_point_2d<double>(1.0,0.0), 0.0);
27   sdet_edgel* eC = new sdet_edgel(vgl_point_2d<double>(2.0,0.0), 0.0);
28 
29   TEST("Constructor", &eA!=nullptr, true);
30 
31   //*******************************************************
32   START (" Test sdet_ES_curve_model class");
33 
34   //sdet_ES_curve_model constructors
35   sdet_ES_curve_model es1(eA, eB, eA, 0.1, 0.1, 1.0, 0.5, 0.5, false);
36   sdet_ES_curve_model es2(eA, eB, eB, 0.1, 0.1, 1.0, 0.5, 0.5, false);
37   sdet_ES_curve_model es3(eA, eC, eA, 0.1, 0.1, 1.0, 0.5, 0.5, false);
38 
39   //ground truth curve bundle eA-eB at eA
40   const double k_range_gt[] = {-0.0008, -0.7983, 0.0008, 0.7983 };
41   const double gamma_range_gt[] = {-0.5942, 1.7910, 0.5942, -1.7910};
42 
43   for (unsigned i=0; i<es1.cv_bundle[0].size(); i++){
44     test_passed = test_passed && std::fabs(es1.cv_bundle[0][i].x() - k_range_gt[i])<tolerance
45                               && std::fabs(es1.cv_bundle[0][i].y() - gamma_range_gt[i])<tolerance;
46   }
47   TEST("Compute curve bundle from(eA-eB) at eA", test_passed, true);
48 
49   const double k_range_gt2[] = {-0.0008, 0.7984, 0.0008, -0.7984 };
50   const double gamma_range_gt2[] = {0.5941, 1.7910, -0.5941, -1.7910};
51 
52   for (unsigned i=0; i<es2.cv_bundle[0].size(); i++){
53     test_passed = test_passed && std::fabs(es2.cv_bundle[0][i].x() - k_range_gt2[i])<tolerance
54                               && std::fabs(es2.cv_bundle[0][i].y() - gamma_range_gt2[i])<tolerance;
55   }
56   TEST("Compute curve bundle from(eA-eB) at eB", test_passed, true);
57 
58   //ground truth eA-eC
59   const double k_range_gt3[] = { 0.0498, -0.2496, -0.0498, 0.2496 };
60   const double gamma_range_gt3[] = {-0.1492, 0.2990, 0.1492, -0.2990};
61 
62   for (unsigned i=0; i<es3.cv_bundle[0].size(); i++){
63     test_passed = test_passed && std::fabs(es3.cv_bundle[0][i].x() - k_range_gt3[i])<tolerance
64                               && std::fabs(es3.cv_bundle[0][i].y() - gamma_range_gt3[i])<tolerance;
65   }
66   TEST("Compute curve bundle from a pair of edgels(eA-eC)", test_passed, true);
67 
68 
69   START (" Test sdet_sel class");
70 
71   //construct an edgemap first
72   sdet_edgemap_sptr edgemap = new sdet_edgemap(100, 100);
73   edgemap->insert(eA);
74   edgemap->insert(eB);
75   edgemap->insert(eC);
76 
77   //construct other required classes
78   sdet_curvelet_map cvlet_map;
79   sdet_edgel_link_graph edge_link_graph;
80   sdet_curve_fragment_graph curve_frag_graph;
81 
82   //sdet_sel constructors
83   sdet_sel<sdet_ES_curve_model> edge_linker(edgemap, cvlet_map, edge_link_graph, curve_frag_graph);
84 
85   TEST("Constructor", &edge_linker != nullptr, true);
86 
87   //*******************************************************
88 
89 
90   SUMMARY();
91 }
92