Release NaraMotion v0.26.0: Structure of Arrays (SoA), Path Arena Allocator, Uniform Grid Indexing, Dual-Buffer Rendering & Centroid Spring Pop-in
b516e00 verified Download tests/test_motion_easing.py from ArifiIslam/NaraMotion: direct link, hf CLI and curl.
- Browser
- Download file 2.47 kB
-
https://huggingface.co/ArifiIslam/NaraMotion/resolve/main/tests/test_motion_easing.py
- Command line
-
hf download hf://ArifiIslam/NaraMotion/tests/test_motion_easing.py
-
curl -L -o test_motion_easing.py https://huggingface.co/ArifiIslam/NaraMotion/resolve/main/tests/test_motion_easing.py
2.47 kB
| import math | |
| import pytest | |
| from naramotion.motion import ( | |
| Easing, CubicBezier, Spring, lerp, lerp_color, lerp_matrix, clamp | |
| ) | |
| from naramotion.color import Rgba32 | |
| from naramotion.matrix import Matrix2D | |
| def test_penner_easing_boundaries(): | |
| curves = [ | |
| Easing.linear, | |
| Easing.quad_in, Easing.quad_out, Easing.quad_in_out, | |
| Easing.cubic_in, Easing.cubic_out, Easing.cubic_in_out, | |
| Easing.quart_in, Easing.quart_out, Easing.quart_in_out, | |
| Easing.quint_in, Easing.quint_out, Easing.quint_in_out, | |
| Easing.sine_in, Easing.sine_out, Easing.sine_in_out, | |
| Easing.expo_in, Easing.expo_out, Easing.expo_in_out, | |
| Easing.circ_in, Easing.circ_out, Easing.circ_in_out, | |
| Easing.back_in, Easing.back_out, Easing.back_in_out, | |
| Easing.elastic_in, Easing.elastic_out, Easing.elastic_in_out, | |
| Easing.bounce_in, Easing.bounce_out, Easing.bounce_in_out, | |
| ] | |
| for curve in curves: | |
| val_0 = curve(0.0) | |
| val_1 = curve(1.0) | |
| assert math.isclose(val_0, 0.0, abs_tol=1e-5), f"Failed for {curve} at t=0" | |
| assert math.isclose(val_1, 1.0, abs_tol=1e-5), f"Failed for {curve} at t=1" | |
| def test_easing_lookup_names(): | |
| assert Easing.get("easeInOutCubic") == Easing.cubic_in_out | |
| assert Easing.get("bounce_out") == Easing.bounce_out | |
| assert Easing.get("ease_out_quad") == Easing.quad_out | |
| assert Easing.get("unknown_curve") == Easing.linear | |
| def test_cubic_bezier(): | |
| # CSS ease: cubic-bezier(0.25, 0.1, 0.25, 1.0) | |
| cb = CubicBezier(0.25, 0.1, 0.25, 1.0) | |
| assert math.isclose(cb(0.0), 0.0, abs_tol=1e-5) | |
| assert math.isclose(cb(1.0), 1.0, abs_tol=1e-5) | |
| mid = cb(0.5) | |
| assert 0.0 < mid < 1.0 | |
| def test_spring_dynamics(): | |
| spring = Spring(stiffness=100.0, damping=10.0, mass=1.0) | |
| assert spring(0.0) == 0.0 | |
| # Over time, spring converges to 1.0 | |
| val_settled = spring(3.0) | |
| assert math.isclose(val_settled, 1.0, abs_tol=1e-2) | |
| def test_lerp_color_and_matrix(): | |
| # 1. Color lerp | |
| c1 = Rgba32(255, 0, 0, 255) # Red | |
| c2 = Rgba32(0, 0, 255, 255) # Blue | |
| mid_color = lerp_color(c1, c2, 0.5) | |
| assert mid_color.r == 128 | |
| assert mid_color.b == 128 | |
| # 2. Matrix lerp | |
| m1 = Matrix2D.make_translation(0, 0) | |
| m2 = Matrix2D.make_translation(100, 200) | |
| mid_mat = lerp_matrix(m1, m2, 0.5) | |
| assert mid_mat.m20 == 50.0 | |
| assert mid_mat.m21 == 100.0 | |