xref: /aosp_15_r20/external/eigen/test/io.cpp (revision bf2c37156dfe67e5dfebd6d394bad8b2ab5804d4)
1*bf2c3715SXin Li // This file is part of Eigen, a lightweight C++ template library
2*bf2c3715SXin Li // for linear algebra.
3*bf2c3715SXin Li //
4*bf2c3715SXin Li // Copyright (C) 2019 Joel Holdsworth <[email protected]>
5*bf2c3715SXin Li //
6*bf2c3715SXin Li // This Source Code Form is subject to the terms of the Mozilla
7*bf2c3715SXin Li // Public License v. 2.0. If a copy of the MPL was not distributed
8*bf2c3715SXin Li // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
9*bf2c3715SXin Li 
10*bf2c3715SXin Li #include <sstream>
11*bf2c3715SXin Li 
12*bf2c3715SXin Li #include "main.h"
13*bf2c3715SXin Li 
14*bf2c3715SXin Li template<typename Scalar>
15*bf2c3715SXin Li struct check_ostream_impl
16*bf2c3715SXin Li {
runcheck_ostream_impl17*bf2c3715SXin Li   static void run()
18*bf2c3715SXin Li   {
19*bf2c3715SXin Li     const Array<Scalar,1,1> array(123);
20*bf2c3715SXin Li     std::ostringstream ss;
21*bf2c3715SXin Li     ss << array;
22*bf2c3715SXin Li     VERIFY(ss.str() == "123");
23*bf2c3715SXin Li 
24*bf2c3715SXin Li     check_ostream_impl< std::complex<Scalar> >::run();
25*bf2c3715SXin Li   };
26*bf2c3715SXin Li };
27*bf2c3715SXin Li 
28*bf2c3715SXin Li template<>
29*bf2c3715SXin Li struct check_ostream_impl<bool>
30*bf2c3715SXin Li {
runcheck_ostream_impl31*bf2c3715SXin Li   static void run()
32*bf2c3715SXin Li   {
33*bf2c3715SXin Li     const Array<bool,1,2> array(1, 0);
34*bf2c3715SXin Li     std::ostringstream ss;
35*bf2c3715SXin Li     ss << array;
36*bf2c3715SXin Li     VERIFY(ss.str() == "1  0");
37*bf2c3715SXin Li   };
38*bf2c3715SXin Li };
39*bf2c3715SXin Li 
40*bf2c3715SXin Li template<typename Scalar>
41*bf2c3715SXin Li struct check_ostream_impl< std::complex<Scalar> >
42*bf2c3715SXin Li {
runcheck_ostream_impl43*bf2c3715SXin Li   static void run()
44*bf2c3715SXin Li   {
45*bf2c3715SXin Li     const Array<std::complex<Scalar>,1,1> array(std::complex<Scalar>(12, 34));
46*bf2c3715SXin Li     std::ostringstream ss;
47*bf2c3715SXin Li     ss << array;
48*bf2c3715SXin Li     VERIFY(ss.str() == "(12,34)");
49*bf2c3715SXin Li   };
50*bf2c3715SXin Li };
51*bf2c3715SXin Li 
52*bf2c3715SXin Li template<typename Scalar>
check_ostream()53*bf2c3715SXin Li static void check_ostream()
54*bf2c3715SXin Li {
55*bf2c3715SXin Li   check_ostream_impl<Scalar>::run();
56*bf2c3715SXin Li }
57*bf2c3715SXin Li 
EIGEN_DECLARE_TEST(rand)58*bf2c3715SXin Li EIGEN_DECLARE_TEST(rand)
59*bf2c3715SXin Li {
60*bf2c3715SXin Li   CALL_SUBTEST(check_ostream<bool>());
61*bf2c3715SXin Li   CALL_SUBTEST(check_ostream<float>());
62*bf2c3715SXin Li   CALL_SUBTEST(check_ostream<double>());
63*bf2c3715SXin Li   CALL_SUBTEST(check_ostream<Eigen::numext::int8_t>());
64*bf2c3715SXin Li   CALL_SUBTEST(check_ostream<Eigen::numext::uint8_t>());
65*bf2c3715SXin Li   CALL_SUBTEST(check_ostream<Eigen::numext::int16_t>());
66*bf2c3715SXin Li   CALL_SUBTEST(check_ostream<Eigen::numext::uint16_t>());
67*bf2c3715SXin Li   CALL_SUBTEST(check_ostream<Eigen::numext::int32_t>());
68*bf2c3715SXin Li   CALL_SUBTEST(check_ostream<Eigen::numext::uint32_t>());
69*bf2c3715SXin Li   CALL_SUBTEST(check_ostream<Eigen::numext::int64_t>());
70*bf2c3715SXin Li   CALL_SUBTEST(check_ostream<Eigen::numext::uint64_t>());
71*bf2c3715SXin Li }
72