#include #include namespace { struct Test_Axis : aethera::Def { struct Prop : Prev { aethera::render_2d::Axis_Range range{0.0, 20.0}; }; struct Private : Prev_Private { [[nodiscard]] aethera::render_2d::Axis_Range coordinate_range() const override { return static_cast(*concurrent().internal.use()).range; } [[nodiscard]] aethera::render_2d::Axis_Coordinate tick_step(aethera::render_2d::Axis_Range range) const override { return nice_tick_step(range); } [[nodiscard]] std::string tick_label(aethera::render_2d::Axis_Coordinate tick) const override { return localized_number(tick, 2, {}); } }; }; TEST(Axis_Model, Inherited_Private_Uses_Final_Endpoint_Attachment) { Test_Axis::Builder builder; builder .set(&aethera::render_2d::Abs_Axis::Prop::position, aethera::render_2d::Point_F{10.0, 5.0}) .set(&aethera::render_2d::Abs_Axis::Prop::pixel_length, 200.0) .set(&Test_Axis::Prop::range, aethera::render_2d::Axis_Range{0.0, 20.0}); auto axis = builder.build(); EXPECT_EQ(axis->coordinate_range(), (aethera::render_2d::Axis_Range{0.0, 20.0})); EXPECT_DOUBLE_EQ(axis->coordinate_to_pixel(10.0), 110.0); EXPECT_EQ(axis->tick_label(2.5), "2.5"); } } // namespace