// Copyright (C) 2020-2023 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 // . // { dg-do run { target c++14 } } #include #include namespace net = std::experimental::net; void test01() { net::executor e; VERIFY( !e ); VERIFY( e == nullptr ); VERIFY( nullptr == e ); VERIFY( e == e ); VERIFY( e == e ); net::executor e2; VERIFY( e == e2 ); swap(e, e2); VERIFY( e == e2 ); e = e2; VERIFY( e == e2 ); } void test02() { struct E { void on_work_started() const noexcept { } void on_work_finished() const noexcept { } net::execution_context& context() const noexcept { return c; } void dispatch(std::function, std::allocator) const { } void post(std::function, std::allocator) const { } void defer(std::function, std::allocator) const { } net::execution_context& c; bool operator==(const E& rhs) const noexcept { return &c == &rhs.c; } }; net::execution_context c; E d{c}; net::executor e(d); VERIFY( e == e ); VERIFY( e != nullptr ); VERIFY( nullptr != e ); VERIFY( &e.context() == &c ); #if __cpp_rtti VERIFY( e.target_type() == typeid(E) ); #endif VERIFY( *e.target() == d ); VERIFY( *e.target() == d ); VERIFY( *const_cast(e).target() == d ); VERIFY( *const_cast(e).target() == d ); net::executor f = e; VERIFY( f == e ); e = nullptr; VERIFY( f != e ); swap(e, f); VERIFY( f == nullptr ); VERIFY( nullptr != e ); net::executor g(E{c}); VERIFY( e == g ); } void test03() { static_assert( ! std::is_default_constructible::value, "" ); } int main() { test01(); test02(); test03(); }