Ne.app NeANT
The Ne.app NeANT User module of the NeANT distribution.
20.tuple.elem.cpp
Go to the documentation of this file.
1
29#include <rw_driver.h>
30
31// compile out all test code if extensions disabled
32#if !defined (_RWSTD_NO_EXT_CXX_0X) \
33 && !defined (_RWSTD_NO_RVALUE_REFERENCES)
34
35#include <tuple>
36
37#include "20.tuple.h"
38
39
41#include <rw_valcmp.h>
42
43#define BOOL_VAL true
44#define CHAR_VAL 'a'
45#define INT_VAL 256
46#define DBL_VAL 3.14159
47#define PTR_VAL ptr_val
48#define USER_VAL user_val
49
50static void* ptr_val;
51static UserDefined user_val;
52
53typedef std::tuple<bool, char, int, double, void*, UserDefined> Tuple;
54
55static void
56test_const_get (const Tuple& t)
57{
58 rw_info (0, __FILE__, __LINE__, "get (const)");
59
60 const bool& b = std::get<0> (t);
61 rw_assert (b == BOOL_VAL, __FILE__, __LINE__, "get<0>(t), got %s, "
62 "expected %s", b? "true": "false", BOOL_VAL? "true": "false");
63
64 const char& c = std::get<1> (t);
65 rw_assert (c == CHAR_VAL, __FILE__, __LINE__,
66 "get<1>(t), got \'%c\', expected \'%c\'", c, CHAR_VAL);
67
68 const int& i = std::get<2> (t);
69 rw_assert (i == INT_VAL, __FILE__, __LINE__,
70 "get<2>(t), got %d, expected %d", i, INT_VAL);
71
72 const double& d = std::get<3> (t);
73 rw_assert (0 == rw_dblcmp (d, DBL_VAL), __FILE__, __LINE__,
74 "get<3>(t), got %f, expected %f", d, DBL_VAL);
75
76 void* const& p = std::get<4> (t);
77 rw_assert (p == PTR_VAL, __FILE__, __LINE__,
78 "get<4>(t), got %p, expected %p", p, PTR_VAL);
79
80 const UserDefined& uc = std::get<5> (t);
81 rw_assert (uc == USER_VAL, __FILE__, __LINE__,
82 "get<5>(t), got %d, expected %d",
83 uc.value (), USER_VAL.value ());
84}
85
86
88static void
90{
91 rw_info (0, __FILE__, __LINE__, "get");
92
93 bool& b = std::get<0> (t);
94 rw_assert (b == BOOL_VAL, __FILE__, __LINE__,
95 "get<0>(t), got %d, expected %b", b, BOOL_VAL);
96 b = !BOOL_VAL;
97 rw_assert (std::get<0> (t) == !BOOL_VAL, __FILE__, __LINE__,
98 "get<0>(t), got %d, expected %b", std::get<0> (t),
99 !BOOL_VAL);
100
101 char& c = std::get<1> (t);
102 rw_assert (c == 'a', __FILE__, __LINE__,
103 "get<1>(t), got %c, expected \'%c\'", c, CHAR_VAL);
104 c = '1';
105 rw_assert (std::get<1> (t) == '1', __FILE__, __LINE__,
106 "get<1>(t), got %c, expected \'1\'", std::get<1> (t));
107
108 int& i = std::get<2> (t);
109 rw_assert (i == INT_VAL, __FILE__, __LINE__,
110 "get<2>(t), got %d, expected %d", i, INT_VAL);
111 i = INT_VAL+1;
112 rw_assert (std::get<2> (t) == INT_VAL+1, __FILE__, __LINE__,
113 "get<1>(t), got %d, expected %d", std::get<2> (t),
114 INT_VAL+1);
115
116 double& d = std::get<3> (t);
117 rw_assert (0 == rw_dblcmp (d, DBL_VAL), __FILE__, __LINE__,
118 "get<3>(t), got %f, expected %f", d, DBL_VAL);
119 d = DBL_VAL*DBL_VAL;
120 rw_assert (0 == rw_dblcmp (std::get<3> (t), DBL_VAL*DBL_VAL),
121 __FILE__, __LINE__,
122 "get<3>(t), got %f, expected %f", std::get<3> (t),
124
125 void* p = std::get<4> (t);
126 rw_assert (p == PTR_VAL, __FILE__, __LINE__,
127 "get<4>(t), got %p, expected %p", p, PTR_VAL);
128 p = &d;
129 rw_assert (std::get<4> (t) == &d, __FILE__, __LINE__,
130 "get<4>(t), got %p, expected %p", std::get<4> (t), &d);
131
132 UserDefined& uc = std::get<5> (t);
133 rw_assert (uc == USER_VAL, __FILE__, __LINE__,
134 "get<5>(t), got %d, expected %d",
135 uc.value (), USER_VAL.value ());
136 uc = UserDefined (INT_VAL);
137 rw_assert ((std::get<5> (t)).value () == INT_VAL, __FILE__, __LINE__,
138 "get<5>(t), got %d, expected %d",
139 (std::get<5> (t)).value (), INT_VAL);
140}
141
142
144static int
145run_test (int /*argc*/, char* argv [])
146{
147 ptr_val = static_cast<void*> (argv [0]);
149
150 test_const_get (t);
151 test_get (t);
152
153 return 0;
154}
155
156#else // _RWSTD_NO_EXT_CXX_0X || _RWSTD_NO_RVALUE_REFERENCES
157
158static int
159run_test (int, char*[])
160{
161
162#if defined (_RWSTD_NO_EXT_CXX_0X)
163
164 rw_warn (0, 0, __LINE__,
165 "test disabled because _RWSTD_NO_EXT_CXX_0X is defined");
166
167#elif defined (_RWSTD_NO_RVALUE_REFERENCES)
168
169 rw_warn (0, 0, __LINE__,
170 "test disabled because _RWSTD_NO_RVALUE_REFERENCES is "
171 "defined");
172
173#endif
174
175 return 0;
176}
177
178#endif // _RWSTD_NO_EXT_CXX_0X || _RWSTD_NO_RVALUE_REFERENCES
179
180/*extern*/ int
181main (int argc, char* argv [])
182{
183 return rw_test (argc, argv, __FILE__,
184 "[tuple.elem]", "20.3.1.5 Element access",
185 run_test, "", 0);
186}
187
#define i
Definition 17.names.cpp:126
#define t
Definition 17.names.cpp:136
#define d
Definition 17.names.cpp:115
#define c
Definition 17.names.cpp:111
#define b
Definition 17.names.cpp:110
#define p
Definition 17.names.cpp:132
#define DBL_VAL
#define PTR_VAL
#define CHAR_VAL
#define USER_VAL
#define BOOL_VAL
#define INT_VAL
std::tuple< bool, char, int, double, void *, UserDefined > Tuple
void run_test(const ForwardIterator &dummy, T *, Predicate *pred)
T value(const T &val)
void test_get(FileStream &f, const char *type, const CharT array[], std::size_t)
#define main
value_type value() const
Definition 20.tuple.h:120
_TEST_EXPORT int rw_test(int argc, char *argv[], const char *filename, const char *clause, const char *comment, int(*testfun)(int, char **), const char *optspec,...)
_TEST_EXPORT int rw_info(int, const char *, int, const char *,...)
Definition driver.cpp:1681
_TEST_EXPORT int rw_assert(int, const char *, int, const char *,...)
Definition driver.cpp:1630
_TEST_EXPORT int rw_warn(int, const char *, int, const char *,...)
Definition driver.cpp:1647
_TEST_EXPORT int rw_dblcmp(double x, double y)
Definition valcmp.cpp:753