Jakub Jelinek 8d9254fc8a Update copyright years.
From-SVN: r279813
2020-01-01 12:51:42 +01:00

173 lines
4.8 KiB
C++

// Copyright (C) 2015-2020 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 3, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License along
// with this library; see the file COPYING3. If not see
// <http://www.gnu.org/licenses/>.
// { dg-do run { target c++14 } }
#include <experimental/buffer>
#include <testsuite_hooks.h>
namespace net = std::experimental::net;
template<typename T>
bool is_mutable(const T&)
{ return std::is_same<T, net::mutable_buffer>::value; }
template<typename T>
bool is_const(const T&)
{ return std::is_same<T, net::const_buffer>::value; }
void
test01()
{
bool test = false;
auto b1 = net::buffer((void*)&test, sizeof(test));
VERIFY( is_mutable(b1) );
VERIFY( b1.data() == &test );
VERIFY( b1.size() == sizeof(test) );
auto b2 = net::buffer((const void*)&test, sizeof(test));
VERIFY( is_const(b2) );
VERIFY( b2.data() == &test );
VERIFY( b1.size() == sizeof(test) );
auto b3 = net::buffer(b1);
VERIFY( is_mutable(b3) );
VERIFY( b3.data() == b1.data() );
VERIFY( b3.size() == b1.size() );
auto b4 = net::buffer(b2);
VERIFY( is_const(b4) );
VERIFY( b4.data() == b2.data() );
VERIFY( b4.size() == b2.size() );
auto b5 = net::buffer(b1, 0);
VERIFY( is_mutable(b5) );
VERIFY( b5.data() == b1.data() );
VERIFY( b5.size() == 0 );
auto b6 = net::buffer(b2, 0);
VERIFY( is_const(b6) );
VERIFY( b6.data() == b2.data() );
VERIFY( b6.size() == 0 );
int a7[7];
auto b7 = net::buffer(a7);
VERIFY( is_mutable(b7) );
VERIFY( b7.data() == a7 );
VERIFY( b7.size() == sizeof(a7) );
auto b7x = net::buffer(a7, 2);
VERIFY( is_mutable(b7x) );
VERIFY( b7x.data() == a7 );
VERIFY( b7x.size() == sizeof(a7[0]) * 2 );
const short a8[8] = { };
auto b8 = net::buffer(a8);
VERIFY( is_const(b8) );
VERIFY( b8.data() == a8 );
VERIFY( b8.size() == sizeof(a8) );
auto b8x = net::buffer(a8, 3);
VERIFY( is_const(b8x) );
VERIFY( b8x.data() == a8 );
VERIFY( b8x.size() == sizeof(a8[0]) * 3 );
std::array<short, 9> a9;
auto b9 = net::buffer(a9);
VERIFY( is_mutable(b9) );
VERIFY( b9.data() == a9.data() );
VERIFY( b9.size() == sizeof(a9) );
auto b9x = net::buffer(a9, 4);
VERIFY( is_mutable(b9x) );
VERIFY( b9x.data() == a9.data() );
VERIFY( b9x.size() == sizeof(a9[0]) * 4 );
const std::array<long long, 10> a10{};
auto b10 = net::buffer(a10);
VERIFY( is_const(b10) );
VERIFY( b10.data() == a10.data() );
VERIFY( b10.size() == sizeof(a10) );
auto b10x = net::buffer(a10, 5);
VERIFY( is_const(b10x) );
VERIFY( b10x.data() == a10.data() );
VERIFY( b10x.size() == sizeof(a10[0]) * 5 );
std::array<const int, 11> a11{};
auto b11 = net::buffer(a11);
VERIFY( is_const(b11) );
VERIFY( b11.data() == a11.data() );
VERIFY( b11.size() == sizeof(a11) );
auto b11x = net::buffer(a11, 6);
VERIFY( is_const(b11x) );
VERIFY( b11x.data() == a11.data() );
VERIFY( b11x.size() == sizeof(a11[0]) * 6 );
std::vector<short> a12(12);
auto b12 = net::buffer(a12);
VERIFY( is_mutable(b12) );
VERIFY( b12.data() == a12.data() );
VERIFY( b12.size() == sizeof(a12[0]) * a12.size() );
auto b12x = net::buffer(a12, 7);
VERIFY( is_mutable(b12x) );
VERIFY( b12x.data() == a12.data() );
VERIFY( b12x.size() == sizeof(a12[0]) * 7 );
const std::vector<long long> a13(13);
auto b13 = net::buffer(a13);
VERIFY( is_const(b13) );
VERIFY( b13.data() == a13.data() );
VERIFY( b13.size() == sizeof(a13[0]) * a13.size() );
auto b13x = net::buffer(a13, 7);
VERIFY( is_const(b13x) );
VERIFY( b13x.data() == a13.data() );
VERIFY( b13x.size() == sizeof(a13[0]) * 7 );
std::u32string a14(14, ' ');
auto b14 = net::buffer(a14);
VERIFY( is_mutable(b14) );
VERIFY( b14.data() == a14.data() );
VERIFY( b14.size() == sizeof(a14[0]) * a14.size() );
auto b14x = net::buffer(a14, 8);
VERIFY( is_mutable(b14x) );
VERIFY( b14x.data() == a14.data() );
VERIFY( b14x.size() == sizeof(a14[0]) * 8 );
const std::u16string a15(15, ' ');
auto b15 = net::buffer(std::experimental::u16string_view(a15));
VERIFY( is_const(b15) );
VERIFY( b15.data() == a15.data() );
VERIFY( b15.size() == sizeof(a15[0]) * a15.size() );
auto b15x = net::buffer(std::experimental::u16string_view(a15), 9);
VERIFY( is_const(b15x) );
VERIFY( b15x.data() == a15.data() );
VERIFY( b15x.size() == sizeof(a15[0]) * 9 );
}
int
main()
{
test01();
}