brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.6 KiB · 831d53c Raw
106 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_ofstream13 14// template <class charT, class traits>15//   void swap(basic_ofstream<charT, traits>& x, basic_ofstream<charT, traits>& y);16 17#include <fstream>18#include <utility>19#include <cassert>20#include "test_macros.h"21#include "platform_support.h"22 23std::pair<std::string, std::string> get_temp_file_names() {24  std::pair<std::string, std::string> names;25  names.first = get_temp_file_name();26 27  // Create the file so the next call to `get_temp_file_name()` doesn't28  // return the same file.29  std::FILE *fd1 = std::fopen(names.first.c_str(), "w");30 31  names.second = get_temp_file_name();32  assert(names.first != names.second);33 34  std::fclose(fd1);35  std::remove(names.first.c_str());36 37  return names;38}39 40int main(int, char**)41{42    std::pair<std::string, std::string> temp_files = get_temp_file_names();43    std::string& temp1 = temp_files.first;44    std::string& temp2 = temp_files.second;45    assert(temp1 != temp2);46    {47        std::ofstream fs1(temp1.c_str());48        std::ofstream fs2(temp2.c_str());49        fs1 << 3.25;50        fs2 << 4.5;51        swap(fs1, fs2);52        fs1 << ' ' << 3.25;53        fs2 << ' ' << 4.5;54    }55    {56        std::ifstream fs(temp1.c_str());57        double x = 0;58        fs >> x;59        assert(x == 3.25);60        fs >> x;61        assert(x == 4.5);62    }63    std::remove(temp1.c_str());64    {65        std::ifstream fs(temp2.c_str());66        double x = 0;67        fs >> x;68        assert(x == 4.5);69        fs >> x;70        assert(x == 3.25);71    }72    std::remove(temp2.c_str());73 74#ifndef TEST_HAS_NO_WIDE_CHARACTERS75    {76        std::wofstream fs1(temp1.c_str());77        std::wofstream fs2(temp2.c_str());78        fs1 << 3.25;79        fs2 << 4.5;80        swap(fs1, fs2);81        fs1 << ' ' << 3.25;82        fs2 << ' ' << 4.5;83    }84    {85        std::wifstream fs(temp1.c_str());86        double x = 0;87        fs >> x;88        assert(x == 3.25);89        fs >> x;90        assert(x == 4.5);91    }92    std::remove(temp1.c_str());93    {94        std::wifstream fs(temp2.c_str());95        double x = 0;96        fs >> x;97        assert(x == 4.5);98        fs >> x;99        assert(x == 3.25);100    }101    std::remove(temp2.c_str());102#endif103 104  return 0;105}106