diff options
author | Eric Fiselier <eric@efcs.ca> | 2016-06-18 02:11:48 +0000 |
---|---|---|
committer | Eric Fiselier <eric@efcs.ca> | 2016-06-18 02:11:48 +0000 |
commit | ccc9826f566ddbc1bc977a9e0a2ef218ea485067 (patch) | |
tree | 20279df27be5ba3ab4cbd7bba5d31d758151475e /libcxx/test/std/experimental/filesystem/class.path/path.itr/iterator.pass.cpp | |
parent | 1040b4479cff239dcb78ad14d1a0f2bde6557f55 (diff) | |
download | bcm5719-llvm-ccc9826f566ddbc1bc977a9e0a2ef218ea485067.tar.gz bcm5719-llvm-ccc9826f566ddbc1bc977a9e0a2ef218ea485067.zip |
Add additional tests in an attempt to diagnose ARM test failures.
Currently 4 tests are failing on the ARM buildbot. To try and diagnose each
of the failures this patch does the following:
1) path.itr/iterator.pass.cpp
* Temporarily print iteration sequence to see where its failing.
2) path.native.obs/string_alloc.pass.cpp
* Remove test that ::new is not called when constructing a short string
that requires a conversion. Since during the conversion global locale
objects might be constructed.
3) fs.op.funcs/space.pass.cpp
* Explicitly use uintmax_t in the implementation of space, hopefully
preventing possible overflows.
* Add additional tests that check for overflow is the calculation of the
space_info values.
* Add additional tests for the values returned from statfvs.
4) fs.op.funcs/last_write_time.pass.cpp
* No changes made yet.
llvm-svn: 273075
Diffstat (limited to 'libcxx/test/std/experimental/filesystem/class.path/path.itr/iterator.pass.cpp')
-rw-r--r-- | libcxx/test/std/experimental/filesystem/class.path/path.itr/iterator.pass.cpp | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/libcxx/test/std/experimental/filesystem/class.path/path.itr/iterator.pass.cpp b/libcxx/test/std/experimental/filesystem/class.path/path.itr/iterator.pass.cpp index 4aa8ebc25d5..c5c46f68ac1 100644 --- a/libcxx/test/std/experimental/filesystem/class.path/path.itr/iterator.pass.cpp +++ b/libcxx/test/std/experimental/filesystem/class.path/path.itr/iterator.pass.cpp @@ -24,6 +24,8 @@ #include <type_traits> #include <cassert> +#include <iostream> + #include "test_macros.h" #include "filesystem_test_helper.hpp" @@ -36,6 +38,29 @@ std::reverse_iterator<It> mkRev(It it) { } +template <class Iter1, class Iter2> +bool checkCollectionsEqualVerbose( + Iter1 start1, Iter1 const end1 + , Iter2 start2, Iter2 const end2 + ) +{ + while (start1 != end1 && start2 != end2) { + std::cout << "Got start1 = " << *start1 << "\n" + << "Got start2 = " << *start2 << "\n"; + if (*start1 != *start2) { + return false; + } + ++start1; ++start2; + } + if (start1 != end1) { + std::cout << "Got start1 = " << *start1 << " but expected end1\n"; + } + if (start2 != end2) { + std::cout << "Got start2 = " << *start2 << " but expected end2\n"; + } + return (start1 == end1 && start2 == end2); +} + void checkIteratorConcepts() { using namespace fs; using It = path::iterator; @@ -87,14 +112,18 @@ void checkBeginEndBasic() { path p("//root_name//first_dir////second_dir"); const path expect[] = {"//root_name", "/", "first_dir", "second_dir"}; assert(checkCollectionsEqual(p.begin(), p.end(), std::begin(expect), std::end(expect))); - assert(checkCollectionsEqual(mkRev(p.end()), mkRev(p.begin()), mkRev(std::end(expect)), mkRev(std::begin(expect)))); + assert(checkCollectionsEqualVerbose(mkRev(p.end()), mkRev(p.begin()), + mkRev(std::end(expect)), + mkRev(std::begin(expect)))); } { path p("////foo/bar/baz///"); const path expect[] = {"/", "foo", "bar", "baz", "."}; assert(checkCollectionsEqual(p.begin(), p.end(), std::begin(expect), std::end(expect))); - assert(checkCollectionsEqual(mkRev(p.end()), mkRev(p.begin()), mkRev(std::end(expect)), mkRev(std::begin(expect)))); + assert(checkCollectionsEqual(mkRev(p.end()), mkRev(p.begin()), + mkRev(std::end(expect)), mkRev(std::begin(expect)))); } + } int main() { |