#include #include "ContinuousTimeline.h" using namespace testing; using std::vector; using boost::optional; using std::initializer_list; TEST(ContinuousTimeline, constructors_initializeState) { TimeRange range(-5_cs, 55_cs); int defaultValue = -1; auto args = { Timed(-10_cs, 30_cs, 1), Timed(10_cs, 40_cs, 2), Timed(50_cs, 60_cs, 3) }; auto expected = { Timed(-5_cs, 10_cs, 1), Timed(10_cs, 40_cs, 2), Timed(40_cs, 50_cs, defaultValue), Timed(50_cs, 55_cs, 3) }; EXPECT_THAT( ContinuousTimeline(range, defaultValue, args.begin(), args.end()), ElementsAreArray(expected) ); EXPECT_THAT( ContinuousTimeline(range, defaultValue, vector>(args)), ElementsAreArray(expected) ); EXPECT_THAT( ContinuousTimeline(range, defaultValue, args), ElementsAreArray(expected) ); } TEST(ContinuousTimeline, empty) { ContinuousTimeline empty(TimeRange(10_cs, 10_cs), -1); EXPECT_TRUE(empty.empty()); EXPECT_THAT(empty, IsEmpty()); ContinuousTimeline nonEmpty1(TimeRange(0_cs, 10_cs), -1); EXPECT_FALSE(nonEmpty1.empty()); EXPECT_THAT(nonEmpty1, Not(IsEmpty())); ContinuousTimeline nonEmpty2(TimeRange(0_cs, 10_cs), -1, { Timed(1_cs, 2_cs, 1) }); EXPECT_FALSE(nonEmpty2.empty()); EXPECT_THAT(nonEmpty2, Not(IsEmpty())); } TEST(ContinuousTimeline, setAndClear) { TimeRange range(0_cs, 10_cs); int defaultValue = -1; ContinuousTimeline timeline(range, defaultValue); // Out of range timeline.set(-10_cs, -1_cs, 1); timeline.set(TimeRange(-5_cs, -1_cs), 2); timeline.set(Timed(10_cs, 15_cs, 3)); // Overlapping timeline.set(-2_cs, 3_cs, 4); timeline.set(TimeRange(-1_cs, 1_cs), 5); timeline.set(Timed(8_cs, 12_cs, 6)); // Within timeline.set(5_cs, 9_cs, 7); timeline.set(TimeRange(6_cs, 7_cs), 8); timeline.set(Timed(7_cs, 8_cs, 9)); auto expected = { Timed(0_cs, 1_cs, 5), Timed(1_cs, 3_cs, 4), Timed(3_cs, 5_cs, defaultValue), Timed(5_cs, 6_cs, 7), Timed(6_cs, 7_cs, 8), Timed(7_cs, 8_cs, 9), Timed(8_cs, 9_cs, 7), Timed(9_cs, 10_cs, 6) }; EXPECT_THAT(timeline, ElementsAreArray(expected)); } TEST(ContinuousTimeline, shift) { ContinuousTimeline timeline(TimeRange(0_cs, 10_cs), -1, { { 1_cs, 2_cs, 1 },{ 2_cs, 5_cs, 2 },{ 7_cs, 9_cs, 3 } }); ContinuousTimeline expected(TimeRange(2_cs, 12_cs), -1, { { 3_cs, 4_cs, 1 },{ 4_cs, 7_cs, 2 },{ 9_cs, 11_cs, 3 } }); timeline.shift(2_cs); EXPECT_EQ(expected, timeline); } TEST(ContinuousTimeline, equality) { vector> timelines = { ContinuousTimeline(TimeRange(0_cs, 10_cs), -1), ContinuousTimeline(TimeRange(0_cs, 10_cs), 1), ContinuousTimeline(TimeRange(0_cs, 10_cs), -1, { { 1_cs, 2_cs, 1 } }), ContinuousTimeline(TimeRange(1_cs, 10_cs), -1, { { 1_cs, 2_cs, 1 } }) }; for (size_t i = 0; i < timelines.size(); ++i) { for (size_t j = 0; j < timelines.size(); ++j) { if (i == j) { EXPECT_EQ(timelines[i], ContinuousTimeline(timelines[j])) << "i: " << i << ", j: " << j; } else { EXPECT_NE(timelines[i], timelines[j]) << "i: " << i << ", j: " << j; } } } }