diff --git a/dumux/io/container.hh b/dumux/io/container.hh index 65ddba2b221ce8406441ca0716618bc42eaca8da..3c5a04a9157f10a09e6af3ba93c3ecb30b570a06 100644 --- a/dumux/io/container.hh +++ b/dumux/io/container.hh @@ -28,6 +28,8 @@ #define DUMUX_IO_CONTAINER_HH #include <iostream> +#include <ios> +#include <iomanip> #include <fstream> #include <iterator> @@ -43,9 +45,11 @@ namespace Dumux { */ template<typename Container> void writeContainerToFile(const Container& v, - const std::string& filename) + const std::string& filename, + int floatPrecision = 6) { std::ofstream outfile(filename, std::ios::out); + outfile << std::scientific << std::setprecision(floatPrecision); std::ostream_iterator<typename Container::value_type> it(outfile, "\n"); std::copy(v.begin(),v.end(), it); } diff --git a/test/io/container/test_container_io.cc b/test/io/container/test_container_io.cc index 36f0bd49861366af7e08a62ac3faa48ed2820860..81bad7eab2b0325b5b76615fb53f6aeb503242f0 100644 --- a/test/io/container/test_container_io.cc +++ b/test/io/container/test_container_io.cc @@ -38,9 +38,9 @@ namespace Dumux { template<typename T> -bool testContainerIO(const T& c0) +bool testContainerIO(const T& c0, int floatPrecision = 6) { - writeContainerToFile(c0, "container.txt"); + writeContainerToFile(c0, "container.txt", floatPrecision); auto c1 = readFileToContainer<T>("container.txt"); return std::equal(c0.begin(), c0.end(), c1.begin()); } @@ -80,6 +80,11 @@ int main() passed = passed && Dumux::testContainerIO<std::deque<double>>(doublei); if (!passed) return 1; + auto doublepreci = {1.23456789123456, 1.23456789123456, 9.87654321987654}; + passed = passed && Dumux::testContainerIO<std::vector<double>>(doublepreci, 15); + passed = passed && !Dumux::testContainerIO<std::vector<double>>(doublepreci, 7); + if (!passed) return 1; + auto inti = {5, 6, 7, 5, 2, 8}; passed = passed && Dumux::testContainerIO<std::vector<int>>(inti); passed = passed && Dumux::testContainerIO<std::list<int>>(inti);