static_assert( __cplusplus > 2020'99 ); #include "../Streamable.h" #include #include #include #include #include namespace { template< typename= Alepha::Capabilities< Alepha::auto_comparable, Alepha::IOStreams::Streamable > > struct Agg_core { int x; int y; int z; }; using Agg= Agg_core<>; static_assert( Alepha::Aggregate< Agg > ); static_assert( Alepha::Capability< Agg, Alepha::IOStreams::IStreamable > ); static_assert( Alepha::Capability< Agg, Alepha::IOStreams::OStreamable > ); } std::string roundTripString( const std::string text, const std::string delim ) { using namespace Alepha::IOStreams::exports::delimiters_m; std::istringstream iss{ text }; Agg agg; iss >> setDelimiter( fieldDelimiter, delim ) >> agg; std::ostringstream oss; oss << setDelimiter( fieldDelimiter, delim ) << agg; return oss.str(); } static auto init= Alepha::Utility::enroll <=[] { using namespace Alepha::Testing::exports; using namespace Alepha::Testing::literals::test_literals; "Simple IStream"_test <=TableTest< roundTripString > ::Cases { { "smoke test", { "1\t2\t3", "\t" }, { "1\t2\t3" } }, { "smoke test", { "1,2,3", "," }, { "1,2,3" } }, }; };