test_tuple_parse.cppΒΆ

// Copyright 2018, 2019, 2021, 2022 by Mark Melton
//

#include <gtest/gtest.h>

namespace core::str {

namespace detail {
template<class T>
struct lexical_cast_impl;

template<>
struct lexical_cast_impl<std::string> {
    static std::string parse(std::string_view input) {
        return std::string(input);
    }
};

template<>
struct lexical_cast_impl<int> {
    static int parse(std::string_view input) {
        return std::atoi(input.data());
    }
};

template<>
struct lexical_cast_impl<float> {
    static float parse(std::string_view input) {
        return std::atof(input.data());
    }
};

}; // detail

template<class T, class... Us>
T lexical_cast(std::string_view s, Us... extra)
{ return detail::lexical_cast_impl<T>::parse(s, extra...); }

}; // core::str


#include "core/tuple/parse.h"

using namespace core;

TEST(TupleParse, Test0)
{
    using type = std::tuple<int,std::string,float>;
    auto views = std::vector<std::string_view>{ "1", "abc", "1.25" };
    auto tup = tp::parse<type>(views);
    EXPECT_EQ(std::get<0>(tup), 1);
    EXPECT_EQ(std::get<1>(tup), "abc");
    EXPECT_EQ(std::get<2>(tup), 1.25);
}

int main(int argc, char *argv[])
{
    ::testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}