brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.7 KiB · 392fc40 Raw
97 lines · cpp
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9// <fstream>10 11// template <class charT, class traits = char_traits<charT> >12// class basic_fstream13 14// void swap(basic_fstream& rhs);15 16#include <fstream>17#include <utility>18#include <cassert>19#include "test_macros.h"20#include "platform_support.h"21 22std::pair<std::string, std::string> get_temp_file_names() {23  std::pair<std::string, std::string> names;24  names.first = get_temp_file_name();25 26  // Create the file so the next call to `get_temp_file_name()` doesn't27  // return the same file.28  std::FILE *fd1 = std::fopen(names.first.c_str(), "w");29 30  names.second = get_temp_file_name();31  assert(names.first != names.second);32 33  std::fclose(fd1);34  std::remove(names.first.c_str());35 36  return names;37}38 39int main(int, char**)40{41    std::pair<std::string, std::string> temp_files = get_temp_file_names();42    std::string& temp1 = temp_files.first;43    std::string& temp2 = temp_files.second;44    assert(temp1 != temp2);45    {46        std::fstream fs1(temp1.c_str(), std::ios_base::in | std::ios_base::out47                                                  | std::ios_base::trunc);48        std::fstream fs2(temp2.c_str(), std::ios_base::in | std::ios_base::out49                                                  | std::ios_base::trunc);50        fs1 << 1 << ' ' << 2;51        fs2 << 2 << ' ' << 1;52        fs1.seekg(0);53        fs1.swap(fs2);54        fs1.seekg(0);55        int i;56        fs1 >> i;57        assert(i == 2);58        fs1 >> i;59        assert(i == 1);60        i = 0;61        fs2 >> i;62        assert(i == 1);63        fs2 >> i;64        assert(i == 2);65    }66    std::remove(temp1.c_str());67    std::remove(temp2.c_str());68 69#ifndef TEST_HAS_NO_WIDE_CHARACTERS70    {71        std::wfstream fs1(temp1.c_str(), std::ios_base::in | std::ios_base::out72                                                   | std::ios_base::trunc);73        std::wfstream fs2(temp2.c_str(), std::ios_base::in | std::ios_base::out74                                                   | std::ios_base::trunc);75        fs1 << 1 << ' ' << 2;76        fs2 << 2 << ' ' << 1;77        fs1.seekg(0);78        fs1.swap(fs2);79        fs1.seekg(0);80        int i;81        fs1 >> i;82        assert(i == 2);83        fs1 >> i;84        assert(i == 1);85        i = 0;86        fs2 >> i;87        assert(i == 1);88        fs2 >> i;89        assert(i == 2);90    }91    std::remove(temp1.c_str());92    std::remove(temp2.c_str());93#endif94 95  return 0;96}97