to_string.pass.cpp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. //===----------------------------------------------------------------------===//
  2. //
  3. // The LLVM Compiler Infrastructure
  4. //
  5. // This file is distributed under the University of Illinois Open Source
  6. // License. See LICENSE.TXT for details.
  7. //
  8. //===----------------------------------------------------------------------===//
  9. // <string>
  10. // string to_string(int val);
  11. // string to_string(unsigned val);
  12. // string to_string(long val);
  13. // string to_string(unsigned long val);
  14. // string to_string(long long val);
  15. // string to_string(unsigned long long val);
  16. // string to_string(float val);
  17. // string to_string(double val);
  18. // string to_string(long double val);
  19. #include <string>
  20. #include <cassert>
  21. #include <sstream>
  22. template <class T>
  23. void
  24. test_signed()
  25. {
  26. {
  27. std::string s = std::to_string(T(0));
  28. assert(s.size() == 1);
  29. assert(s[s.size()] == 0);
  30. assert(s == "0");
  31. }
  32. {
  33. std::string s = std::to_string(T(12345));
  34. assert(s.size() == 5);
  35. assert(s[s.size()] == 0);
  36. assert(s == "12345");
  37. }
  38. {
  39. std::string s = std::to_string(T(-12345));
  40. assert(s.size() == 6);
  41. assert(s[s.size()] == 0);
  42. assert(s == "-12345");
  43. }
  44. {
  45. std::string s = std::to_string(std::numeric_limits<T>::max());
  46. assert(s.size() == std::numeric_limits<T>::digits10 + 1);
  47. std::istringstream is(s);
  48. T t(0);
  49. is >> t;
  50. assert(t == std::numeric_limits<T>::max());
  51. }
  52. {
  53. std::string s = std::to_string(std::numeric_limits<T>::min());
  54. std::istringstream is(s);
  55. T t(0);
  56. is >> t;
  57. assert(t == std::numeric_limits<T>::min());
  58. }
  59. }
  60. template <class T>
  61. void
  62. test_unsigned()
  63. {
  64. {
  65. std::string s = std::to_string(T(0));
  66. assert(s.size() == 1);
  67. assert(s[s.size()] == 0);
  68. assert(s == "0");
  69. }
  70. {
  71. std::string s = std::to_string(T(12345));
  72. assert(s.size() == 5);
  73. assert(s[s.size()] == 0);
  74. assert(s == "12345");
  75. }
  76. {
  77. std::string s = std::to_string(std::numeric_limits<T>::max());
  78. assert(s.size() == std::numeric_limits<T>::digits10 + 1);
  79. std::istringstream is(s);
  80. T t(0);
  81. is >> t;
  82. assert(t == std::numeric_limits<T>::max());
  83. }
  84. }
  85. template <class T>
  86. void
  87. test_float()
  88. {
  89. {
  90. std::string s = std::to_string(T(0));
  91. assert(s.size() == 8);
  92. assert(s[s.size()] == 0);
  93. assert(s == "0.000000");
  94. }
  95. {
  96. std::string s = std::to_string(T(12345));
  97. assert(s.size() == 12);
  98. assert(s[s.size()] == 0);
  99. assert(s == "12345.000000");
  100. }
  101. {
  102. std::string s = std::to_string(T(-12345));
  103. assert(s.size() == 13);
  104. assert(s[s.size()] == 0);
  105. assert(s == "-12345.000000");
  106. }
  107. }
  108. int main()
  109. {
  110. test_signed<int>();
  111. test_signed<long>();
  112. test_signed<long long>();
  113. test_unsigned<unsigned>();
  114. test_unsigned<unsigned long>();
  115. test_unsigned<unsigned long long>();
  116. test_float<float>();
  117. test_float<double>();
  118. test_float<long double>();
  119. }