proxygen
DynamicConverterTest.cpp File Reference
#include <folly/DynamicConverter.h>
#include <folly/portability/GTest.h>
#include <algorithm>
#include <map>
#include <vector>

Go to the source code of this file.

Classes

class  A
 
struct  folly::DynamicConverter< A >
 
struct  Token
 
struct  folly::DynamicConverter< Token >
 
struct  B
 
struct  B::BException
 
struct  folly::DynamicConverter< B >
 

Namespaces

 folly
 —— Concurrent Priority Queue Implementation ——
 

Functions

 TEST (DynamicConverter, template_metaprogramming)
 
 TEST (DynamicConverter, arithmetic_types)
 
 TEST (DynamicConverter, enums)
 
 TEST (DynamicConverter, simple_builtins)
 
 TEST (DynamicConverter, simple_fbvector)
 
 TEST (DynamicConverter, simple_container)
 
 TEST (DynamicConverter, simple_map)
 
 TEST (DynamicConverter, map_keyed_by_string)
 
 TEST (DynamicConverter, map_to_vector_of_pairs)
 
 TEST (DynamicConverter, nested_containers)
 
 TEST (DynamicConverter, custom_class)
 
 TEST (DynamicConverter, crazy)
 
 TEST (DynamicConverter, consts)
 
 TEST (DynamicConverter, example)
 
 TEST (DynamicConverter, construct)
 
 TEST (DynamicConverter, errors)
 
 TEST (DynamicConverter, partial_dynamics)
 
 TEST (DynamicConverter, asan_exception_case_umap)
 
 TEST (DynamicConverter, asan_exception_case_uset)
 
 TEST (DynamicConverter, double_destroy)
 
 TEST (DynamicConverter, simple_vector_bool)
 

Variables

static int constructB = 0
 
static int destroyB = 0
 
static int ticker = 0
 

Function Documentation

TEST ( DynamicConverter  ,
template_metaprogramming   
)

Definition at line 30 of file DynamicConverterTest.cpp.

References EXPECT_EQ, and folly::value().

30  {
31  struct A {};
32 
33  bool c1f = is_container<int>::value;
35  bool c3f = is_container<A>::value;
37 
42 
43  EXPECT_EQ(c1f, false);
44  EXPECT_EQ(c2f, false);
45  EXPECT_EQ(c3f, false);
46  EXPECT_EQ(c4f, false);
47  EXPECT_EQ(c1t, true);
48  EXPECT_EQ(c2t, true);
49  EXPECT_EQ(c3t, true);
50  EXPECT_EQ(c4t, true);
51 
52  bool m1f = is_map<int>::value;
53  bool m2f = is_map<std::set<int>>::value;
54 
56 
57  EXPECT_EQ(m1f, false);
58  EXPECT_EQ(m2f, false);
59  EXPECT_EQ(m1t, true);
60 
61  bool r1f = is_range<int>::value;
62 
65 
66  EXPECT_EQ(r1f, false);
67  EXPECT_EQ(r1t, true);
68  EXPECT_EQ(r2t, true);
69 }
std::unique_ptr< int > A
#define EXPECT_EQ(val1, val2)
Definition: gtest.h:1922
static const char *const value
Definition: Conv.cpp:50
TEST ( DynamicConverter  ,
arithmetic_types   
)

Definition at line 71 of file DynamicConverterTest.cpp.

References d4(), d5(), d6(), and EXPECT_EQ.

71  {
72  dynamic d1 = 12;
73  auto i1 = convertTo<int>(d1);
74  EXPECT_EQ(i1, 12);
75 
76  dynamic d2 = 123456789012345;
77  auto i2 = convertTo<int64_t>(d2);
78  EXPECT_EQ(i2, 123456789012345);
79 
80  dynamic d4 = 3.141;
81  auto i4 = convertTo<float>(d4);
82  EXPECT_EQ((int)(i4 * 100), 314);
83 
84  dynamic d5 = true;
85  auto i5 = convertTo<bool>(d5);
86  EXPECT_EQ(i5, true);
87 
88  dynamic d6 = 15;
89  const auto i6 = convertTo<const int>(d6);
90  EXPECT_EQ(i6, 15);
91 
92  dynamic d7 = "87";
93  auto i7 = convertTo<int>(d7);
94  EXPECT_EQ(i7, 87);
95 
96  dynamic d8 = "false";
97  auto i8 = convertTo<bool>(d8);
98  EXPECT_EQ(i8, false);
99 }
#define EXPECT_EQ(val1, val2)
Definition: gtest.h:1922
RfcParam d5(false, exampleHex3)
RfcParam d6(true, exampleHex4)
RfcParam d4(true, exampleHex2)
TEST ( DynamicConverter  ,
enums   
)

