From 061244c8fb00aadf05220b8a6409d8c123cce726 Mon Sep 17 00:00:00 2001 From: Ed Schouten Date: Mon, 16 Mar 2015 17:56:04 +0000 Subject: [PATCH] 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 --- .../pointer.pass.cpp | 33 ++++++++++++------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/test/std/input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic/pointer.pass.cpp b/test/std/input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic/pointer.pass.cpp index 114bba94..b74d99a3 100644 --- a/test/std/input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic/pointer.pass.cpp +++ b/test/std/input.output/iostream.format/output.streams/ostream.formatted/ostream.inserters.arithmetic/pointer.pass.cpp @@ -59,18 +59,27 @@ int main() assert(os.fail()); } { - testbuf 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 sb1; + std::ostream os1(&sb1); + int n1; + os1 << &n1; + assert(os1.good()); + std::string s1(sb1.str()); + + testbuf 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 sb;