$extrastylesheet
Olena  User documentation 2.1
An Image Processing Platform
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
histo/compute.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 <iterator>
27 #include <sstream>
28 
29 #include <mln/core/image/image2d.hh>
30 #include <mln/value/int_u8.hh>
31 #include <mln/value/int_s.hh>
32 
33 #include <mln/debug/iota.hh>
34 #include <mln/debug/println.hh>
35 #include <mln/accu/histo.hh>
36 #include <mln/histo/compute.hh>
37 
38 #include <mln/opt/at.hh>
39 
40 
41 int main()
42 {
43  using namespace mln;
44  using value::int_u8;
45 
46  // Test on 'bool'.
47  {
49 
50  for (unsigned i = 0; i < 5; ++i)
51  h.take(false);
52  for (unsigned i = 0; i < 2; ++i)
53  h.take(true);
54  h.untake(true);
55 
56  mln_assertion(h[0] * 10 + h[1] == 51);
57  mln_assertion(h(false) * 10 + h(true) == 51);
58  }
59 
60  // Test on 'int_u8'.
61  {
62  image2d<int_u8> ima(3, 3);
63  debug::iota(ima);
64  opt::at(ima, 0,0) = 2;
65 
67  std::ostringstream oss;
68  oss << h;
69  mln_assertion(oss.str() == "2:2 3:1 4:1 5:1 6:1 7:1 8:1 9:1 ");
70 
71  int_u8 i = 2;
72  mln_assertion(h(i) == 2);
73  }
74 
75  // Test on 'int_s5'; the value set is { -15, .., -1, 0, 1, .., 15 }
76  // the corresponding indices are: 0 .. 14 15 16 .. 30
77  {
78  typedef value::int_s<5> int_s5;
79  image2d<int_s5> ima(3, 3);
80  debug::iota(ima);
81 
83  mln_assertion(h.vset().nvalues() == 31);
84 
85  for (unsigned i = 0; i <= 15; ++i) // values from -15 to 0
86  mln_assertion(h[i] == 0);
87  for (unsigned i = 25; i <= 30; ++i) // values from 10 to 15
88  mln_assertion(h[i] == 0);
89  }
90 
91 }