Definition at line 101 of file DynamicConverterTest.cpp.

References d3(), d4(), and EXPECT_EQ.

101  {
102  enum enum1 { foo = 1, bar = 2 };
103 
104  dynamic d1 = 1;
105  auto i1 = convertTo<enum1>(d1);
106  EXPECT_EQ(i1, foo);
107 
108  dynamic d2 = 2;
109  auto i2 = convertTo<enum1>(d2);
110  EXPECT_EQ(i2, bar);
111 
112  enum class enum2 { FOO = 1, BAR = 2 };
113 
114  dynamic d3 = 1;
115  auto i3 = convertTo<enum2>(d3);
116  EXPECT_EQ(i3, enum2::FOO);
117 
118  dynamic d4 = 2;
119  auto i4 = convertTo<enum2>(d4);
120  EXPECT_EQ(i4, enum2::BAR);
121 }
#define EXPECT_EQ(val1, val2)
Definition: gtest.h:1922
RfcParam d4(true, exampleHex2)
RfcParam d3(false, exampleHex1)
TEST ( DynamicConverter  ,
simple_builtins   
)

Definition at line 123 of file DynamicConverterTest.cpp.

References folly::dynamic::array(), d3(), d4(), EXPECT_EQ, and folly::dynamic::object().

123  {
124  dynamic d1 = "Haskell";
125  auto i1 = convertTo<folly::fbstring>(d1);
126  EXPECT_EQ(i1, "Haskell");
127 
128  dynamic d2 = 13;
129  auto i2 = convertTo<std::string>(d2);
130  EXPECT_EQ(i2, "13");
131 
132  dynamic d3 = dynamic::array(12, "Scala");
133  auto i3 = convertTo<std::pair<int, std::string>>(d3);
134  EXPECT_EQ(i3.first, 12);
135  EXPECT_EQ(i3.second, "Scala");
136 
137  dynamic d4 = dynamic::object("C", "C++");
138  auto i4 = convertTo<std::pair<std::string, folly::fbstring>>(d4);
139  EXPECT_EQ(i4.first, "C");
140  EXPECT_EQ(i4.second, "C++");
141 }
void * object
Definition: AtFork.cpp:32
#define EXPECT_EQ(val1, val2)
Definition: gtest.h:1922
RfcParam d4(true, exampleHex2)
RfcParam d3(false, exampleHex1)
TEST ( DynamicConverter  ,
simple_fbvector   
)

Definition at line 143 of file DynamicConverterTest.cpp.

References folly::dynamic::array(), and EXPECT_EQ.

143  {
144  dynamic d1 = dynamic::array(1, 2, 3);
145  auto i1 = convertTo<folly::fbvector<int>>(d1);
146  decltype(i1) i1b = {1, 2, 3};
147  EXPECT_EQ(i1, i1b);
148 }
#define EXPECT_EQ(val1, val2)
Definition: gtest.h:1922
TEST ( DynamicConverter  ,
simple_container   
)

Definition at line 150 of file DynamicConverterTest.cpp.

References folly::dynamic::array(), and EXPECT_EQ.

150  {
151  dynamic d1 = dynamic::array(1, 2, 3);
152  auto i1 = convertTo<std::vector<int>>(d1);
153  decltype(i1) i1b = {1, 2, 3};
154  EXPECT_EQ(i1, i1b);
155 
156  dynamic d2 = dynamic::array(1, 3, 5, 2, 4);
157  auto i2 = convertTo<std::set<int>>(d2);
158  decltype(i2) i2b = {1, 2, 3, 5, 4};
159  EXPECT_EQ(i2, i2b);
160 }
#define EXPECT_EQ(val1, val2)
Definition: gtest.h:1922
TEST ( DynamicConverter  ,
simple_map   
)

Definition at line 162 of file DynamicConverterTest.cpp.

References folly::dynamic::array(), EXPECT_EQ, and folly::dynamic::object().

