return_types_t.cc
Go to the documentation of this file.
1 // ======================================================================
2 //
3 // test types keymap: verify that types 1-13 return the correct types.
4 //
5 // ======================================================================
6 
7 #define BOOST_TEST_MODULE (return types test)
8 
9 #include "boost/test/unit_test.hpp"
10 
11 #include "fhiclcpp/types/Atom.h"
13 #include "fhiclcpp/types/Tuple.h"
14 
15 #include <array>
16 #include <string>
17 #include <tuple>
18 #include <type_traits>
19 #include <vector>
20 
21 using namespace fhicl;
22 using namespace fhicl::detail;
23 using namespace std;
24 
25 namespace {
26  template <typename R, typename T>
27  void
28  require_type_as(T& t)
29  {
30  auto rt = t();
31  BOOST_TEST((std::is_same_v<R, decltype(rt)>));
32  }
33 }
34 
35 BOOST_AUTO_TEST_SUITE(types_return_types_test)
36 
37 // [1] Atom<T>
39 {
40  Atom<int> test{Name("atom")};
41  require_type_as<int>(test);
42 }
43 
44 // [2] Sequence<T>
45 BOOST_AUTO_TEST_CASE(one_sequence_t)
46 {
47  Sequence<int> test{Name("sequence")};
48  require_type_as<std::vector<int>>(test);
49 }
50 
51 // [3] Sequence<T,SZ>
52 BOOST_AUTO_TEST_CASE(one_sequence_2_t)
53 {
54  Sequence<int, 2> test{Name("sequence")};
55  require_type_as<std::array<int, 2>>(test);
56 }
57 
58 // [4] Tuple<T...>
60 {
62  require_type_as<std::tuple<int, double, bool>>(test);
63 }
64 
65 // [5] Tuple< Sequence<T>, U...>
66 BOOST_AUTO_TEST_CASE(seq_in_tuple_t)
67 {
68  Tuple<Sequence<int>, double, bool> test{Name("tuple")};
69  require_type_as<std::tuple<std::vector<int>, double, bool>>(test);
70 }
71 
72 // [6] Tuple< Sequence<T,SZ>, U...>
73 BOOST_AUTO_TEST_CASE(bounded_seq_in_tuple_t)
74 {
75  Tuple<Sequence<int, 2>, double, bool> test{Name("tuple")};
76  require_type_as<std::tuple<std::array<int, 2>, double, bool>>(test);
77 }
78 
79 // [7] Tuple< Tuple<T...>, U...>
80 BOOST_AUTO_TEST_CASE(tuple_in_tuple_t)
81 {
82  Tuple<Tuple<int, float>, double, bool> test{Name("tuple")};
83  require_type_as<std::tuple<std::tuple<int, float>, double, bool>>(test);
84 }
85 
86 // [8] Sequence< Tuple<T...> >
87 BOOST_AUTO_TEST_CASE(tuple_in_seq_t)
88 {
89  Sequence<Tuple<int, float>> test{Name("seqtuple")};
90  require_type_as<std::vector<std::tuple<int, float>>>(test);
91 }
92 
93 // [9] Sequence< Tuple<T...>, SZ >
94 BOOST_AUTO_TEST_CASE(tuple_in_seq_2_t)
95 {
96  Sequence<Tuple<int, float>, 2> test{Name("seqtuple")};
97  require_type_as<std::array<std::tuple<int, float>, 2>>(test);
98 }
99 
100 // [10] Sequence< Sequence<T> >
101 BOOST_AUTO_TEST_CASE(seq_in_seq_t)
102 {
103  Sequence<Sequence<int>> test{Name("seqseq")};
104  require_type_as<std::vector<std::vector<int>>>(test);
105 }
106 
107 // [11] Sequence< Sequence<T,SZ> >
108 BOOST_AUTO_TEST_CASE(seq_2_in_seq_t)
109 {
110  Sequence<Sequence<int, 2>> test{Name("seqseq")};
111  require_type_as<std::vector<std::array<int, 2>>>(test);
112 }
113 
114 // [12] Sequence< Sequence<T,SZ> >
115 BOOST_AUTO_TEST_CASE(seq_in_seq_2_t)
116 {
117  Sequence<Sequence<int>, 2> test{Name("seqseq")};
118  require_type_as<std::array<std::vector<int>, 2>>(test);
119 }
120 
121 // [13] Sequence< Sequence<T,SZ>, SZ >
122 BOOST_AUTO_TEST_CASE(seq_2_in_seq_2_t)
123 {
124  Sequence<Sequence<int, 2>, 2> test{Name("seqseq")};
125  require_type_as<std::array<std::array<int, 2>, 2>>(test);
126 }
127 BOOST_AUTO_TEST_SUITE_END()
ChannelGroupService::Name Name
STL namespace.
BOOST_AUTO_TEST_CASE(one_atom_t)