type_traits.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. #include<__vic/type_traits.h>
  2. #include<iostream>
  3. #include<exception>
  4. #include<cassert>
  5. namespace tests {
  6. void run()
  7. {
  8. assert(( __vic::is_same<int, int>::value));
  9. assert((!__vic::is_same<int, short>::value));
  10. assert((!__vic::is_same<int, const int>::value));
  11. assert( __vic::is_const<const int>::value);
  12. assert(!__vic::is_const<int>::value);
  13. assert( __vic::is_signed_integer<int>::value);
  14. assert( __vic::is_signed_integer<signed char>::value);
  15. assert(!__vic::is_signed_integer<unsigned>::value);
  16. assert(!__vic::is_signed_integer<double>::value);
  17. assert( __vic::is_unsigned_integer<unsigned>::value);
  18. assert(!__vic::is_unsigned_integer<int>::value);
  19. assert( __vic::is_unsigned_integer<unsigned char>::value);
  20. assert((__vic::is_same<
  21. __vic::remove_const<const int>::type,
  22. int>::value));
  23. assert((__vic::is_same<
  24. __vic::remove_const<int>::type,
  25. int>::value));
  26. assert((__vic::is_same<
  27. __vic::remove_cv<const int>::type,
  28. int>::value));
  29. assert((__vic::is_same<
  30. __vic::remove_cv<volatile int>::type,
  31. int>::value));
  32. assert((__vic::is_same<
  33. __vic::remove_cv<const volatile int>::type,
  34. int>::value));
  35. assert((__vic::is_same<
  36. __vic::remove_const<int>::type,
  37. int>::value));
  38. assert((__vic::is_same<
  39. __vic::remove_pointer<int *>::type,
  40. int>::value));
  41. assert((__vic::is_same<
  42. __vic::remove_pointer<int>::type,
  43. int>::value));
  44. assert((__vic::is_same<
  45. __vic::remove_cvref<const int &>::type,
  46. int>::value));
  47. assert((__vic::is_same<
  48. __vic::conditional<true, int, char>::type,
  49. int>::value));
  50. assert((__vic::is_same<
  51. __vic::conditional<false, int, char>::type,
  52. char>::value));
  53. typedef __vic::true_type T;
  54. typedef __vic::false_type F;
  55. #if __cpp_variadic_templates
  56. assert(( __vic::conjunction<>::value));
  57. assert(( __vic::conjunction<T>::value));
  58. assert((!__vic::conjunction<F>::value));
  59. assert(( __vic::conjunction<T, T>::value));
  60. assert((!__vic::conjunction<T, F>::value));
  61. assert((!__vic::conjunction<F, T>::value));
  62. assert((!__vic::conjunction<F, F>::value));
  63. assert((!__vic::disjunction<>::value));
  64. assert(( __vic::disjunction<T>::value));
  65. assert((!__vic::disjunction<F>::value));
  66. assert(( __vic::disjunction<T, T>::value));
  67. assert(( __vic::disjunction<T, F>::value));
  68. assert(( __vic::disjunction<F, T>::value));
  69. assert((!__vic::disjunction<F, F>::value));
  70. #endif
  71. assert((!__vic::negation<T>::value));
  72. assert(( __vic::negation<F>::value));
  73. #if __cpp_variadic_templates && __cpp_alias_templates
  74. assert((__vic::is_same<
  75. __vic::make_index_sequence<4>,
  76. __vic::index_sequence<0, 1, 2, 3>
  77. >::value));
  78. assert((__vic::is_same<
  79. __vic::make_index_sequence<0>,
  80. __vic::index_sequence<>
  81. >::value));
  82. //using huge_sequence = __vic::make_index_sequence<4096>;
  83. #endif
  84. }
  85. } // namespace
  86. int main()
  87. {
  88. try
  89. {
  90. tests::run();
  91. return 0;
  92. }
  93. catch(const std::exception &ex)
  94. {
  95. std::cerr << ex.what() << '\n';
  96. }
  97. return 1;
  98. }