162  {
163  dynamic d1 = dynamic::object(1, "one")(2, "two");
164  auto i1 = convertTo<std::map<int, std::string>>(d1);
165  decltype(i1) i1b = {{1, "one"}, {2, "two"}};
166  EXPECT_EQ(i1, i1b);
167 
168  dynamic d2 =
169  dynamic::array(dynamic::array(3, "three"), dynamic::array(4, "four"));
170  auto i2 = convertTo<std::unordered_map<int, std::string>>(d2);
171  decltype(i2) i2b = {{3, "three"}, {4, "four"}};
172  EXPECT_EQ(i2, i2b);
173 }
void * object
Definition: AtFork.cpp:32
#define EXPECT_EQ(val1, val2)
Definition: gtest.h:1922
TEST ( DynamicConverter  ,
map_keyed_by_string   
)

Definition at line 175 of file DynamicConverterTest.cpp.

References folly::dynamic::array(), EXPECT_EQ, and folly::dynamic::object().

175  {
176  dynamic d1 = dynamic::object("1", "one")("2", "two");
177  auto i1 = convertTo<std::map<std::string, std::string>>(d1);
178  decltype(i1) i1b = {{"1", "one"}, {"2", "two"}};
179  EXPECT_EQ(i1, i1b);
180 
181  dynamic d2 =
182  dynamic::array(dynamic::array("3", "three"), dynamic::array("4", "four"));
183  auto i2 = convertTo<std::unordered_map<std::string, std::string>>(d2);
184  decltype(i2) i2b = {{"3", "three"}, {"4", "four"}};
185  EXPECT_EQ(i2, i2b);
186 }
void * object
Definition: AtFork.cpp:32
#define EXPECT_EQ(val1, val2)
Definition: gtest.h:1922
TEST ( DynamicConverter  ,
map_to_vector_of_pairs   
)

Definition at line 188 of file DynamicConverterTest.cpp.

References EXPECT_EQ, and folly::dynamic::object().

188  {
189  dynamic d1 = dynamic::object("1", "one")("2", "two");
190  auto i1 = convertTo<std::vector<std::pair<std::string, std::string>>>(d1);
191  std::sort(i1.begin(), i1.end());
192  decltype(i1) i1b = {{"1", "one"}, {"2", "two"}};
193  EXPECT_EQ(i1, i1b);
194 }
void * object
Definition: AtFork.cpp:32
#define EXPECT_EQ(val1, val2)
Definition: gtest.h:1922
TEST ( DynamicConverter  ,
nested_containers   
)

Definition at line 196 of file DynamicConverterTest.cpp.

References folly::dynamic::array(), EXPECT_EQ, and folly::dynamic::object().

196  {
197  dynamic d1 =
198  dynamic::array(dynamic::array(1), dynamic::array(), dynamic::array(2, 3));
199  auto i1 = convertTo<folly::fbvector<std::vector<uint8_t>>>(d1);
200  decltype(i1) i1b = {{1}, {}, {2, 3}};
201  EXPECT_EQ(i1, i1b);
202 
203  dynamic h2a = dynamic::array("3", ".", "1", "4");
204  dynamic h2b = dynamic::array("2", ".", "7", "2");
205  dynamic d2 = dynamic::object(3.14, h2a)(2.72, h2b);
206  auto i2 = convertTo<std::map<double, std::vector<folly::fbstring>>>(d2);
207  decltype(i2) i2b = {
208  {3.14, {"3", ".", "1", "4"}},
209  {2.72, {"2", ".", "7", "2"}},
210  };
211  EXPECT_EQ(i2, i2b);
212 }
void * object
Definition: AtFork.cpp:32
#define EXPECT_EQ(val1, val2)
Definition: gtest.h:1922
TEST ( DynamicConverter  ,
custom_class   
)

Definition at line 228 of file DynamicConverterTest.cpp.

References folly::dynamic::array(), EXPECT_EQ, and folly::dynamic::object().

228  {
229  dynamic d1 = dynamic::object("i", 17);
230  auto i1 = convertTo<A>(d1);
231  EXPECT_EQ(i1.i, 17);
232 
233  dynamic d2 =
234  dynamic::array(dynamic::object("i", 18), dynamic::object("i", 19));
235  auto i2 = convertTo<std::vector<A>>(d2);
236  decltype(i2) i2b = {{18}, {19}};
237  EXPECT_EQ(i2, i2b);
238 }
void * object
Definition: AtFork.cpp:32
#define EXPECT_EQ(val1, val2)
Definition: gtest.h:1922
TEST ( DynamicConverter  ,
crazy   
)

