Commit 69af1c04 by Jonathan Wakely Committed by Jonathan Wakely

Adjust precision of filesystem::last_write_time tests

	* testsuite/experimental/filesystem/iterators/directory_iterator.cc:
	Use end() function to get end iterator.
	* testsuite/experimental/filesystem/iterators/pop.cc: Remove printf
	statements that were present for debugging.
	* testsuite/experimental/filesystem/iterators/
	recursive_directory_iterator.cc: Use end() function to get end
	iterator.
	* testsuite/experimental/filesystem/operations/last_write_time.cc:
	Only require file timestamps to be accurate to one second.

From-SVN: r241616
parent ddb92ab9
2016-10-27 Jonathan Wakely <jwakely@redhat.com>
* testsuite/experimental/filesystem/iterators/directory_iterator.cc:
Use end() function to get end iterator.
* testsuite/experimental/filesystem/iterators/pop.cc: Remove printf
statements that were present for debugging.
* testsuite/experimental/filesystem/iterators/
recursive_directory_iterator.cc: Use end() function to get end
iterator.
* testsuite/experimental/filesystem/operations/last_write_time.cc:
Only require file timestamps to be accurate to one second.
2016-10-26 François Dumont <fdumont@gcc.gnu.org> 2016-10-26 François Dumont <fdumont@gcc.gnu.org>
* include/bits/stl_map.h (map()): Make default. * include/bits/stl_map.h (map()): Make default.
......
...@@ -34,14 +34,14 @@ test01() ...@@ -34,14 +34,14 @@ test01()
const auto p = __gnu_test::nonexistent_path(); const auto p = __gnu_test::nonexistent_path();
fs::directory_iterator iter(p, ec); fs::directory_iterator iter(p, ec);
VERIFY( ec ); VERIFY( ec );
VERIFY( iter == fs::directory_iterator() ); VERIFY( iter == end(iter) );
// Test empty directory. // Test empty directory.
create_directory(p, fs::current_path(), ec); create_directory(p, fs::current_path(), ec);
VERIFY( !ec ); VERIFY( !ec );
iter = fs::directory_iterator(p, ec); iter = fs::directory_iterator(p, ec);
VERIFY( !ec ); VERIFY( !ec );
VERIFY( iter == fs::directory_iterator() ); VERIFY( iter == end(iter) );
// Test non-empty directory. // Test non-empty directory.
create_directory_symlink(p, p / "l", ec); create_directory_symlink(p, p / "l", ec);
...@@ -51,20 +51,20 @@ test01() ...@@ -51,20 +51,20 @@ test01()
VERIFY( iter != fs::directory_iterator() ); VERIFY( iter != fs::directory_iterator() );
VERIFY( iter->path() == p/"l" ); VERIFY( iter->path() == p/"l" );
++iter; ++iter;
VERIFY( iter == fs::directory_iterator() ); VERIFY( iter == end(iter) );
// Test inaccessible directory. // Test inaccessible directory.
permissions(p, fs::perms::none, ec); permissions(p, fs::perms::none, ec);
VERIFY( !ec ); VERIFY( !ec );
iter = fs::directory_iterator(p, ec); iter = fs::directory_iterator(p, ec);
VERIFY( ec ); VERIFY( ec );
VERIFY( iter == fs::directory_iterator() ); VERIFY( iter == end(iter) );
// Test inaccessible directory, skipping permission denied. // Test inaccessible directory, skipping permission denied.
const auto opts = fs::directory_options::skip_permission_denied; const auto opts = fs::directory_options::skip_permission_denied;
iter = fs::directory_iterator(p, opts, ec); iter = fs::directory_iterator(p, opts, ec);
VERIFY( !ec ); VERIFY( !ec );
VERIFY( iter == fs::directory_iterator() ); VERIFY( iter == end(iter) );
permissions(p, fs::perms::owner_all, ec); permissions(p, fs::perms::owner_all, ec);
remove_all(p, ec); remove_all(p, ec);
...@@ -82,12 +82,12 @@ test02() ...@@ -82,12 +82,12 @@ test02()
// Test post-increment (libstdc++/71005) // Test post-increment (libstdc++/71005)
auto iter = fs::directory_iterator(p, ec); auto iter = fs::directory_iterator(p, ec);
VERIFY( !ec ); VERIFY( !ec );
VERIFY( iter != fs::directory_iterator() ); VERIFY( iter != end(iter) );
const auto entry1 = *iter; const auto entry1 = *iter;
const auto entry2 = *iter++; const auto entry2 = *iter++;
VERIFY( entry1 == entry2 ); VERIFY( entry1 == entry2 );
VERIFY( entry1.path() == p/"l" ); VERIFY( entry1.path() == p/"l" );
VERIFY( iter == fs::directory_iterator() ); VERIFY( iter == end(iter) );
remove_all(p, ec); remove_all(p, ec);
} }
......
...@@ -84,14 +84,10 @@ test03() ...@@ -84,14 +84,10 @@ test03()
std::advance(dir, i); std::advance(dir, i);
int expected_depth = i; int expected_depth = i;
VERIFY( dir.depth() == expected_depth ); VERIFY( dir.depth() == expected_depth );
__builtin_printf("%d %d %s\n", i, dir.depth(), dir->path().c_str());
dir.pop(ec); dir.pop(ec);
VERIFY( !ec ); VERIFY( !ec );
if (dir != end(dir)) if (dir != end(dir))
{
__builtin_printf("%d %d %s\n", i, dir.depth(), dir->path().c_str());
VERIFY( dir.depth() == (expected_depth - 1) ); VERIFY( dir.depth() == (expected_depth - 1) );
}
dir = fs::recursive_directory_iterator(p); dir = fs::recursive_directory_iterator(p);
std::advance(dir, i); std::advance(dir, i);
......
...@@ -34,39 +34,39 @@ test01() ...@@ -34,39 +34,39 @@ test01()
const auto p = __gnu_test::nonexistent_path(); const auto p = __gnu_test::nonexistent_path();
fs::recursive_directory_iterator iter(p, ec); fs::recursive_directory_iterator iter(p, ec);
VERIFY( ec ); VERIFY( ec );
VERIFY( iter == fs::recursive_directory_iterator() ); VERIFY( iter == end(iter) );
// Test empty directory. // Test empty directory.
create_directory(p, fs::current_path(), ec); create_directory(p, fs::current_path(), ec);
VERIFY( !ec ); VERIFY( !ec );
iter = fs::recursive_directory_iterator(p, ec); iter = fs::recursive_directory_iterator(p, ec);
VERIFY( !ec ); VERIFY( !ec );
VERIFY( iter == fs::recursive_directory_iterator() ); VERIFY( iter == end(iter) );
// Test non-empty directory. // Test non-empty directory.
create_directories(p / "d1/d2"); create_directories(p / "d1/d2");
VERIFY( !ec ); VERIFY( !ec );
iter = fs::recursive_directory_iterator(p, ec); iter = fs::recursive_directory_iterator(p, ec);
VERIFY( !ec ); VERIFY( !ec );
VERIFY( iter != fs::recursive_directory_iterator() ); VERIFY( iter != end(iter) );
VERIFY( iter->path() == p/"d1" ); VERIFY( iter->path() == p/"d1" );
++iter; ++iter;
VERIFY( iter->path() == p/"d1/d2" ); VERIFY( iter->path() == p/"d1/d2" );
++iter; ++iter;
VERIFY( iter == fs::recursive_directory_iterator() ); VERIFY( iter == end(iter) );
// Test inaccessible directory. // Test inaccessible directory.
permissions(p, fs::perms::none, ec); permissions(p, fs::perms::none, ec);
VERIFY( !ec ); VERIFY( !ec );
iter = fs::recursive_directory_iterator(p, ec); iter = fs::recursive_directory_iterator(p, ec);
VERIFY( ec ); VERIFY( ec );
VERIFY( iter == fs::recursive_directory_iterator() ); VERIFY( iter == end(iter) );
// Test inaccessible directory, skipping permission denied. // Test inaccessible directory, skipping permission denied.
const auto opts = fs::directory_options::skip_permission_denied; const auto opts = fs::directory_options::skip_permission_denied;
iter = fs::recursive_directory_iterator(p, opts, ec); iter = fs::recursive_directory_iterator(p, opts, ec);
VERIFY( !ec ); VERIFY( !ec );
VERIFY( iter == fs::recursive_directory_iterator() ); VERIFY( iter == end(iter) );
// Test inaccessible sub-directory. // Test inaccessible sub-directory.
permissions(p, fs::perms::owner_all, ec); permissions(p, fs::perms::owner_all, ec);
...@@ -75,24 +75,24 @@ test01() ...@@ -75,24 +75,24 @@ test01()
VERIFY( !ec ); VERIFY( !ec );
iter = fs::recursive_directory_iterator(p, ec); iter = fs::recursive_directory_iterator(p, ec);
VERIFY( !ec ); VERIFY( !ec );
VERIFY( iter != fs::recursive_directory_iterator() ); VERIFY( iter != end(iter) );
VERIFY( iter->path() == p/"d1" ); VERIFY( iter->path() == p/"d1" );
++iter; // should recurse into d1 ++iter; // should recurse into d1
VERIFY( iter->path() == p/"d1/d2" ); VERIFY( iter->path() == p/"d1/d2" );
iter.increment(ec); // should fail to recurse into p/d1/d2 iter.increment(ec); // should fail to recurse into p/d1/d2
VERIFY( ec ); VERIFY( ec );
VERIFY( iter == fs::recursive_directory_iterator() ); VERIFY( iter == end(iter) );
// Test inaccessible sub-directory, skipping permission denied. // Test inaccessible sub-directory, skipping permission denied.
iter = fs::recursive_directory_iterator(p, opts, ec); iter = fs::recursive_directory_iterator(p, opts, ec);
VERIFY( !ec ); VERIFY( !ec );
VERIFY( iter != fs::recursive_directory_iterator() ); VERIFY( iter != end(iter) );
VERIFY( iter->path() == p/"d1" ); VERIFY( iter->path() == p/"d1" );
++iter; // should recurse into d1 ++iter; // should recurse into d1
VERIFY( iter->path() == p/"d1/d2" ); VERIFY( iter->path() == p/"d1/d2" );
iter.increment(ec); // should fail to recurse into p/d1/d2, so skip it iter.increment(ec); // should fail to recurse into p/d1/d2, so skip it
VERIFY( !ec ); VERIFY( !ec );
VERIFY( iter == fs::recursive_directory_iterator() ); VERIFY( iter == end(iter) );
permissions(p/"d1/d2", fs::perms::owner_all, ec); permissions(p/"d1/d2", fs::perms::owner_all, ec);
remove_all(p, ec); remove_all(p, ec);
...@@ -109,7 +109,7 @@ test02() ...@@ -109,7 +109,7 @@ test02()
// Test post-increment (libstdc++/71005) // Test post-increment (libstdc++/71005)
auto iter = fs::recursive_directory_iterator(p, ec); auto iter = fs::recursive_directory_iterator(p, ec);
VERIFY( !ec ); VERIFY( !ec );
VERIFY( iter != fs::recursive_directory_iterator() ); VERIFY( iter != end(iter) );
const auto entry1 = *iter; const auto entry1 = *iter;
const auto entry2 = *iter++; const auto entry2 = *iter++;
VERIFY( entry1 == entry2 ); VERIFY( entry1 == entry2 );
...@@ -118,7 +118,7 @@ test02() ...@@ -118,7 +118,7 @@ test02()
const auto entry4 = *iter++; const auto entry4 = *iter++;
VERIFY( entry3 == entry4 ); VERIFY( entry3 == entry4 );
VERIFY( entry3.path() == p/"d1/d2" ); VERIFY( entry3.path() == p/"d1/d2" );
VERIFY( iter == fs::recursive_directory_iterator() ); VERIFY( iter == end(iter) );
remove_all(p, ec); remove_all(p, ec);
} }
...@@ -145,7 +145,7 @@ test04() ...@@ -145,7 +145,7 @@ test04()
{ {
// libstdc++/71004 // libstdc++/71004
const fs::recursive_directory_iterator it; const fs::recursive_directory_iterator it;
VERIFY( it == fs::recursive_directory_iterator() ); VERIFY( it == end(it) );
} }
void void
......
...@@ -32,13 +32,13 @@ ...@@ -32,13 +32,13 @@
# include <utime.h> # include <utime.h>
#endif #endif
using time_type = std::experimental::filesystem::file_time_type;
void void
test01() test01()
{ {
// read times // read times
using time_type = std::experimental::filesystem::file_time_type;
auto p = __gnu_test::nonexistent_path(); auto p = __gnu_test::nonexistent_path();
std::error_code ec; std::error_code ec;
time_type mtime = last_write_time(p, ec); time_type mtime = last_write_time(p, ec);
...@@ -105,13 +105,19 @@ test01() ...@@ -105,13 +105,19 @@ test01()
#endif #endif
} }
bool approx_equal(time_type file_time, time_type expected)
{
auto delta = expected - file_time;
if (delta < delta.zero())
delta = -delta;
return delta < std::chrono::seconds(1);
}
void void
test02() test02()
{ {
// write times // write times
using time_type = std::experimental::filesystem::file_time_type;
__gnu_test::scoped_file f; __gnu_test::scoped_file f;
std::error_code ec; std::error_code ec;
time_type time; time_type time;
...@@ -119,27 +125,27 @@ test02() ...@@ -119,27 +125,27 @@ test02()
time = last_write_time(f.path); time = last_write_time(f.path);
last_write_time(f.path, time, ec); last_write_time(f.path, time, ec);
VERIFY( !ec ); VERIFY( !ec );
VERIFY( last_write_time(f.path) == time ); VERIFY( approx_equal(last_write_time(f.path), time) );
time -= std::chrono::milliseconds(1000 * 60 * 10 + 15); time -= std::chrono::milliseconds(1000 * 60 * 10 + 15);
last_write_time(f.path, time, ec); last_write_time(f.path, time, ec);
VERIFY( !ec ); VERIFY( !ec );
VERIFY( last_write_time(f.path) == time ); VERIFY( approx_equal(last_write_time(f.path), time) );
time += std::chrono::milliseconds(1000 * 60 * 20 + 15); time += std::chrono::milliseconds(1000 * 60 * 20 + 15);
last_write_time(f.path, time, ec); last_write_time(f.path, time, ec);
VERIFY( !ec ); VERIFY( !ec );
VERIFY( last_write_time(f.path) == time ); VERIFY( approx_equal(last_write_time(f.path), time) );
time = time_type(); time = time_type();
last_write_time(f.path, time, ec); last_write_time(f.path, time, ec);
VERIFY( !ec ); VERIFY( !ec );
VERIFY( last_write_time(f.path) == time ); VERIFY( approx_equal(last_write_time(f.path), time) );
time -= std::chrono::milliseconds(1000 * 60 * 10 + 15); time -= std::chrono::milliseconds(1000 * 60 * 10 + 15);
last_write_time(f.path, time, ec); last_write_time(f.path, time, ec);
VERIFY( !ec ); VERIFY( !ec );
VERIFY( last_write_time(f.path) == time ); VERIFY( approx_equal(last_write_time(f.path), time) );
} }
int int
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment