nonmember_swap.pass.cpp revision 13aaf422e49fa4b66642966bfc6078b5d9adde12
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// <fstream>
11
12// template <class charT, class traits = char_traits<charT> >
13// class basic_ofstream
14
15// template <class charT, class traits>
16//   void swap(basic_ofstream<charT, traits>& x, basic_ofstream<charT, traits>& y);
17
18#include <fstream>
19#include <cassert>
20
21int main()
22{
23    char temp1[L_tmpnam], temp2[L_tmpnam];
24    tmpnam(temp1);
25    tmpnam(temp2);
26    {
27        std::ofstream fs1(temp1);
28        std::ofstream fs2(temp2);
29        fs1 << 3.25;
30        fs2 << 4.5;
31        swap(fs1, fs2);
32        fs1 << ' ' << 3.25;
33        fs2 << ' ' << 4.5;
34    }
35    {
36        std::ifstream fs(temp1);
37        double x = 0;
38        fs >> x;
39        assert(x == 3.25);
40        fs >> x;
41        assert(x == 4.5);
42    }
43    remove(temp1);
44    {
45        std::ifstream fs(temp2);
46        double x = 0;
47        fs >> x;
48        assert(x == 4.5);
49        fs >> x;
50        assert(x == 3.25);
51    }
52    remove(temp2);
53    {
54        std::wofstream fs1(temp1);
55        std::wofstream fs2(temp2);
56        fs1 << 3.25;
57        fs2 << 4.5;
58        swap(fs1, fs2);
59        fs1 << ' ' << 3.25;
60        fs2 << ' ' << 4.5;
61    }
62    {
63        std::wifstream fs(temp1);
64        double x = 0;
65        fs >> x;
66        assert(x == 3.25);
67        fs >> x;
68        assert(x == 4.5);
69    }
70    remove(temp1);
71    {
72        std::wifstream fs(temp2);
73        double x = 0;
74        fs >> x;
75        assert(x == 4.5);
76        fs >> x;
77        assert(x == 3.25);
78    }
79    remove(temp2);
80}
81