Files
Renderive/tests/Timeline_Stream_Consistency.cpp
2026-07-30 18:09:03 +08:00

57 lines
2.8 KiB
C++

#include <QTime>
#include <gtest/gtest.h>
#include "../Renderive/architecture/Plot_Render_Context.h"
#include "../Renderive/architecture/Timeline_Stream.h"
#include "../Renderive/base/Memory.h"
TEST(Timeline_Stream_Consistency, ReusesOneTimelineSnapshotInsideFrame) {
auto stream = renderive::make_shared<renderive::Timeline_Stream>();
stream->set_time_point_size(8);
int first_tick = stream->push_time(QTime(10, 0, 0));
renderive::Plot_Render_Snapshot frame;
auto first_snapshot = frame.timeline_snapshot(stream);
int second_tick = stream->push_time(QTime(10, 0, 1));
auto second_snapshot = frame.timeline_snapshot(stream);
EXPECT_EQ(first_snapshot, second_snapshot);
EXPECT_EQ(first_snapshot->time_by_tick(first_tick), QTime(10, 0, 0));
EXPECT_NE(first_snapshot->time_by_tick(second_tick), QTime(10, 0, 1));
renderive::Plot_Render_Snapshot next_frame;
auto next_snapshot = next_frame.timeline_snapshot(stream);
EXPECT_NE(next_snapshot->version, first_snapshot->version);
EXPECT_EQ(next_snapshot->time_by_tick(second_tick), QTime(10, 0, 1));
}
TEST(Timeline_Stream_Consistency, KeepsTickAndTimePairedInSnapshot) {
auto stream = renderive::make_shared<renderive::Timeline_Stream>();
stream->set_time_point_size(16);
stream->set_tick_space(2);
for (int i = 0; i < 12; ++i)
stream->push_time(QTime::fromMSecsSinceStartOfDay(i * 1000));
renderive::Timeline_Stream_Snapshot snapshot = stream->capture();
ASSERT_FALSE(snapshot.ticks.empty());
for (const renderive::Timeline_Tick& tick : snapshot.ticks)
EXPECT_EQ(snapshot.time_by_tick(tick.tick), tick.time);
}
TEST(Timeline_Stream_Consistency, DefaultsNewTimeToCoordEnd) {
auto stream = renderive::make_shared<renderive::Timeline_Stream>();
stream->set_time_point_size(4);
int tick = stream->push_time(QTime(10, 0, 0));
renderive::Timeline_Stream_Snapshot snapshot = stream->capture();
EXPECT_FALSE(snapshot.start_coord_to_end_coord);
EXPECT_EQ(tick, snapshot.upper());
EXPECT_EQ(snapshot.time_by_tick(snapshot.upper()), QTime(10, 0, 0));
}
TEST(Timeline_Stream_Consistency, SupportsNewTimeToCoordStart) {
auto stream = renderive::make_shared<renderive::Timeline_Stream>();
stream->set_time_point_size(4);
stream->set_start_coord_to_end_coord(true);
for (int i = 0; i < 4; ++i)
stream->push_time(QTime::fromMSecsSinceStartOfDay(i));
renderive::Timeline_Stream_Snapshot snapshot = stream->capture();
EXPECT_TRUE(snapshot.start_coord_to_end_coord);
EXPECT_EQ(snapshot.time_by_tick(snapshot.lower), QTime::fromMSecsSinceStartOfDay(3));
EXPECT_EQ(snapshot.time_by_tick(snapshot.upper()), QTime::fromMSecsSinceStartOfDay(0));
}
int main(int argc, char** argv) {
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}