mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-10-31 20:27:11 +01:00 
			
		
		
		
	Provide a polyfill over std::to_string
				
					
				
			Android apparently does not support `std::to_string`, so we add a small polyfill over it. Right now only the ULP matcher uses it, but we have had plans to use it in `StringMaker<int>` and friends, as it performs a lot better than `std::stringstream` based stringification on MSVC. See #1280 for more details
This commit is contained in:
		| @@ -76,7 +76,11 @@ | ||||
| #       define CATCH_CONFIG_COLOUR_NONE | ||||
| #endif | ||||
|  | ||||
|  | ||||
| //////////////////////////////////////////////////////////////////////////////// | ||||
| // Android somehow still does not support std::to_string | ||||
| #if defined(__ANDROID__) | ||||
| #    define CATCH_INTERNAL_CONFIG_NO_CPP11_TO_STRING | ||||
| #endif | ||||
|  | ||||
| //////////////////////////////////////////////////////////////////////////////// | ||||
| // Not all Windows environments support SEH properly | ||||
| @@ -146,6 +150,10 @@ | ||||
| #   define CATCH_CONFIG_WCHAR | ||||
| #endif | ||||
|  | ||||
| #if !defined(CATCH_INTERNAL_CONFIG_NO_CPP11_TO_STRING) && !defined(CATCH_CONFIG_NO_CPP11_TO_STRING) && !defined(CATCH_CONFIG_CPP11_TO_STRING) | ||||
| #    define CATCH_CONFIG_CPP11_TO_STRING | ||||
| #endif | ||||
|  | ||||
| #if defined(CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS) && !defined(CATCH_CONFIG_NO_CPP17_UNCAUGHT_EXCEPTIONS) && !defined(CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS) | ||||
| #  define CATCH_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS | ||||
| #endif | ||||
|   | ||||
| @@ -6,6 +6,7 @@ | ||||
|  */ | ||||
|  | ||||
| #include "catch_matchers_floating.h" | ||||
| #include "catch_to_string.hpp" | ||||
| #include "catch_tostring.h" | ||||
|  | ||||
| #include <cstdlib> | ||||
| @@ -115,7 +116,7 @@ namespace Floating { | ||||
|     } | ||||
|  | ||||
|     std::string WithinUlpsMatcher::describe() const { | ||||
|         return "is within " + std::to_string(m_ulps) + " ULPs of " + ::Catch::Detail::stringify(m_target) + ((m_type == FloatingPointKind::Float)? "f" : ""); | ||||
|         return "is within " + Catch::to_string(m_ulps) + " ULPs of " + ::Catch::Detail::stringify(m_target) + ((m_type == FloatingPointKind::Float)? "f" : ""); | ||||
|     } | ||||
|  | ||||
| }// namespace Floating | ||||
|   | ||||
							
								
								
									
										28
									
								
								include/internal/catch_to_string.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								include/internal/catch_to_string.hpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,28 @@ | ||||
| /* | ||||
|  *  Created by Martin on 9/5/2018. | ||||
|  * | ||||
|  *  Distributed under the Boost Software License, Version 1.0. (See accompanying | ||||
|  *  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | ||||
|  */ | ||||
| #ifndef TWOBLUECUBES_CATCH_TO_STRING_H_INCLUDED | ||||
| #define TWOBLUECUBES_CATCH_TO_STRING_H_INCLUDED | ||||
|  | ||||
| #include <string> | ||||
|  | ||||
| #include "catch_compiler_capabilities.h" | ||||
| #include "catch_stream.h" | ||||
|  | ||||
| namespace Catch { | ||||
|     template <typename T> | ||||
|     std::string to_string(T const& t) { | ||||
| #if defined(CATCH_CONFIG_CPP11_TO_STRING) | ||||
|         return std::to_string(t); | ||||
| #else | ||||
|         ReusableStringStream rss; | ||||
|         rss << t; | ||||
|         return rss.str(); | ||||
| #endif | ||||
|     } | ||||
| } // end namespace Catch | ||||
|  | ||||
| #endif // TWOBLUECUBES_CATCH_TO_STRING_H_INCLUDED | ||||
		Reference in New Issue
	
	Block a user
	 Martin Hořeňovský
					Martin Hořeňovský