Definition at line 240 of file DynamicConverterTest.cpp.

References folly::dynamic::array(), folly::convertTo(), EXPECT_EQ, i, and folly::dynamic::object().

240  {
241  // we are going to create a vector<unordered_map<bool, T>>
242  // we will construct some of the maps from dynamic objects,
243  // some from a vector of KV pairs.
244  // T will be vector<set<string>>
245 
246  std::set<std::string> s1 = {"a", "e", "i", "o", "u"};
247  std::set<std::string> s2 = {"2", "3", "5", "7"};
248  std::set<std::string> s3 = {"Hello", "World"};
249 
250  std::vector<std::set<std::string>> v1 = {};
251  std::vector<std::set<std::string>> v2 = {s1, s2};
252  std::vector<std::set<std::string>> v3 = {s3};
253 
254  std::unordered_map<bool, std::vector<std::set<std::string>>> m1 = {
255  {true, v1}, {false, v2}};
256  std::unordered_map<bool, std::vector<std::set<std::string>>> m2 = {
257  {true, v3}};
258 
259  std::vector<std::unordered_map<bool, std::vector<std::set<std::string>>>> f1 =
260  {m1, m2};
261 
262  dynamic ds1 = dynamic::array("a", "e", "i", "o", "u");
263  dynamic ds2 = dynamic::array("2", "3", "5", "7");
264  dynamic ds3 = dynamic::array("Hello", "World");
265 
266  dynamic dv1 = dynamic::array;
267  dynamic dv2 = dynamic::array(ds1, ds2);
268  dynamic dv3(dynamic::array(ds3));
269 
270  dynamic dm1 = dynamic::object(true, dv1)(false, dv2);
271  dynamic dm2 = dynamic::array(dynamic::array(true, dv3));
272 
273  dynamic df1 = dynamic::array(dm1, dm2);
274 
275  auto i = convertTo<std::vector<
276  std::unordered_map<bool, std::vector<std::set<std::string>>>>>(
277  df1); // yes, that is 5 close-chevrons
278 
279  EXPECT_EQ(f1, i);
280 }
std::enable_if< !std::is_same< Tgt, bool >::value &&(std::is_integral< Tgt >::value||std::is_floating_point< Tgt >::value), Expected< Tgt, ConversionCode > >::type convertTo(const bool &value) noexcept
Definition: Conv.h:1203
void * object
Definition: AtFork.cpp:32
#define EXPECT_EQ(val1, val2)
Definition: gtest.h:1922
TEST ( DynamicConverter  ,
consts   
)

Definition at line 282 of file DynamicConverterTest.cpp.

References folly::dynamic::array(), d3(), d4(), d5(), EXPECT_EQ, and EXPECT_TRUE.

282  {
283  dynamic d1 = 7.5;
284  auto i1 = convertTo<const double>(d1);
285  EXPECT_EQ(7.5, i1);
286 
287  dynamic d2 = "Hello";
288  auto i2 = convertTo<const std::string>(d2);
289  decltype(i2) i2b = "Hello";
290  EXPECT_EQ(i2b, i2);
291 
292  dynamic d3 = true;
293  auto i3 = convertTo<const bool>(d3);
294  EXPECT_TRUE(i3);
295 
296  dynamic d4 = "true";
297  auto i4 = convertTo<const bool>(d4);
298  EXPECT_TRUE(i4);
299 
300  dynamic d5 = dynamic::array(1, 2);
301  auto i5 = convertTo<const std::pair<const int, const int>>(d5);
302  decltype(i5) i5b = {1, 2};
303  EXPECT_EQ(i5b, i5);
304 }
std::enable_if< !std::is_same< Tgt, bool >::value &&(std::is_integral< Tgt >::value||std::is_floating_point< Tgt >::value), Expected< Tgt, ConversionCode > >::type convertTo(const bool &value) noexcept
Definition: Conv.h:1203
#define EXPECT_EQ(val1, val2)
Definition: gtest.h:1922
STL namespace.
RfcParam d5(false, exampleHex3)
RfcParam d4(true, exampleHex2)
#define EXPECT_TRUE(condition)
Definition: gtest.h:1859
const
Definition: upload.py:398
RfcParam d3(false, exampleHex1)
TEST ( DynamicConverter  ,
example   
)

