[libc++] Fix tests on musl (#85085)
One or two of the tests need slight tweaks to make them pass when building with musl. rdar://118885724
This commit is contained in:
committed by
GitHub
parent
66dd38e8df
commit
b61fb18456
@@ -44,14 +44,19 @@ int main(int, char**)
|
||||
errno = E2BIG; // something that message will never generate
|
||||
const std::error_category& e_cat1 = std::generic_category();
|
||||
const std::string msg = e_cat1.message(-1);
|
||||
// Exact message format varies by platform.
|
||||
#if defined(_AIX)
|
||||
LIBCPP_ASSERT(msg.rfind("Error -1 occurred", 0) == 0);
|
||||
#elif defined(_NEWLIB_VERSION)
|
||||
LIBCPP_ASSERT(msg.empty());
|
||||
#else
|
||||
LIBCPP_ASSERT(msg.rfind("Unknown error", 0) == 0);
|
||||
// Exact message format varies by platform. We can't detect
|
||||
// some of these (Musl in particular) using the preprocessor,
|
||||
// so accept a few sensible messages. Newlib unfortunately
|
||||
// responds with an empty message, which we probably want to
|
||||
// treat as a failure code otherwise, but we can detect that
|
||||
// with the preprocessor.
|
||||
LIBCPP_ASSERT(msg.rfind("Error -1 occurred", 0) == 0 // AIX
|
||||
|| msg.rfind("No error information", 0) == 0 // Musl
|
||||
|| msg.rfind("Unknown error", 0) == 0 // Glibc
|
||||
#if defined(_NEWLIB_VERSION)
|
||||
|| msg.empty()
|
||||
#endif
|
||||
);
|
||||
assert(errno == E2BIG);
|
||||
}
|
||||
|
||||
|
||||
@@ -50,14 +50,19 @@ int main(int, char**) {
|
||||
errno = E2BIG; // something that message will never generate
|
||||
const std::error_category& e_cat1 = std::system_category();
|
||||
const std::string msg = e_cat1.message(-1);
|
||||
// Exact message format varies by platform.
|
||||
#if defined(_AIX)
|
||||
LIBCPP_ASSERT(msg.rfind("Error -1 occurred", 0) == 0);
|
||||
#elif defined(_NEWLIB_VERSION)
|
||||
LIBCPP_ASSERT(msg.empty());
|
||||
#else
|
||||
LIBCPP_ASSERT(msg.rfind("Unknown error", 0) == 0);
|
||||
// Exact message format varies by platform. We can't detect
|
||||
// some of these (Musl in particular) using the preprocessor,
|
||||
// so accept a few sensible messages. Newlib unfortunately
|
||||
// responds with an empty message, which we probably want to
|
||||
// treat as a failure code otherwise, but we can detect that
|
||||
// with the preprocessor.
|
||||
LIBCPP_ASSERT(msg.rfind("Error -1 occurred", 0) == 0 // AIX
|
||||
|| msg.rfind("No error information", 0) == 0 // Musl
|
||||
|| msg.rfind("Unknown error", 0) == 0 // Glibc
|
||||
#if defined(_NEWLIB_VERSION)
|
||||
|| msg.empty()
|
||||
#endif
|
||||
);
|
||||
assert(errno == E2BIG);
|
||||
}
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#include <locale>
|
||||
#include <ios>
|
||||
#include <cassert>
|
||||
#include <cstdio>
|
||||
#include <streambuf>
|
||||
#include <cmath>
|
||||
#include "test_macros.h"
|
||||
@@ -8934,11 +8935,12 @@ void test4()
|
||||
char str[200];
|
||||
std::locale lc = std::locale::classic();
|
||||
std::locale lg(lc, new my_numpunct);
|
||||
#ifdef _AIX
|
||||
std::string inf = "INF";
|
||||
#else
|
||||
std::string inf = "inf";
|
||||
#endif
|
||||
|
||||
std::string inf;
|
||||
|
||||
// This should match the underlying C library
|
||||
std::sprintf(str, "%f", INFINITY);
|
||||
inf = str;
|
||||
|
||||
const my_facet f(1);
|
||||
{
|
||||
@@ -10727,24 +10729,27 @@ void test5()
|
||||
std::locale lc = std::locale::classic();
|
||||
std::locale lg(lc, new my_numpunct);
|
||||
const my_facet f(1);
|
||||
#if defined(_AIX)
|
||||
std::string nan= "NaNQ";
|
||||
std::string NaN = "NaNQ";
|
||||
std::string nan_padding25 = "*********************";
|
||||
std::string pnan_sign = "+";
|
||||
std::string pnan_padding25 = "********************";
|
||||
#else
|
||||
std::string nan= "nan";
|
||||
std::string NaN = "NAN";
|
||||
std::string nan_padding25 = "**********************";
|
||||
#if defined(TEST_HAS_GLIBC) || defined(_WIN32)
|
||||
std::string pnan_sign = "+";
|
||||
std::string pnan_padding25 = "*********************";
|
||||
#else
|
||||
std::string pnan_sign = "";
|
||||
std::string pnan_padding25 = "**********************";
|
||||
#endif
|
||||
#endif
|
||||
|
||||
std::string nan;
|
||||
std::string NaN;
|
||||
std::string pnan_sign;
|
||||
|
||||
// The output here depends on the underlying C library, so work out what
|
||||
// that does.
|
||||
std::sprintf(str, "%f", std::nan(""));
|
||||
nan = str;
|
||||
|
||||
std::sprintf(str, "%F", std::nan(""));
|
||||
NaN = str;
|
||||
|
||||
std::sprintf(str, "%+f", std::nan(""));
|
||||
if (str[0] == '+') {
|
||||
pnan_sign = "+";
|
||||
}
|
||||
|
||||
std::string nan_padding25 = std::string(25 - nan.length(), '*');
|
||||
std::string pnan_padding25 = std::string(25 - nan.length() - pnan_sign.length(), '*');
|
||||
|
||||
{
|
||||
long double v = std::nan("");
|
||||
std::ios ios(0);
|
||||
|
||||
Reference in New Issue
Block a user