#include <rive/file.hpp>
#include <rive/node.hpp>
#include <rive/animation/cubic_value_interpolator.hpp>
#include "catch.hpp"
#include "rive_file_reader.hpp"
#include <cstdio>

TEST_CASE("test cubic value load and interpolate properly", "[file]")
{
    auto file = ReadRiveFile("assets/cubic_value_test.riv");

    auto artboard = file->artboard();
    REQUIRE(artboard != nullptr);

    auto greyRect = artboard->find<rive::Node>("grey_rectangle");
    REQUIRE(greyRect != nullptr);

    REQUIRE(artboard->find<rive::CubicValueInterpolatorBase>().size() == 3);

    auto animation = artboard->animation("Timeline 1");
    REQUIRE(animation != nullptr);
    // Go to frame 15.
    animation->apply(artboard, 15.0f / animation->fps(), 1.0f);
    REQUIRE(greyRect->x() == Approx(290.71f));

    // Go to frame 11.
    animation->apply(artboard, 11.0f / animation->fps(), 1.0f);
    REQUIRE(greyRect->x() == Approx(363.01f));
}
