#include <gtest/gtest.h>
#include "../strategy/low_latency/Low_Latency_Strategy_Test_Types.hpp"
struct Frame_Control_Concept_Frame {};
using Frame_Control_Concept_Manual = Manual_Refresh_Strategy<Frame_Control_Concept_Frame>;
using Frame_Control_Concept_Flow = Flow_Refresh_Strategy<Frame_Control_Concept_Frame>;
static_assert(Timed_Struct_Observer<Low_Latency_Test_Observer_State, Low_Latency_Test_Strategy::Observation>);
static_assert(Painter_Frame_Lease<Low_Latency_Test_Strategy::Painter_Lease, Low_Latency_Test_Strategy::Frame>);
static_assert(Render_Frame_Lease<Low_Latency_Test_Strategy::Render_Lease, Low_Latency_Test_Strategy::Frame>);
static_assert(Runtime_Frame_Control_Strategy<Low_Latency_Test_Strategy>);
static_assert(Runtime_Frame_Control_Strategy<Frame_Control_Concept_Manual>);
static_assert(Runtime_Frame_Control_Strategy<Frame_Control_Concept_Flow>);
static_assert(Frame_Lease_Strategy<Low_Latency_Test_Strategy>);
static_assert(Frame_Control_Strategy_For<Low_Latency_Test_Strategy, Low_Latency_Test_Frame>);
static_assert(Frame_Refresh_Strategy<Low_Latency_Test_Strategy>);
static_assert(Real_Time_Data_Aware_Frame_Strategy<Low_Latency_Test_Strategy>);
static_assert(Manual_Frame_Refresh_Strategy<Frame_Control_Concept_Manual>);
static_assert(Flow_Frame_Refresh_Strategy<Frame_Control_Concept_Flow>);
TEST(frame_control_concepts_test, concepts_compile) {
    SUCCEED();
}
static_assert(noexcept(std::declval<Low_Latency_Test_Strategy&>().on_real_time_data_update(std::declval<const Real_Time_Data_Observation&>())));
static_assert(noexcept(std::declval<Low_Latency_Test_Strategy&>().discard_stale_latest_data_frame()));
