//===----------------------------------------------------------------------===//
//
// 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
//
//===----------------------------------------------------------------------===//

// XFAIL: availability-filesystem-missing

// Make sure the various containers' iterators are not broken by the use of `std::rel_ops`.

#include <utility> // for std::rel_ops

#include <array>
#include <deque>
#include <filesystem>
#include <forward_list>
#include <list>
#include <map>
#include <set>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <vector>

#include "test_macros.h"

#if TEST_STD_VER >= 17
#include <string_view>
#endif

#if TEST_STD_VER >= 20
#include <span>
#endif

using namespace std::rel_ops;

template<class It, class ConstIt>
void test_eq(It it, ConstIt cit) {
    (void)(it == it);
    (void)(it != it);
    (void)(it == cit);
    (void)(it != cit);
    (void)(cit == it);
    (void)(cit != it);
    (void)(cit == cit);
    (void)(cit != cit);
}

template<class It, class ConstIt>
void test_lt(It it, ConstIt cit) {
    (void)(it <  it);
    (void)(it <= it);
    (void)(it >  it);
    (void)(it >= it);
    (void)(it <  cit);
    (void)(it <= cit);
    (void)(it >  cit);
    (void)(it >= cit);
    (void)(cit <  it);
    (void)(cit <= it);
    (void)(cit >  it);
    (void)(cit >= it);
    (void)(cit <  cit);
    (void)(cit <= cit);
    (void)(cit >  cit);
    (void)(cit >= cit);

    // Test subtraction too, even though std::rel_ops shouldn't affect it.

    (void)(it - it);
    (void)(it - cit);
    (void)(cit - it);
    (void)(cit - cit);
}

template<class Container>
void test_forward() {
    // There is no need to distinguish "forward" from "bidirectional."
    // libc++ already can't handle `c.rbegin() >= c.rbegin()` in the
    // presence of std::rel_ops, and neither can Microsoft nor libstdc++.

    Container c;
    typename Container::iterator it = c.begin();
    typename Container::const_iterator cit = c.begin();
    test_eq(it, cit);
}

template<class Container>
void test_random_access() {
    Container c;
    typename Container::iterator it = c.begin();
    typename Container::const_iterator cit = c.begin();
    test_eq(it, cit);
    test_lt(it, cit);
}

template void test_random_access<std::array<int, 10> >();
template void test_random_access<std::deque<int> >();
template void test_forward<std::forward_list<int> >();
template void test_forward<std::list<int> >();
template void test_forward<std::map<int, int> >();
template void test_forward<std::multimap<int, int> >();
template void test_forward<std::multiset<int> >();
template void test_forward<std::set<int> >();
template void test_random_access<std::string>();
template void test_forward<std::unordered_map<int, int> >();
template void test_forward<std::unordered_multimap<int, int> >();
template void test_forward<std::unordered_multiset<int> >();
template void test_forward<std::unordered_set<int> >();
template void test_random_access<std::vector<int> >();

#if TEST_STD_VER >= 17
void test_directory_iterators() {
#ifndef TEST_HAS_NO_FILESYSTEM
    std::filesystem::directory_iterator it;
    test_eq(it, it);

    std::filesystem::recursive_directory_iterator rdit;
    test_eq(rdit, rdit);
#endif
}

template void test_forward<std::filesystem::path>();
#endif

#if TEST_STD_VER >= 17
template void test_random_access<std::string_view>();
#endif

#if TEST_STD_VER >= 20
void test_span() {
    std::span<int> c;
    std::span<int>::iterator it = c.begin();  // span has no const_iterator
    test_eq(it, it);
    test_lt(it, it);
}
#endif
