blob: 264084d8d106e4df2bf8d125ceabe5392b79f661 [file] [log] [blame] [edit]
#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);
}