FLAME  devel
 All Classes Functions Variables Typedefs Enumerations Pages
test_util.cpp
1 #define BOOST_TEST_MODULE config
2 #define BOOST_TEST_DYN_LINK
3 #include <boost/test/unit_test.hpp>
4 
5 #include <boost/numeric/ublas/io.hpp>
6 
7 #include "flame/util.h"
8 
9 BOOST_AUTO_TEST_CASE(parse_table_empty)
10 {
11  std::istringstream strm;
12 
13  numeric_table tbl;
14  tbl.read(strm);
15 
16  BOOST_CHECK_EQUAL(tbl.table.size1(), 0);
17  BOOST_CHECK_EQUAL(tbl.table.size2(), 0);
18  BOOST_CHECK_EQUAL(tbl.colnames.size(), 0);
19 }
20 
21 static const char table1[] = {
22  "%A B\n"
23  " 12 13\n"
24  "14 15 \n"
25  " 16 17\n"
26 };
27 
28 BOOST_AUTO_TEST_CASE(parse_table1)
29 {
30  std::istringstream strm(table1);
31 
32  numeric_table tbl;
33  tbl.read(strm);
34 
35  BOOST_CHECK_EQUAL(tbl.table.size1(), 3);
36  BOOST_CHECK_EQUAL(tbl.table.size2(), 2);
37  BOOST_CHECK_EQUAL(tbl.colnames.size(), 2);
38 
39  BOOST_CHECK_EQUAL(tbl.colnames["A"], 0);
40  BOOST_CHECK_EQUAL(tbl.colnames["B"], 1);
41 
42  std::ostringstream out;
43  out<<tbl.table;
44 
45  BOOST_CHECK_EQUAL(out.str(), "[3,2]((12,13),(14,15),(16,17))");
46 }
47 
48 static const char table2[] = {
49  // no column names
50  " 12 13\n"
51  "14 15\n"
52  " 16 17" // no trailing newline
53 };
54 
55 BOOST_AUTO_TEST_CASE(parse_table2)
56 {
57  std::istringstream strm(table2);
58 
59  numeric_table tbl;
60  tbl.read(strm);
61 
62  BOOST_CHECK_EQUAL(tbl.table.size1(), 3);
63  BOOST_CHECK_EQUAL(tbl.table.size2(), 2);
64  BOOST_CHECK_EQUAL(tbl.colnames.size(), 0);
65 
66  std::ostringstream out;
67  out<<tbl.table;
68 
69  BOOST_CHECK_EQUAL(out.str(), "[3,2]((12,13),(14,15),(16,17))");
70 }
71 
72 static const char table3[] = {
73  "%A B\n"
74  " 12 13\n"
75  "14 15 16 17\n" // wrong number of columns
76 };
77 
78 BOOST_AUTO_TEST_CASE(parse_table3)
79 {
80  std::istringstream strm(table3);
81 
82  numeric_table tbl;
83  BOOST_CHECK_THROW(tbl.read(strm), std::runtime_error)
84 }
85 
86 static const char table4[] = {
87  "%A B\n"
88  " 12 13\n"
89  "14 hello\n" // not numeric
90  "16 17\n"
91 };
92 
93 BOOST_AUTO_TEST_CASE(parse_table4)
94 {
95  std::istringstream strm(table4);
96 
97  numeric_table tbl;
98  BOOST_CHECK_THROW(tbl.read(strm), std::runtime_error)
99 }
100 
101 BOOST_AUTO_TEST_CASE(test_ndindex_iterate)
102 {
103  size_t limits[2] = {2,3};
104  ndindex_iterate<2> iter(2, limits);
105 
106  BOOST_CHECK(!iter.done);
107  BOOST_CHECK_EQUAL(iter.ndim, 2);
108  BOOST_CHECK_EQUAL_COLLECTIONS(limits, limits+2, iter.limit, iter.limit+2);
109 
110 #define CHECKME(isdone, I, J) {size_t P[2] = {I,J}; BOOST_CHECK_EQUAL(isdone, iter.done); \
111  BOOST_CHECK_EQUAL_COLLECTIONS(P, P+2, iter.index, iter.index+2); }
112 
113  CHECKME(false, 0, 0);
114  iter.next();
115  CHECKME(false, 1, 0);
116  iter.next();
117  CHECKME(false, 0, 1);
118  iter.next();
119  CHECKME(false, 1, 1);
120  iter.next();
121  CHECKME(false, 0, 2);
122  iter.next();
123  CHECKME(false, 1, 2);
124  iter.next();
125  CHECKME(true, 0, 0);
126 
127 #undef CHECKME
128 }
Helper to step through the indicies of an Nd array.
Definition: util.h:111