refs #12, added more tests to recursive directory iterator, fixed additional issue with pop().

This commit is contained in:
Steffen Schuemann 2019-05-04 08:47:41 +02:00
parent cce8c431c2
commit 5ea334899a
2 changed files with 65 additions and 19 deletions

View File

@ -4885,10 +4885,11 @@ GHC_INLINE void recursive_directory_iterator::pop(std::error_code& ec)
*this = recursive_directory_iterator();
}
else {
while (depth() && _impl->_dir_iter_stack.top() == directory_iterator()) {
do {
_impl->_dir_iter_stack.pop();
_impl->_dir_iter_stack.top().increment(ec);
}
while (depth() && _impl->_dir_iter_stack.top() == directory_iterator());
}
}

View File

@ -36,6 +36,7 @@
#include <functional>
#include <iomanip>
#include <iostream>
#include <map>
#include <random>
#include <sstream>
#include <thread>
@ -1205,29 +1206,73 @@ TEST_CASE("30.10.14 class recursive_directory_iterator", "[filesystem][recursive
fs::recursive_directory_iterator rd5;
rd5 = rd4;
}
/*
if(1) {
fs::path d = "..";
int maxDepth = 2;
fs::recursive_directory_iterator dit(d);
std::cout << d << std::endl;
for(auto & f : dit) {
#if 1
if(dit.depth()<=maxDepth) {
std::cout << dit.depth() << ": " << f.path() << std::endl;
{
TemporaryDirectory t(TempOpt::change_path);
generateFile("a");
fs::create_directory("d1");
fs::create_directory("d1/d2");
generateFile("d1/b");
generateFile("d1/c");
generateFile("d1/d2/d");
generateFile("e");
auto iter = fs::recursive_directory_iterator(".");
std::multimap<std::string, int> result;
while(iter != fs::recursive_directory_iterator()) {
result.insert(std::make_pair(iter->path().string(), iter.depth()));
++iter;
}
std::stringstream os;
for(auto p : result) {
os << "[" << p.first << "," << p.second << "],";
}
CHECK(os.str() == "[./a,0],[./d1,0],[./d1/b,1],[./d1/c,1],[./d1/d2,1],[./d1/d2/d,2],[./e,0],");
}
{
TemporaryDirectory t(TempOpt::change_path);
generateFile("a");
fs::create_directory("d1");
fs::create_directory("d1/d2");
generateFile("d1/d2/b");
generateFile("e");
auto iter = fs::recursive_directory_iterator(".");
std::multimap<std::string, int> result;
while(iter != fs::recursive_directory_iterator()) {
result.insert(std::make_pair(iter->path().string(), iter.depth()));
if(iter->path() == "./d1/d2") {
iter.disable_recursion_pending();
}
++iter;
}
std::stringstream os;
for(auto p : result) {
os << "[" << p.first << "," << p.second << "],";
}
CHECK(os.str() == "[./a,0],[./d1,0],[./d1/d2,1],[./e,0],");
}
{
TemporaryDirectory t(TempOpt::change_path);
generateFile("a");
fs::create_directory("d1");
fs::create_directory("d1/d2");
generateFile("d1/d2/b");
generateFile("e");
auto iter = fs::recursive_directory_iterator(".");
std::multimap<std::string, int> result;
while(iter != fs::recursive_directory_iterator()) {
result.insert(std::make_pair(iter->path().string(), iter.depth()));
if(iter->path() == "./d1/d2") {
iter.pop();
}
else {
dit.pop();
++iter;
}
#else
std::cout << dit.depth() << ": " << f.path() << std::endl;
if(dit.depth()>maxDepth) {
dit.disable_recursion_pending();
}
#endif
}
std::stringstream os;
for(auto p : result) {
os << "[" << p.first << "," << p.second << "],";
}
CHECK(os.str() == "[./a,0],[./d1,0],[./d1/d2,1],[./e,0],");
}
*/
}
TEST_CASE("30.10.15.1 absolute", "[filesystem][operations][fs.op.absolute]")