$extrastylesheet
Olena  User documentation 2.1
An Image Processing Platform
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
l2.cc
1 // Copyright (C) 2007, 2008, 2009 EPITA Research and Development Laboratory (LRDE)
2 //
3 // This file is part of Olena.
4 //
5 // Olena is free software: you can redistribute it and/or modify it under
6 // the terms of the GNU General Public License as published by the Free
7 // Software Foundation, version 2 of the License.
8 //
9 // Olena is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 // General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with Olena. If not, see <http://www.gnu.org/licenses/>.
16 //
17 // As a special exception, you may use this file as part of a free
18 // software project without restriction. Specifically, if other files
19 // instantiate templates or use macros or inline functions from this
20 // file, or you compile this file and link it with other files to produce
21 // an executable, this file does not by itself cause the resulting
22 // executable to be covered by the GNU General Public License. This
23 // exception does not however invalidate any other reasons why the
24 // executable file might be covered by the GNU General Public License.
25 
26 #include <cmath>
27 #include <cassert>
28 
29 #include <tests/norm/common.hh>
30 
31 #include <mln/algebra/vec.hh>
32 #include <mln/norm/l2.hh>
33 
34 
35 namespace test
36 {
37  template <typename V, typename S>
38  void
39  check_l2_norm_and_distance(const V& vec1, const V& vec2, const S& ref_val)
40  {
41  // Pointer on mln::norm::l2.
42  typedef mln_sum_(int) (*l2_t)(const V&);
43  l2_t l2 = mln::norm::l2;
44 
45  test::check_norm(l2, vec1, vec2);
46 
47  // Pointer on mln::norm::l2_distance.
48  typedef mln_sum_(int) (*l2_distance_t)(const V&, const V&);
49  l2_distance_t l2_distance = mln::norm::l2_distance;
50 
51  test::check_distance(l2_distance, vec1, vec2, ref_val);
52  }
53 }
54 
55 
56 int main()
57 {
58  typedef mln::algebra::vec<3, int> vec_t;
59 
60  // Reference value.
61  float d = std::sqrt(float((4 - 2) * (4 - 2) +
62  (1 + 2) * (1 + 2) +
63  (0 - 3) * (0 - 3)));
64 
65  // Tests using mln::algebra::vec.
66  vec_t t, u;
67  t.set(2, -2, 3);
68  u.set(4, 1, 0);
70 
71  // Tests using plain arrays.
72  int v[] = {2, -2, 3};
73  int w[] = {4, 1, 0};
75 }