// Test with only spaceship defaulted.
// { dg-do run { target c++20 } }

// Add this warning to test PR c++/95242
// { dg-additional-options -Wzero-as-null-pointer-constant }

#include <compare>

struct D
{
  int i;
  auto operator<=>(const D& x) const = default;
  // auto operator==(const D& x) const = default;
  // auto operator!=(const D& x) const = default;
  // auto operator<(const D& x) const = default;
  // auto operator<=(const D& x) const = default;
  // auto operator>(const D& x) const = default;
  // auto operator>=(const D& x) const = default;
};

#define assert(X) do { if (!(X)) __builtin_abort(); } while (0)

int main()
{
  D d{42};
  D d2{24};

  assert (is_eq (d <=> d));
  assert (is_lteq (d <=> d));
  assert (is_gteq (d <=> d));
  assert (is_lt (d2 <=> d));
  assert (is_lteq (d2 <=> d));
  assert (is_gt (d <=> d2));
  assert (is_gteq (d <=> d2));

  assert (d == d);
  assert (!(d2 == d));
  assert (!(d == d2));
  assert (d != d2);
  assert (!(d2 != d2));

  assert (d2 < d);
  assert (d2 <= d);
  assert (d > d2);
  assert (d >= d2);
}
