//===----------------------------------------------------------------------===//
//
// 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
// XFAIL: availability-pmr-missing

// test_memory_resource requires RTTI for dynamic_cast
// UNSUPPORTED: no-rtti

// <memory_resource>

// bool operator!=(memory_resource const &, memory_resource const &) noexcept;

#include <memory_resource>
#include <cassert>

#include "test_macros.h"
#include "test_std_memory_resource.h"

int main(int, char**) {
  // check return types
  {
    const std::pmr::memory_resource* mr1 = nullptr;
    const std::pmr::memory_resource* mr2 = nullptr;
    ASSERT_SAME_TYPE(decltype(*mr1 != *mr2), bool);
    ASSERT_NOEXCEPT(*mr1 != *mr2);
  }
  // not equal
  {
    TestResource r1(1);
    TestResource r2(2);
    const std::pmr::memory_resource& mr1 = r1;
    const std::pmr::memory_resource& mr2 = r2;

    assert(mr1 != mr2);
    assert(r1.checkIsEqualCalledEq(1));
    assert(r2.checkIsEqualCalledEq(0));

    assert(mr2 != mr1);
    assert(r1.checkIsEqualCalledEq(1));
    assert(r2.checkIsEqualCalledEq(1));
  }
  // equal
  {
    TestResource r1(1);
    TestResource r2(1);
    const std::pmr::memory_resource& mr1 = r1;
    const std::pmr::memory_resource& mr2 = r2;

    assert(!(mr1 != mr2));
    assert(r1.checkIsEqualCalledEq(1));
    assert(r2.checkIsEqualCalledEq(0));

    assert(!(mr2 != mr1));
    assert(r1.checkIsEqualCalledEq(1));
    assert(r2.checkIsEqualCalledEq(1));
  }
  // equal same object
  {
    TestResource r1(1);
    const std::pmr::memory_resource& mr1 = r1;
    const std::pmr::memory_resource& mr2 = r1;

    assert(!(mr1 != mr2));
    assert(r1.checkIsEqualCalledEq(0));

    assert(!(mr2 != mr1));
    assert(r1.checkIsEqualCalledEq(0));
  }

  return 0;
}
