Don't attempt to validate the output of %p.

In one of the ostream tests we attempt to validate whether the output of
%p is correct. This is actually outside the scope of libc++, for the
%reason that the format of %p is implementation defined. Change the test
%to validate that the output of %p is non-empty and is different when
%given two unequal addresses.

Differential Revision:	http://reviews.llvm.org/D8354
Reviewed by:	marshall


git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@232390 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Ed Schouten 2015-03-16 17:56:04 +00:00
parent aa8a52c934
commit 061244c8fb

View File

@ -59,18 +59,27 @@ int main()
assert(os.fail());
}
{
testbuf<char> sb;
std::ostream os(&sb);
const void* n = 0;
os << n;
assert(os.good());
// %p is implementation defined.
// On some platforms (Windows), it's a hex number without
// any leading 0x like prefix.
// In that format, we assume a null pointer will yield 2 '0' hex digits
// for each 8 bits of address space.
assert(sb.str() == "0x0" || sb.str() == "(nil)" ||
sb.str() == std::string(sizeof(void*)*2,'0'));
testbuf<char> sb1;
std::ostream os1(&sb1);
int n1;
os1 << &n1;
assert(os1.good());
std::string s1(sb1.str());
testbuf<char> sb2;
std::ostream os2(&sb2);
int n2;
os2 << &n2;
assert(os2.good());
std::string s2(sb2.str());
// %p is implementation defined. Instead of validating the
// output, at least ensure that it does not generate an empty
// string. Also make sure that given two distinct addresses, the
// output of %p is different.
assert(!s1.empty());
assert(!s2.empty());
assert(s1 != s2);
}
{
testbuf<char> sb;