summaryrefslogtreecommitdiffstats
path: root/libcxx/test/std/experimental/filesystem/class.path/path.itr/iterator.pass.cpp
diff options
context:
space:
mode:
authorEric Fiselier <eric@efcs.ca>2016-06-18 02:11:48 +0000
committerEric Fiselier <eric@efcs.ca>2016-06-18 02:11:48 +0000
commitccc9826f566ddbc1bc977a9e0a2ef218ea485067 (patch)
tree20279df27be5ba3ab4cbd7bba5d31d758151475e /libcxx/test/std/experimental/filesystem/class.path/path.itr/iterator.pass.cpp
parent1040b4479cff239dcb78ad14d1a0f2bde6557f55 (diff)
downloadbcm5719-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.cpp33
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() {
OpenPOWER on IntegriCloud