helpertest.cc 6.49 KB
Newer Older
thomas.forbriger's avatar
thomas.forbriger committed
1
2
3
4
5
/*! \file helpertest.cc
 * \brief test helpers like iterator, subarray and slice (implementation)
 * 
 * ----------------------------------------------------------------------------
 * 
thomas.forbriger's avatar
thomas.forbriger committed
6
 * $Id: helpertest.cc,v 1.5 2005-04-28 15:01:47 tforb Exp $
thomas.forbriger's avatar
thomas.forbriger committed
7
8
9
10
11
12
13
14
15
 * \author Thomas Forbriger
 * \date 23/12/2002
 * 
 * test helpers like iterator, subarray and slice (implementation)
 * 
 * Copyright (c) 2002 by Thomas Forbriger (IMG Frankfurt) 
 * 
 * REVISIONS and CHANGES 
 *  - 23/12/2002   V1.0   Thomas Forbriger
thomas.forbriger's avatar
thomas.forbriger committed
16
17
 *  - 28/12/2002   V1.1   (thof)
 *                        - new term for containers of const elements
18
19
20
21
22
 *  - 29/12/2002   V1.2   (thof)
 *                        - new subarray function
 *                        - test subarray of ConstArray
 *                        - new slice function
 *                        - test slice of ConstArray
23
24
 *                        - now no resolution conflicts with const containers
 *                          are experienced anymore
thomas.forbriger's avatar
thomas.forbriger committed
25
26
27
28
 * 
 * ============================================================================
 */
#define AFF_HELPERTEST_CC_VERSION \
29
  "AFF_HELPERTEST_CC   V1.2"
thomas.forbriger's avatar
thomas.forbriger committed
30
#define AFF_HELPERTEST_CC_CVSID \
thomas.forbriger's avatar
thomas.forbriger committed
31
  "$Id: helpertest.cc,v 1.5 2005-04-28 15:01:47 tforb Exp $"
thomas.forbriger's avatar
thomas.forbriger committed
32
33
34
35
36

/*! \example tests/helpertest.cc
 *
 * Test helper classes.
 *
thomas.forbriger's avatar
thomas.forbriger committed
37
38
39
 * This test program gives an example of the usage of the following classes,
 * functions, and preprocessor macros:
 *   - aff::Iterator
40
41
 *   - aff::util::Subarray
 *   - aff::subarray
42
43
 *   - aff::utl::Slice
 *   - aff::slice
thomas.forbriger's avatar
thomas.forbriger committed
44
45
46
47
48
49
50
51
 *   - aff::Array
 *   - aff::ConstArray
 *   - aff::Shaper
 *   - aff::dump
 *   - aff::dump_array
 *   - #DUMP
 *   - #CODE
 *
thomas.forbriger's avatar
thomas.forbriger committed
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
 * \sa tests/helpertest.cc
 */

#include <aff/array.h>
#include <aff/dump.h>
#include <aff/shaper.h>
#include <aff/iterator.h>
#include <aff/subarray.h>
#include <aff/slice.h>

using std::cout;
using std::endl;
using namespace aff;

/*----------------------------------------------------------------------*/

//! print headline
void section(const char* s, const char l='-')
{
  cout << endl << s << endl;
  const char* p=s;
  while (*p) { cout << l; ++p; }
  cout << endl;
}

/*----------------------------------------------------------------------*/

//! test for passing subarrays and slices
template<class T>
thomas.forbriger's avatar
thomas.forbriger committed
81
void printarray(const ConstArray<T>& array)
thomas.forbriger's avatar
thomas.forbriger committed
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
{
  cout << endl;
  cout << "Received array in function:" << endl;
  dump_array(array);
}

/*======================================================================*/

