extends "res://tests/test_case.gd" const NetInterpolator = preload("res://scripts/net_interpolator.gd") const NetBodyState = preload("res://scripts/net_body_state.gd") func test_extrapolation_integrates_angular_velocity() -> void: var interpolator := NetInterpolator.new() var first := NetBodyState.new() first.angular_velocity = Vector3.UP * PI interpolator.add_sample(1, first, 0) var second := first.copy() interpolator.add_sample(2, second, 0) var result := interpolator.sample_at(2.0 + 0.1 * 1000.0 / NetInterpolator.TICK_MS) assert_almost_eq(result.rotation.angle_to(Quaternion(Vector3.UP, PI * 0.1)), 0.0, 0.001, "present-time extrapolation advances rotation from angular velocity") func test_stale_pre_reset_packet_cannot_reopen_an_old_epoch() -> void: var interpolator := NetInterpolator.new() interpolator.add_sample(10, NetBodyState.new(), 0) interpolator.add_sample(20, NetBodyState.new(), 1) assert_eq(interpolator.reset_gen, 1, "newer reset establishes the new epoch") assert_true(not interpolator.add_sample(15, NetBodyState.new(), 0), "late old-generation snapshot is rejected before reset handling") assert_eq(interpolator.reset_gen, 1, "stale packet cannot flip reset generation back")