Definition at line 325 of file DynamicConverterTest.cpp.

References EXPECT_EQ, and folly::dynamic::object().

325  {
326  dynamic d1 = dynamic::object("KIND", 2)("LEXEME", "a token");
327  auto i1 = convertTo<Token>(d1);
328  EXPECT_EQ(i1.kind_, 2);
329  EXPECT_EQ(i1.lexeme_, "a token");
330 }
void * object
Definition: AtFork.cpp:32
#define EXPECT_EQ(val1, val2)
Definition: gtest.h:1922
TEST ( DynamicConverter  ,
construct   
)

Definition at line 332 of file DynamicConverterTest.cpp.

References folly::dynamic::array(), c, EXPECT_EQ, map(), folly::dynamic::object(), folly::range(), string, and folly::toDynamic().

332  {
333  using std::map;
334  using std::pair;
335  using std::string;
336  using std::vector;
337  {
338  vector<int> c{1, 2, 3};
339  dynamic d = dynamic::array(1, 2, 3);
340  EXPECT_EQ(d, toDynamic(c));
341  }
342 
343  {
344  vector<float> c{1.0f, 2.0f, 4.0f};
345  dynamic d = dynamic::array(1.0, 2.0, 4.0);
346  EXPECT_EQ(d, toDynamic(c));
347  }
348 
349  {
350  map<int, int> c{{2, 4}, {3, 9}};
351  dynamic d = dynamic::object(2, 4)(3, 9);
352  EXPECT_EQ(d, toDynamic(c));
353  }
354 
355  {
356  map<string, string> c{{"a", "b"}};
357  dynamic d = dynamic::object("a", "b");
358  EXPECT_EQ(d, toDynamic(c));
359  }
360 
361  {
362  map<string, pair<string, int>> c{{"a", {"b", 3}}};
363  dynamic d = dynamic::object("a", dynamic::array("b", 3));
364  EXPECT_EQ(d, toDynamic(c));
365  }
366 
367  {
368  map<string, pair<string, int>> c{{"a", {"b", 3}}};
369  dynamic d = dynamic::object("a", dynamic::array("b", 3));
370  EXPECT_EQ(d, toDynamic(c));
371  }
372 
373  {
374  vector<int> vi{2, 3, 4, 5};
375  auto c = std::make_pair(
376  range(vi.begin(), vi.begin() + 3),
377  range(vi.begin() + 1, vi.begin() + 4));
378  dynamic d =
379  dynamic::array(dynamic::array(2, 3, 4), dynamic::array(3, 4, 5));
380  EXPECT_EQ(d, toDynamic(c));
381  }
382 
383  {
384  vector<bool> vb{true, false};
385  dynamic d = dynamic::array(true, false);
386  EXPECT_EQ(d, toDynamic(vb));
387  }
388 }
void * object
Definition: AtFork.cpp:32
#define EXPECT_EQ(val1, val2)
Definition: gtest.h:1922
Gen range(Value begin, Value end)
Definition: Base.h:467
static Map map(mapCap)
Definition: Traits.h:594
Definition: Traits.h:588
const char * string
Definition: Conv.cpp:212
char c
dynamic toDynamic(const T &)
TEST ( DynamicConverter  ,
errors   
)

Definition at line 390 of file DynamicConverterTest.cpp.

References EXPECT_THROW, int64_t, and max.

390  {
391  const auto int32Over =
392  static_cast<int64_t>(std::numeric_limits<int32_t>().max()) + 1;
393  const auto floatOver =
394  static_cast<double>(std::numeric_limits<float>().max()) * 2;
395 
396  dynamic d1 = int32Over;
397  EXPECT_THROW(convertTo<int32_t>(d1), std::range_error);
398 
399  dynamic d2 = floatOver;
400  EXPECT_THROW(convertTo<float>(d2), std::range_error);
401 }
#define EXPECT_THROW(statement, expected_exception)
Definition: gtest.h:1843
LogLevel max
Definition: LogLevel.cpp:31
TEST ( DynamicConverter  ,
partial_dynamics   
)

Definition at line 403 of file DynamicConverterTest.cpp.

