Chris@372
|
1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
|
Chris@372
|
2
|
Chris@372
|
3 #include "bqvec/VectorOps.h"
|
Chris@372
|
4 #include "bqvec/Allocators.h"
|
Chris@372
|
5
|
Chris@372
|
6 #define BOOST_TEST_DYN_LINK
|
Chris@372
|
7 #define BOOST_TEST_MAIN
|
Chris@372
|
8
|
Chris@372
|
9 #include <boost/test/unit_test.hpp>
|
Chris@372
|
10
|
Chris@372
|
11 #include <stdexcept>
|
Chris@372
|
12 #include <vector>
|
Chris@372
|
13
|
Chris@372
|
14 using namespace breakfastquay;
|
Chris@372
|
15
|
Chris@372
|
16 BOOST_AUTO_TEST_SUITE(TestAllocators)
|
Chris@372
|
17
|
Chris@372
|
18 #define COMPARE_ARRAY(a, b) \
|
Chris@372
|
19 for (int cmp_i = 0; cmp_i < (int)(sizeof(a)/sizeof(a[0])); ++cmp_i) { \
|
Chris@372
|
20 BOOST_CHECK_SMALL(a[cmp_i] - b[cmp_i], 1e-14); \
|
Chris@372
|
21 }
|
Chris@372
|
22
|
Chris@372
|
23 #define COMPARE_N(a, b, n) \
|
Chris@372
|
24 for (int cmp_i = 0; cmp_i < n; ++cmp_i) { \
|
Chris@372
|
25 BOOST_CHECK_SMALL(a[cmp_i] - b[cmp_i], 1e-14); \
|
Chris@372
|
26 }
|
Chris@372
|
27
|
Chris@372
|
28 BOOST_AUTO_TEST_CASE(alloc_dealloc)
|
Chris@372
|
29 {
|
Chris@372
|
30 double *v = allocate<double>(4);
|
Chris@372
|
31 v[0] = 0.1;
|
Chris@372
|
32 v[1] = 2.0;
|
Chris@372
|
33 v[2] = -0.3;
|
Chris@372
|
34 v[3] = 4.0;
|
Chris@372
|
35 double *e = allocate<double>(4);
|
Chris@372
|
36 e[0] = -0.3;
|
Chris@372
|
37 e[1] = 4.0;
|
Chris@372
|
38 e[2] = 0.1;
|
Chris@372
|
39 e[3] = 2.0;
|
Chris@372
|
40 v_fftshift(v, 4);
|
Chris@372
|
41 COMPARE_N(v, e, 4);
|
Chris@372
|
42 deallocate(v);
|
Chris@372
|
43 deallocate(e);
|
Chris@372
|
44 }
|
Chris@372
|
45
|
Chris@372
|
46 BOOST_AUTO_TEST_CASE(alloc_zero)
|
Chris@372
|
47 {
|
Chris@372
|
48 double *v = allocate_and_zero<double>(4);
|
Chris@372
|
49 BOOST_CHECK_EQUAL(v[0], 0.f);
|
Chris@372
|
50 BOOST_CHECK_EQUAL(v[1], 0.f);
|
Chris@372
|
51 BOOST_CHECK_EQUAL(v[2], 0.f);
|
Chris@372
|
52 BOOST_CHECK_EQUAL(v[3], 0.f);
|
Chris@372
|
53 deallocate(v);
|
Chris@372
|
54 }
|
Chris@372
|
55
|
Chris@372
|
56 BOOST_AUTO_TEST_CASE(alloc_dealloc_channels)
|
Chris@372
|
57 {
|
Chris@372
|
58 double **v = allocate_channels<double>(2, 4);
|
Chris@372
|
59 v[0][0] = 0.1;
|
Chris@372
|
60 v[0][1] = 2.0;
|
Chris@372
|
61 v[0][2] = -0.3;
|
Chris@372
|
62 v[0][3] = 4.0;
|
Chris@372
|
63 v[1][0] = -0.3;
|
Chris@372
|
64 v[1][1] = 4.0;
|
Chris@372
|
65 v[1][2] = 0.1;
|
Chris@372
|
66 v[1][3] = 2.0;
|
Chris@372
|
67 v_fftshift(v[0], 4);
|
Chris@372
|
68 COMPARE_N(v[0], v[1], 4);
|
Chris@372
|
69 deallocate_channels(v, 2);
|
Chris@372
|
70 }
|
Chris@372
|
71
|
Chris@372
|
72 BOOST_AUTO_TEST_CASE(stl)
|
Chris@372
|
73 {
|
Chris@372
|
74 std::vector<double, StlAllocator<double> > v;
|
Chris@372
|
75 v.push_back(0.1);
|
Chris@372
|
76 v.push_back(2.0);
|
Chris@372
|
77 v.push_back(-0.3);
|
Chris@372
|
78 v.push_back(4.0);
|
Chris@372
|
79 double e[] = { -0.3, 4.0, 0.1, 2.0 };
|
Chris@372
|
80 v_fftshift(v.data(), 4);
|
Chris@372
|
81 COMPARE_N(v.data(), e, 4);
|
Chris@372
|
82 }
|
Chris@372
|
83
|
Chris@372
|
84 BOOST_AUTO_TEST_SUITE_END()
|
Chris@372
|
85
|