#include "polly/Support/ISLTools.h"
#include "gmock/gmock.h"
#include "gtest/gtest.h"

namespace isl {
static bool operator==(const isl::basic_set &A, const isl::basic_set &B) {
  return A.is_equal(B);
}
} // namespace isl

TEST(Support, isl_iterator) {
  std::unique_ptr<isl_ctx, decltype(&isl_ctx_free)> RawCtx(isl_ctx_alloc(),
                                                           &isl_ctx_free);
  isl::ctx Ctx(RawCtx.get());

  isl::basic_set A(
      Ctx, "{ [x, y] : 0 <= x <= 5 and y >= 0 and x > 0 and 0 < y <= 5 }");
  isl::basic_set B(
      Ctx, "{ [x, y] : 0 <= x <= 5 and y >= 0 and x <= 4 and y <= 3 + x }");
  isl::set S = A.unite(B);

  ASSERT_EQ(S.n_basic_set().release(), 2);
  std::vector<isl::basic_set> Sets;
  for (auto BS : S.get_basic_set_list())
    Sets.push_back(BS);
  EXPECT_THAT(Sets, testing::UnorderedElementsAre(A, B));
}