References folly::dynamic::array(), c, EXPECT_EQ, m, folly::dynamic::object(), and folly::toDynamic().

403  {
404  std::vector<dynamic> c{
405  dynamic::array(2, 3, 4),
406  dynamic::array(3, 4, 5),
407  };
408  dynamic d = dynamic::array(dynamic::array(2, 3, 4), dynamic::array(3, 4, 5));
409  EXPECT_EQ(d, toDynamic(c));
410 
411  std::unordered_map<std::string, dynamic> m{{"one", 1}, {"two", 2}};
412  dynamic md = dynamic::object("one", 1)("two", 2);
413  EXPECT_EQ(md, toDynamic(m));
414 }
void * object
Definition: AtFork.cpp:32
#define EXPECT_EQ(val1, val2)
Definition: gtest.h:1922
static map< string, int > m
char c
dynamic toDynamic(const T &)
TEST ( DynamicConverter  ,
asan_exception_case_umap   
)

Definition at line 416 of file DynamicConverterTest.cpp.

References folly::dynamic::array(), folly::convertTo(), and EXPECT_THROW.

416  {
417  EXPECT_THROW(
418  (convertTo<std::unordered_map<int, int>>(dynamic::array(1))), TypeError);
419 }
std::enable_if< !std::is_same< Tgt, bool >::value &&(std::is_integral< Tgt >::value||std::is_floating_point< Tgt >::value), Expected< Tgt, ConversionCode > >::type convertTo(const bool &value) noexcept
Definition: Conv.h:1203
#define EXPECT_THROW(statement, expected_exception)
Definition: gtest.h:1843
TEST ( DynamicConverter  ,
asan_exception_case_uset   
)

Definition at line 421 of file DynamicConverterTest.cpp.

References folly::dynamic::array(), folly::convertTo(), and EXPECT_THROW.

421  {
422  EXPECT_THROW(
423  (convertTo<std::unordered_set<int>>(
424  dynamic::array(1, dynamic::array(), 3))),
425  TypeError);
426 }
std::enable_if< !std::is_same< Tgt, bool >::value &&(std::is_integral< Tgt >::value||std::is_floating_point< Tgt >::value), Expected< Tgt, ConversionCode > >::type convertTo(const bool &value) noexcept
Definition: Conv.h:1203
#define EXPECT_THROW(statement, expected_exception)
Definition: gtest.h:1843
TEST ( DynamicConverter  ,
double_destroy   
)

Definition at line 457 of file DynamicConverterTest.cpp.

References folly::dynamic::array(), constructB, folly::convertTo(), destroyB, EXPECT_EQ, EXPECT_THROW, and ticker.

457  {
458  dynamic d = dynamic::array(1, 3, 5, 7, 9, 11, 13, 15, 17);
459  ticker = 3;
460 
461  EXPECT_THROW(convertTo<std::vector<B>>(d), B::BException);
463 }
std::enable_if< !std::is_same< Tgt, bool >::value &&(std::is_integral< Tgt >::value||std::is_floating_point< Tgt >::value), Expected< Tgt, ConversionCode > >::type convertTo(const bool &value) noexcept
Definition: Conv.h:1203
static int destroyB
#define EXPECT_THROW(statement, expected_exception)
Definition: gtest.h:1843
#define EXPECT_EQ(val1, val2)
Definition: gtest.h:1922
static int ticker
static int constructB
TEST ( DynamicConverter  ,
simple_vector_bool   
)

Definition at line 465 of file DynamicConverterTest.cpp.

References EXPECT_EQ, and folly::toDynamic().

465  {
466  std::vector<bool> bools{true, false};
467  auto d = toDynamic(bools);
468  auto actual = convertTo<decltype(bools)>(d);
469  EXPECT_EQ(bools, actual);
470 }
#define EXPECT_EQ(val1, val2)
Definition: gtest.h:1922
dynamic toDynamic(const T &)

Variable Documentation

int constructB = 0
static

Definition at line 428 of file DynamicConverterTest.cpp.

Referenced by B::B(), and TEST().

int destroyB = 0
static

Definition at line 429 of file DynamicConverterTest.cpp.

Referenced by TEST(), and B::~B().

int ticker = 0
static

Definition at line 430 of file DynamicConverterTest.cpp.

Referenced by B::B(), and TEST().