Implement an iterator for isl maps, basic_maps, sets, basic_sets
Summary:
Provide an iterator to simplify iteration over some isl collections.
Since these types do not natively support iteration, they have to be converted
to an list first by the caller, but can then be used in a ranged for loop:
```
isl::set S;
for (auto SubSet : S.get_basic_set_list ()) {
// ...
}
```
Reviewers: bollu, Meinersbur, grosser, dexonsmith
Reviewed By: bollu
Subscribers: hfinkel, mgorny, Meinersbur, mehdi_amini, bollu, steven_wu, llvm-commits
Differential Revision: https://reviews.llvm.org/D48136
llvm-svn: 335951
2018-06-29 16:17:03 +08:00
|
|
|
#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);
|
|
|
|
}
|
2018-06-29 19:49:34 +08:00
|
|
|
} // namespace isl
|
Implement an iterator for isl maps, basic_maps, sets, basic_sets
Summary:
Provide an iterator to simplify iteration over some isl collections.
Since these types do not natively support iteration, they have to be converted
to an list first by the caller, but can then be used in a ranged for loop:
```
isl::set S;
for (auto SubSet : S.get_basic_set_list ()) {
// ...
}
```
Reviewers: bollu, Meinersbur, grosser, dexonsmith
Reviewed By: bollu
Subscribers: hfinkel, mgorny, Meinersbur, mehdi_amini, bollu, steven_wu, llvm-commits
Differential Revision: https://reviews.llvm.org/D48136
llvm-svn: 335951
2018-06-29 16:17:03 +08:00
|
|
|
|
|
|
|
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(), 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));
|
|
|
|
}
|