[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/xtensor-stack/xtensor/master/test/test_xcsv.cpp [Back]  [Original]

/***************************************************************************
 * Copyright (c) Johan Mabille, Sylvain Corlay and Wolf Vollprecht          *
 * Copyright (c) QuantStack                                                 *
 *                                                                          *
 * Distributed under the terms of the BSD 3-Clause License.                 *
 *                                                                          *
 * The full license is in the file LICENSE, distributed with this software. *
 ****************************************************************************/

#include 

#include "xtensor/io/xcsv.hpp"
#include "xtensor/io/xio.hpp"

#include "test_common_macros.hpp"

namespace xt
{
    TEST(xcsv, load_1D)
    {
        const std::string source = "1, 2, 3, 4";

        std::stringstream source_stream(source);

        const xtensor res = load_csv(source_stream);

        const xtensor exp{{1, 2, 3, 4}};

        ASSERT_TRUE(all(equal(res, exp)));
    }

    TEST(xcsv, load_double)
    {
        std::string source = "1.0, 2.0, 3.0, 4.0\n"
                             "10.0, 12.0, 15.0, 18.0";

        std::stringstream source_stream(source);

        xtensor res = load_csv(source_stream);

        xtensor exp{{1.0, 2.0, 3.0, 4.0}, {10.0, 12.0, 15.0, 18.0}};

        ASSERT_TRUE(all(equal(res, exp)));
    }

    TEST(xcsv, load_binary_matrix)
    {
        const std::string source = "1,0,1\n"
                                   "0,1,1";

        std::stringstream source_stream(source);

        const xtensor res = load_csv(source_stream);

        const xtensor exp{{1, 0, 1}, {0, 1, 1}};

        ASSERT_TRUE(all(equal(res, exp)));
    }

    TEST(xcsv, load_double_with_options)
    {
        std::string source = "A B C D\n"
                             "#0.0 1.0 1.1 1.2\n"
                             "1.0 2.0 3.0 4.0\n"
                             "10.0 12.0 15.0 18.0\n"
                             "9.0, 8.0, 7.0, 6.";

        std::stringstream source_stream(source);

        auto res = load_csv(source_stream, ' ', 1, 2, "#");

        xtensor exp{{1.0, 2.0, 3.0, 4.0}, {10.0, 12.0, 15.0, 18.0}};

        ASSERT_TRUE(all(equal(res, exp)));
    }

    TEST(xcsv, load_string_trims_cells)
    {
        const std::string source = "  alpha  , beta,gamma   \n delta,  epsilon , zeta  ";

        std::stringstream source_stream(source);

        const xtensor res = load_csv(source_stream);

        ASSERT_EQ(res.shape()[0], std::size_t(2));
        ASSERT_EQ(res.shape()[1], std::size_t(3));
        ASSERT_EQ(res(0, 0), "alpha");
        ASSERT_EQ(res(0, 1), "beta");
        ASSERT_EQ(res(0, 2), "gamma");
        ASSERT_EQ(res(1, 0), "delta");
        ASSERT_EQ(res(1, 1), "epsilon");
        ASSERT_EQ(res(1, 2), "zeta");
    }

    TEST(xcsv, load_file_uses_config)
    {
        const std::string source = "metadata\n"
                                   "//ignore this row\n"
                                   "1;2;3\n"
                                   "4;5;6\n"
                                   "7;8;9";

        std::stringstream source_stream(source);
        xcsv_config config;
        config.delimiter = ';';
        config.skip_rows = 1;
        config.max_rows = 2;
        config.comments = "//";

        xtensor res = {{0, 0, 0}};
        load_file(source_stream, res, config);

        const xtensor exp{{1, 2, 3}, {4, 5, 6}};

        ASSERT_TRUE(all(equal(res, exp)));
    }

    TEST(xcsv, load_inconsistent_rows_throws)
    {
        const std::string source = "1,2,3\n4,5";

        std::stringstream source_stream(source);

        XT_EXPECT_THROW(load_csv(source_stream), std::runtime_error);
    }

    TEST(xcsv, dump_1D)
    {
        xtensor data{{1.0, 2.0, 3.0, 4.0}};

        std::stringstream res;

        dump_csv(res, data);
        ASSERT_EQ("1,2,3,4\n", res.str());
    }

    TEST(xcsv, dump_double)
    {
        xtensor data{{1.0, 2.0, 3.0, 4.0}, {10.0, 12.0, 15.0, 18.0}};

        std::stringstream res;

        dump_csv(res, data);
        ASSERT_EQ("1,2,3,4\n10,12,15,18\n", res.str());
    }

    TEST(xcsv, dump_file_matches_dump_csv)
    {
        xtensor data{{1, 2}, {3, 4}};
        std::stringstream res;
        xcsv_config config;

        dump_file(res, data, config);

        ASSERT_EQ("1,2\n3,4\n", res.str());
    }

    TEST(xcsv, dump_higher_dimension_throws)
    {
        xtensor data{{{1.0, 2.0}, {3.0, 4.0}}};
        std::stringstream res;

        XT_EXPECT_THROW(dump_csv(res, data), std::runtime_error);
    }

    TEST(xcsv, dump_with_config)
    {
        xtensor data{{1.0, 2.0, 3.0, 4.0}, {10.0, 12.0, 15.0, 18.0}};

        std::stringstream res;

        xcsv_config config;
        config.delimiter = ' ';
        dump_csv(res, data, config);
        ASSERT_EQ("1 2 3 4\n10 12 15 18\n", res.str());
    }

    TEST(xcsv, dump_file_with_config)
    {
        xtensor data{{1.0, 2.0, 3.0, 4.0}, {10.0, 12.0, 15.0, 18.0}};

        std::stringstream res;

        xcsv_config config;
        config.delimiter = ';';
        dump_file(res, data, config);
        ASSERT_EQ("1;2;3;4\n10;12;15;18\n", res.str());
    }
}

Web Proxy Viewer  |  New URL  |  Original Page