1 // This is mul/vil3d/tests/test_algo_structuring_element.cxx
2 #include <iostream>
3 #include "testlib/testlib_test.h"
4 #ifdef _MSC_VER
5 #  include "vcl_msvc_warnings.h"
6 #endif
7 #include <vil3d/algo/vil3d_structuring_element.h>
8 
test_algo_structuring_element()9 static void test_algo_structuring_element()
10 {
11   std::cout << "***********************************\n"
12            << " Testing vil3d_structuring_element\n"
13            << "***********************************\n";
14 
15   int n = 5;
16   std::vector<int> px(n),py(n),pz(n);
17   for (int i=0;i<n;++i)
18   {
19     px[i]=i; py[i]=i+3; pz[i]=i-2;
20   }
21 
22   vil3d_structuring_element se(px,py,pz);
23 
24   std::cout<<"Element: "<<se<<std::endl;
25 
26   TEST("min_i()",se.min_i(),0);
27   TEST("max_i()",se.max_i(),n-1);
28   TEST("min_j()",se.min_j(),3);
29   TEST("max_j()",se.max_j(),n+2);
30   TEST("min_k()",se.min_k(),-2);
31   TEST("max_k()",se.max_k(),n-3);
32 
33   se.set_to_sphere(1.1);
34   TEST("Number of elements in sphere",se.p_i().size(),7);
35 
36   se.set_to_sphere_noniso(1.6,1.0,1.5,1.0);
37   TEST("Number of elements in non-iso (1x1.5x1) sphere",se.p_i().size(),11);
38 
39   se.set_to_sphere_noniso(1.9,1.0,1.5,1.0);
40   TEST("Number of elements in non-iso (1x1.5x1) sphere",se.p_i().size(),19);
41 
42   std::cout<<"set_to_circle_i():\n";
43   se.set_to_circle_i(1.1);
44   TEST("Number of elements in circle",se.p_i().size(),5);
45   bool plane_i_ok = ( se.min_i() == 0 && se.max_i() == 0 );
46   TEST("Circle in j,k plane",plane_i_ok,true);
47 
48   std::cout<<"set_to_circle_j():\n";
49   se.set_to_circle_j(1.1);
50   TEST("Number of elements in circle",se.p_j().size(),5);
51   bool plane_j_ok = ( se.min_j() == 0 && se.max_j() == 0 );
52   TEST("Circle in i,k plane",plane_j_ok,true);
53 
54   std::cout<<"set_to_circle_k():\n";
55   se.set_to_circle_k(1.1);
56   TEST("Number of elements in circle",se.p_k().size(),5);
57   bool plane_k_ok = ( se.min_k() == 0 && se.max_k() == 0 );
58   TEST("Circle in i,j plane",plane_k_ok,true);
59 
60 
61   std::cout<<"set_to_line_i():\n";
62   se.set_to_line_i(-2,7);
63   TEST("Number of elements",se.p_i().size(),10);
64   TEST("min_i()",se.min_i(),-2);
65   TEST("max_i()",se.max_i(),7);
66   TEST("min_j()",se.min_j(),0);
67   TEST("max_j()",se.max_j(),0);
68   TEST("min_k()",se.min_k(),0);
69   TEST("max_k()",se.max_k(),0);
70 
71   std::cout<<"set_to_line_j():\n";
72   se.set_to_line_j(-1,6);
73   TEST("Number of elements",se.p_i().size(),8);
74   TEST("min_i()",se.min_i(),0);
75   TEST("max_i()",se.max_i(),0);
76   TEST("min_j()",se.min_j(),-1);
77   TEST("max_j()",se.max_j(),6);
78   TEST("min_k()",se.min_k(),0);
79   TEST("max_k()",se.max_k(),0);
80 
81   std::cout<<"set_to_line_k():\n";
82   se.set_to_line_k(-3,8);
83   TEST("Number of elements",se.p_i().size(),12);
84   TEST("min_i()",se.min_i(),0);
85   TEST("max_i()",se.max_i(),0);
86   TEST("min_j()",se.min_j(),0);
87   TEST("max_j()",se.max_j(),0);
88   TEST("min_k()",se.min_k(),-3);
89   TEST("max_k()",se.max_k(),8);
90 }
91 
92 TESTMAIN(test_algo_structuring_element);
93