//! test helper classes
int main()
{
  cout << AFF_HELPERTEST_CC_VERSION << endl;
  cout << AFF_HELPERTEST_CC_CVSID << endl;

  section("Preparing test array");
  CODE( Array<int> A(Shaper(-2,2)(-3,3)) );
  CODE( dump_array(A) );

  section("Tests for class Iterator", '=');
  {
thomas.forbriger's avatar
thomas.forbriger committed
102
    CODE(int i=0);
thomas.forbriger's avatar
thomas.forbriger committed
103
104
105
    CODE(for( Iterator<Array<int> > I(A); I.valid(); ++I) 
         { *I=i; i++; });
    CODE( dump_array(A) );
106
    CODE( ConstArray<int> CA(A.copyout()) );
107
108
109
    CODE( i=1);
    CODE(for( Iterator<ConstArray<int> > I(CA); I.valid(); ++I) 
         { cout << i << ", " << *I << endl; i++; });
thomas.forbriger's avatar
thomas.forbriger committed
110
  }
111
112

  CODE( ConstArray<int> OrigA(A.copyout()) );
thomas.forbriger's avatar
thomas.forbriger committed
113
  
114
115
  /*----------------------------------------------------------------------*/

thomas.forbriger's avatar
thomas.forbriger committed
116
117
  section("Tests for class Subarray", '=');
  {
118
119
120
121
122
123
124
125
126
127
128
129
130
131
    section("First mode: Use a Subarray object just for initialization",'.');
    CODE(Array<int> B=aff::util::Subarray<Array<int> >(A)(-1,1)(-2,2));
    CODE( dump_array(B) );
    CODE(B=-5);
    CODE( dump_array(A) );
    // you must explicitely create an array through member function array()
    CODE(printarray(aff::util::Subarray<Array<int> >(A)(-2,0)(-3,0).array()));
  }
  
  section("Tests of subarray function", '-');
  {
    CODE( A.copyin(OrigA) );
    section("First mode: Use a Subarray object just for initialization",'.');
    CODE(Array<int> B=subarray(A)(-1,1)(-2,2));
thomas.forbriger's avatar
thomas.forbriger committed
132
133
134
    CODE( dump_array(B) );
    CODE(B=-5);
    CODE( dump_array(A) );
135
136
137
138
    section("Second mode: Create a Subarray object to which you can assign",
            '.');
    CODE(subarray(A)()(1,2)=100);
    CODE(subarray(A)(1,1)=-200);
thomas.forbriger's avatar
thomas.forbriger committed
139
140
    CODE( dump_array(A) );
    // you must explicitely create an array through member function array()
141
142
143
144
145
146
147
148
149
150
    CODE(printarray(subarray(A)(-2,0)(-3,0).array()));
  }

  section("Test for subarray of ConstArray",'-');
  {
    CODE( dump_array(OrigA) );
    CODE(ConstArray<int> B=subarray(OrigA)(-1,1)(-2,2));
    CODE( dump_array(B) );
    // you must explicitely create an array through member function array()
    CODE(printarray(subarray(OrigA)(-2,0)(-3,0).array()));
thomas.forbriger's avatar
thomas.forbriger committed
151
152
  }
  
153
154
  /*----------------------------------------------------------------------*/

thomas.forbriger's avatar
thomas.forbriger committed
155
156
  section("Tests for class Slice", '=');
  {
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
    CODE( A.copyin(OrigA) );
    section("First mode: Use a Slice object just for initialization",'.');
    CODE(Array<int> B=aff::util::Slice<Array<int> >(A)(1,-1));
    CODE( dump_array(B) );
    CODE(B=555);
    CODE( dump_array(A) );
    // you must explicitely create an array through member function array()
    CODE(printarray(aff::util::Slice<Array<int> >(A)(-2).array()));
  }

  section("Test slice function", '-');
  {
    CODE( A.copyin(OrigA) );
    section("First mode: Use a Slice object just for initialization",'.');
    CODE(Array<int> B=slice(A)(1,-1));
thomas.forbriger's avatar
thomas.forbriger committed
172
173
174
    CODE( dump_array(B) );
    CODE(B=555);
    CODE( dump_array(A) );
175
176
177
178
    section("Second mode: Create a Slice object to which you can assign",
            '.');
    CODE(slice(A)()(1)=666);
    CODE(slice(A)(0)=-777);
thomas.forbriger's avatar
thomas.forbriger committed
179
180
    CODE( dump_array(A) );
    // you must explicitely create an array through member function array()
181
    CODE(printarray(slice(A)(-2).array()));
thomas.forbriger's avatar
thomas.forbriger committed
182
183
  }

184
185
186
187
188
189
190
191
192
193
194
  section("Test slice of ConstArray",'-');
  {
    CODE( dump_array(OrigA) );
    CODE(ConstArray<int> B=slice(OrigA)(1,-1));
    CODE( dump_array(B) );
    // you must explicitely create an array through member function array()
    CODE(printarray(slice(OrigA)(-2).array()));
  }

  /*----------------------------------------------------------------------*/

thomas.forbriger's avatar
thomas.forbriger committed
195
196
197
198
199
  section("Mixed tests", '=');

  section("Iterator on a Subarray");
  {
    CODE(int i=501);
200
    CODE(Array<int> B=subarray(A)(-1,1)(-2,2));
thomas.forbriger's avatar
thomas.forbriger committed
201
202
203
204
205
206
207
208
    CODE(for( Iterator<Array<int> > I(B); I.valid(); ++I) 
         { *I=i; i++; });
    CODE( dump_array(A) );
  }

  section("Iterator on a Slice");
  {
    CODE(int i=-801);
209
    CODE(Array<int> B=slice(A)(1));
thomas.forbriger's avatar
thomas.forbriger committed
210
211
212
213
214
215
216
    CODE(for( Iterator<Array<int> > I(B); I.valid(); ++I) 
         { *I=i; i++; });
    CODE( dump_array(A) );
  }

  section("Extract copy of subarray");
  {
217
    CODE(Array<int> B=subarray(A)(-1,1)(-1,1));
thomas.forbriger's avatar
thomas.forbriger committed
218
219
220
221
222
223
224
    CODE(dump_array(B));
    CODE(Array<int> C=B.copyout());
    CODE(dump_array(C));
  }
}

/* ----- END OF helpertest.cc ----- */