test_doc_example_switch.cxx 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. // (C) Copyright Edward Diener 2011-2015
  2. // Use, modification and distribution are subject to the Boost Software License,
  3. // Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
  4. // http://www.boost.org/LICENSE_1_0.txt).
  5. #include <boost/vmd/equal.hpp>
  6. #include <boost/vmd/identity.hpp>
  7. #include <libs/vmd/test/test_doc_example_switch.hpp>
  8. #include <boost/detail/lightweight_test.hpp>
  9. int main()
  10. {
  11. #if BOOST_PP_VARIADICS
  12. //[ example_switch_defines
  13. #define BOOST_VMD_SWITCH_TEST_1(number) \
  14. test1_ ## number
  15. /**/
  16. #define BOOST_VMD_SWITCH_TEST_2(number) \
  17. test2_ ## number
  18. /**/
  19. #define BOOST_VMD_SWITCH_TEST_3(number) \
  20. test3_ ## number
  21. /**/
  22. #define BOOST_VMD_SWITCH_TEST_DEFAULT(number) \
  23. test_default_ ## number
  24. /**/
  25. //]
  26. #define BOOST_VMD_REGISTER_test1_7 (test1_7)
  27. #define BOOST_VMD_REGISTER_test2_7 (test2_7)
  28. #define BOOST_VMD_REGISTER_test3_7 (test3_7)
  29. #define BOOST_VMD_REGISTER_test_default_7 (test_default_7)
  30. #define BOOST_VMD_DETECT_test1_7_test1_7
  31. #define BOOST_VMD_DETECT_test2_7_test2_7
  32. #define BOOST_VMD_DETECT_test3_7_test3_7
  33. #define BOOST_VMD_DETECT_test_default_7_test_default_7
  34. BOOST_TEST(BOOST_VMD_EQUAL
  35. (
  36. //[ example_switch_defines_t1
  37. BOOST_VMD_SWITCH(1,
  38. (7),
  39. (BOOST_VMD_SWITCH_TEST_DEFAULT),
  40. (3,BOOST_VMD_SWITCH_TEST_3),
  41. (1,BOOST_VMD_SWITCH_TEST_1),
  42. (2,BOOST_VMD_SWITCH_TEST_2)
  43. )
  44. //]
  45. ,test1_7
  46. )
  47. );
  48. BOOST_TEST(BOOST_VMD_EQUAL
  49. (
  50. BOOST_VMD_SWITCH(2,
  51. (7),
  52. (BOOST_VMD_SWITCH_TEST_DEFAULT),
  53. (1,BOOST_VMD_SWITCH_TEST_1),
  54. (3,BOOST_VMD_SWITCH_TEST_3),
  55. (2,BOOST_VMD_SWITCH_TEST_2)
  56. )
  57. ,test2_7
  58. )
  59. );
  60. BOOST_TEST(BOOST_VMD_EQUAL
  61. (
  62. BOOST_VMD_SWITCH(3,
  63. (7),
  64. (BOOST_VMD_SWITCH_TEST_DEFAULT),
  65. (1,BOOST_VMD_SWITCH_TEST_1),
  66. (2,BOOST_VMD_SWITCH_TEST_2),
  67. (3,BOOST_VMD_SWITCH_TEST_3)
  68. )
  69. ,test3_7
  70. )
  71. );
  72. BOOST_TEST(BOOST_VMD_EQUAL
  73. (
  74. //[ example_switch_defines_t4
  75. BOOST_VMD_SWITCH(4,
  76. (7),
  77. (BOOST_VMD_SWITCH_TEST_DEFAULT),
  78. (2,BOOST_VMD_SWITCH_TEST_2),
  79. (1,BOOST_VMD_SWITCH_TEST_1),
  80. (3,BOOST_VMD_SWITCH_TEST_3)
  81. )
  82. //]
  83. ,test_default_7
  84. )
  85. );
  86. BOOST_TEST(BOOST_VMD_EQUAL
  87. (
  88. //[ example_switch_defines_t5
  89. BOOST_VMD_SWITCH(143,
  90. (7),
  91. (BOOST_VMD_SWITCH_TEST_DEFAULT),
  92. (1,BOOST_VMD_SWITCH_TEST_1),
  93. (2,BOOST_VMD_SWITCH_TEST_2),
  94. (3,BOOST_VMD_SWITCH_TEST_3),
  95. (143,BOOST_VMD_SWITCH_IDENTITY(55))
  96. )
  97. //]
  98. ,55
  99. )
  100. );
  101. BOOST_TEST(BOOST_VMD_EQUAL
  102. (
  103. //[ example_switch_defines_t6
  104. BOOST_VMD_SWITCH(155,
  105. (7),
  106. (BOOST_VMD_SWITCH_IDENTITY(77)),
  107. (1,BOOST_VMD_SWITCH_TEST_1),
  108. (2,BOOST_VMD_SWITCH_TEST_2),
  109. (3,BOOST_VMD_SWITCH_TEST_3),
  110. (143,BOOST_VMD_SWITCH_IDENTITY(55))
  111. )
  112. //]
  113. ,77
  114. )
  115. );
  116. BOOST_TEST(BOOST_VMD_EQUAL
  117. (
  118. //[ example_switch_defines_t7
  119. BOOST_VMD_SWITCH(BOOST_VMD_TYPE_TUPLE,
  120. (7),
  121. (BOOST_VMD_SWITCH_TEST_DEFAULT),
  122. (BOOST_VMD_TYPE_TUPLE,BOOST_VMD_SWITCH_TEST_1),
  123. ((1,2,3),BOOST_VMD_SWITCH_TEST_3),
  124. (2,BOOST_VMD_SWITCH_TEST_2)
  125. )
  126. //]
  127. ,test1_7
  128. )
  129. );
  130. #else
  131. BOOST_ERROR("No variadic macro support");
  132. #endif
  133. return boost::report_errors();
  134. }