1//===----------------------------------------------------------------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is dual licensed under the MIT and the University of Illinois Open 6// Source Licenses. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10// UNSUPPORTED: c++98, c++03 11 12// <experimental/filesystem> 13 14// class path 15 16// void swap(path& rhs) noexcept; 17 18#include <experimental/filesystem> 19#include <type_traits> 20#include <cassert> 21 22#include "test_macros.h" 23#include "test_iterators.h" 24#include "count_new.hpp" 25#include "filesystem_test_helper.hpp" 26 27namespace fs = std::experimental::filesystem; 28 29struct SwapTestcase { 30 const char* value1; 31 const char* value2; 32}; 33 34#define LONG_STR1 "_THIS_IS_LONG_THIS_IS_LONG_THIS_IS_LONG_THIS_IS_LONG_THIS_IS_LONG_THIS_IS_LONG_THIS_IS_LONG" 35#define LONG_STR2 "_THIS_IS_LONG2_THIS_IS_LONG2_THIS_IS_LONG2_THIS_IS_LONG2_THIS_IS_LONG2_THIS_IS_LONG2_THIS_IS_LONG2" 36const SwapTestcase TestCases[] = 37 { 38 {"", ""} 39 , {"shortstr", LONG_STR1} 40 , {LONG_STR1, "shortstr"} 41 , {LONG_STR1, LONG_STR2} 42 }; 43#undef LONG_STR1 44#undef LONG_STR2 45 46int main() 47{ 48 using namespace fs; 49 { 50 path p; 51 ASSERT_NOEXCEPT(p.swap(p)); 52 ASSERT_SAME_TYPE(void, decltype(p.swap(p))); 53 } 54 for (auto const & TC : TestCases) { 55 path p1(TC.value1); 56 path p2(TC.value2); 57 { 58 DisableAllocationGuard g; 59 p1.swap(p2); 60 } 61 assert(p1 == TC.value2); 62 assert(p2 == TC.value1); 63 { 64 DisableAllocationGuard g; 65 p1.swap(p2); 66 } 67 assert(p1 == TC.value1); 68 assert(p2 == TC.value2); 69 } 70 // self-swap 71 { 72 const char* Val = "aoeuaoeuaoeuaoeuaoeuaoeuaoeuaoeuaoeu"; 73 path p1(Val); 74 assert(p1 == Val); 75 { 76 DisableAllocationGuard g; 77 p1.swap(p1); 78 } 79 assert(p1 == Val); 80 } 81} 82