| #include "support/intervals.h" |
| #include "ir/utils.h" |
| #include "gtest/gtest.h" |
| |
| using namespace wasm; |
| |
| TEST(IntervalsTest, TestEmpty) { |
| std::vector<Interval> intervals; |
| std::vector<int> expected; |
| ASSERT_EQ(IntervalProcessor::filterOverlaps(intervals), expected); |
| } |
| |
| TEST(IntervalsTest, TestOne) { |
| std::vector<Interval> intervals; |
| intervals.emplace_back(0, 2, 5); |
| std::vector<int> expected{0}; |
| ASSERT_EQ(IntervalProcessor::filterOverlaps(intervals), expected); |
| } |
| |
| TEST(IntervalsTest, TestNoOverlapFound) { |
| std::vector<Interval> intervals; |
| intervals.emplace_back(0, 4, 2); |
| intervals.emplace_back(4, 8, 2); |
| std::vector<int> expected{0, 1}; |
| ASSERT_EQ(IntervalProcessor::filterOverlaps(intervals), expected); |
| } |
| |
| TEST(IntervalsTest, TestOverlapFound) { |
| std::vector<Interval> intervals; |
| intervals.emplace_back(0, 2, 5); |
| intervals.emplace_back(1, 4, 10); |
| intervals.emplace_back(4, 5, 15); |
| std::vector<int> expected{1, 2}; |
| ASSERT_EQ(IntervalProcessor::filterOverlaps(intervals), expected); |
| } |
| |
| TEST(IntervalsTest, TestOverlapAscendingSequence) { |
| std::vector<Interval> intervals; |
| intervals.emplace_back(0, 3, 6); |
| intervals.emplace_back(2, 6, 2); |
| intervals.emplace_back(3, 15, 5); |
| intervals.emplace_back(4, 11, 1); |
| intervals.emplace_back(6, 20, 15); |
| intervals.emplace_back(12, 18, 3); |
| intervals.emplace_back(14, 21, 5); |
| intervals.emplace_back(23, 28, 5); |
| std::vector<int> expected{0, 4, 7}; |
| ASSERT_EQ(IntervalProcessor::filterOverlaps(intervals), expected); |
| } |
| |
| TEST(IntervalsTest, TestOverlapDescendingSequence) { |
| std::vector<Interval> intervals; |
| intervals.emplace_back(9, 15, 5); |
| intervals.emplace_back(8, 11, 1); |
| intervals.emplace_back(3, 15, 5); |
| intervals.emplace_back(3, 6, 2); |
| intervals.emplace_back(2, 10, 3); |
| intervals.emplace_back(0, 3, 6); |
| std::vector<int> expected{5, 2}; |
| ASSERT_EQ(IntervalProcessor::filterOverlaps(intervals), expected); |
| } |
| |
| TEST(IntervalsTest, TestOverlapRandomSequence) { |
| std::vector<Interval> intervals; |
| intervals.emplace_back(21, 24, 1); |
| intervals.emplace_back(0, 5, 1); |
| intervals.emplace_back(11, 18, 1); |
| intervals.emplace_back(28, 35, 1); |
| intervals.emplace_back(5, 11, 1); |
| intervals.emplace_back(18, 21, 1); |
| intervals.emplace_back(35, 40, 1); |
| intervals.emplace_back(24, 28, 1); |
| std::vector<int> expected{1, 4, 2, 5, 0, 7, 3, 6}; |
| ASSERT_EQ(IntervalProcessor::filterOverlaps(intervals), expected); |
| } |
| |
| TEST(IntervalsTest, TestOverlapInnerNested) { |
| std::vector<Interval> intervals; |
| intervals.emplace_back(0, 12, 3); |
| intervals.emplace_back(2, 4, 2); |
| intervals.emplace_back(3, 6, 5); |
| intervals.emplace_back(12, 15, 4); |
| std::vector<int> expected{2, 3}; |
| ASSERT_EQ(IntervalProcessor::filterOverlaps(intervals), expected); |
| } |
| |
| TEST(IntervalsTest, TestOverlapOuterNested) { |
| std::vector<Interval> intervals; |
| intervals.emplace_back(0, 3, 6); |
| intervals.emplace_back(4, 11, 1); |
| intervals.emplace_back(12, 18, 3); |
| intervals.emplace_back(2, 15, 6); |
| std::vector<int> expected{0, 1, 2}; |
| ASSERT_EQ(IntervalProcessor::filterOverlaps(intervals), expected); |
| } |