// { dg-do run { target c++14 } }
// { dg-require-effective-target net_ts_ip }
// { dg-add-options net_ts }
#include <experimental/internet>
#include <testsuite_hooks.h>
using namespace std::experimental::net;
#if __cplusplus >= 202002
constexpr
#endif
void
test_default()
{
ip::tcp::endpoint t1;
VERIFY( t1.protocol() == ip::tcp::v4() );
VERIFY( t1.address() == ip::address() );
VERIFY( t1.port() == 0 );
ip::udp::endpoint t2;
VERIFY( t2.protocol() == ip::udp::v4() );
VERIFY( t2.address() == ip::address() );
VERIFY( t2.port() == 0 );
}
#if __cplusplus >= 202002
constexpr
#endif
void
test_proto()
{
ip::tcp::endpoint t1(ip::tcp::v4(), 22);
VERIFY( t1.protocol() == ip::tcp::v4() );
VERIFY( t1.address() == ip::address_v4() );
VERIFY( t1.port() == 22 );
ip::tcp::endpoint t2(ip::tcp::v6(), 80);
VERIFY( t2.protocol() == ip::tcp::v6() );
VERIFY( t2.address() == ip::address_v6() );
VERIFY( t2.port() == 80 );
}
#if __cplusplus >= 202002
constexpr
#endif
void
test_addr()
{
ip::address_v4 a1(ip::address_v4::bytes_type(1, 2, 3, 4));
ip::tcp::endpoint t1(a1, 22);
VERIFY( t1.protocol() == ip::tcp::v4() );
VERIFY( t1.address() == a1 );
VERIFY( t1.port() == 22 );
ip::address_v6 a2(ip::address_v6::bytes_type(21,22,23,24,25,26,27,28,29));
ip::tcp::endpoint t2(a2, 80);
VERIFY( t2.protocol() == ip::tcp::v6() );
VERIFY( t2.address() == a2 );
VERIFY( t2.port() == 80 );
}
int main()
{
test_default();
test_proto();
test_addr();
#if __cplusplus >= 202002
// basic_endpoint constructors are only constexpr in C++20.
constexpr bool b = []{
test_default();
test_proto();
test_addr();
return true;
}();
#endif
}