//===----------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

// UNSUPPORTED: c++03, c++11, c++14, c++17

// template<class T>
// concept semiregular = see below;

#include <concepts>

#include <deque>
#include <forward_list>
#include <list>
#include <map>
#include <memory>
#include <optional>
#include <stdexcept>
#include <tuple>
#include <unordered_map>
#include <vector>

#include "type_classification/semiregular.h"

static_assert(std::semiregular<int>);
static_assert(std::semiregular<int volatile>);
static_assert(std::semiregular<int*>);
static_assert(std::semiregular<int const*>);
static_assert(std::semiregular<int volatile*>);
static_assert(std::semiregular<int volatile const*>);
static_assert(std::semiregular<int (*)()>);

struct S {};
static_assert(std::semiregular<S>);
static_assert(std::semiregular<int S::*>);
static_assert(std::semiregular<int (S::*)()>);
static_assert(std::semiregular<int (S::*)() noexcept>);
static_assert(std::semiregular<int (S::*)() &>);
static_assert(std::semiregular<int (S::*)() & noexcept>);
static_assert(std::semiregular<int (S::*)() &&>);
static_assert(std::semiregular<int (S::*)() && noexcept>);
static_assert(std::semiregular<int (S::*)() const>);
static_assert(std::semiregular<int (S::*)() const noexcept>);
static_assert(std::semiregular<int (S::*)() const&>);
static_assert(std::semiregular<int (S::*)() const & noexcept>);
static_assert(std::semiregular<int (S::*)() const&&>);
static_assert(std::semiregular<int (S::*)() const && noexcept>);
static_assert(std::semiregular<int (S::*)() volatile>);
static_assert(std::semiregular<int (S::*)() volatile noexcept>);
static_assert(std::semiregular<int (S::*)() volatile&>);
static_assert(std::semiregular<int (S::*)() volatile & noexcept>);
static_assert(std::semiregular<int (S::*)() volatile&&>);
static_assert(std::semiregular<int (S::*)() volatile && noexcept>);
static_assert(std::semiregular<int (S::*)() const volatile>);
static_assert(std::semiregular<int (S::*)() const volatile noexcept>);
static_assert(std::semiregular<int (S::*)() const volatile&>);
static_assert(std::semiregular<int (S::*)() const volatile & noexcept>);
static_assert(std::semiregular<int (S::*)() const volatile&&>);
static_assert(std::semiregular<int (S::*)() const volatile && noexcept>);

static_assert(std::semiregular<std::vector<int> >);
static_assert(std::semiregular<std::deque<int> >);
static_assert(std::semiregular<std::forward_list<int> >);
static_assert(std::semiregular<std::list<int> >);
static_assert(std::semiregular<std::shared_ptr<std::unique_ptr<int> > >);
static_assert(std::semiregular<std::optional<std::vector<int> > >);
static_assert(std::semiregular<std::vector<int> >);
static_assert(std::semiregular<std::vector<std::unique_ptr<int> > >);

static_assert(std::semiregular<has_volatile_member>);
static_assert(std::semiregular<has_array_member>);

// Not objects
static_assert(!std::semiregular<void>);
static_assert(!std::semiregular<int&>);
static_assert(!std::semiregular<int const&>);
static_assert(!std::semiregular<int volatile&>);
static_assert(!std::semiregular<int const volatile&>);
static_assert(!std::semiregular<int&&>);
static_assert(!std::semiregular<int const&&>);
static_assert(!std::semiregular<int volatile&&>);
static_assert(!std::semiregular<int const volatile&&>);
static_assert(!std::semiregular<int()>);
static_assert(!std::semiregular<int (&)()>);
static_assert(!std::semiregular<int[5]>);

// Not copyable
static_assert(!std::semiregular<std::unique_ptr<int> >);
static_assert(!std::semiregular<int const>);
static_assert(!std::semiregular<int const volatile>);
static_assert(std::semiregular<const_copy_assignment const>);
static_assert(!std::semiregular<volatile_copy_assignment volatile>);
static_assert(std::semiregular<cv_copy_assignment const volatile>);
static_assert(!std::semiregular<no_copy_constructor>);
static_assert(!std::semiregular<no_copy_assignment>);
static_assert(!std::semiregular<no_copy_assignment_mutable>);
static_assert(!std::semiregular<derived_from_noncopyable>);
static_assert(!std::semiregular<has_noncopyable>);
static_assert(!std::semiregular<has_const_member>);
static_assert(!std::semiregular<has_cv_member>);
static_assert(!std::semiregular<has_lvalue_reference_member>);
static_assert(!std::semiregular<has_rvalue_reference_member>);
static_assert(!std::semiregular<has_function_ref_member>);
static_assert(!std::semiregular<deleted_assignment_from_const_rvalue>);

// Not default_initialzable
static_assert(!std::semiregular<std::runtime_error>);
static_assert(
    !std::semiregular<std::tuple<std::runtime_error, std::overflow_error> >);
static_assert(!std::semiregular<std::nullopt_t>);
static_assert(!std::semiregular<no_copy_constructor>);
static_assert(!std::semiregular<no_copy_assignment>);
static_assert(std::is_copy_assignable_v<no_copy_assignment_mutable>);
static_assert(!std::semiregular<no_copy_assignment_mutable>);
static_assert(!std::semiregular<derived_from_noncopyable>);
static_assert(!std::semiregular<has_noncopyable>);

static_assert(!std::semiregular<no_default_ctor>);
static_assert(!std::semiregular<derived_from_non_default_initializable>);
static_assert(!std::semiregular<has_non_default_initializable>);

static_assert(!std::semiregular<deleted_default_ctor>);
static_assert(!std::semiregular<derived_from_deleted_default_ctor>);
static_assert(!std::semiregular<has_deleted_default_ctor>);
