package com.mythlane.chainlightning.chain; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; final class Vec3Test { @Test void distanceSquared_zeroToZero_isZero() { Vec3 a = new Vec3(0, 0, 0); assertEquals(0.0, a.distanceSquared(a), 1e-9); } @Test void distanceSquared_pythagorean345_is25() { Vec3 a = new Vec3(0, 0, 0); Vec3 b = new Vec3(3, 4, 0); assertEquals(25.0, a.distanceSquared(b), 1e-9); } @Test void distanceSquared_isCommutative() { Vec3 a = new Vec3(1, 2, 3); Vec3 b = new Vec3(-4, 5, 6); assertEquals(a.distanceSquared(b), b.distanceSquared(a), 1e-9); } @Test void distance_pythagorean345_is5() { Vec3 a = new Vec3(0, 0, 0); Vec3 b = new Vec3(3, 4, 0); assertEquals(5.0, a.distance(b), 1e-9); } @Test void distanceSquared_negativeCoordinates_works() { Vec3 a = new Vec3(-1, -1, -1); Vec3 b = new Vec3(1, 1, 1); assertEquals(12.0, a.distanceSquared(b), 1e-9); assertTrue(a.distance(b) > 3.4 && a.distance(b) < 3.5); } @Test void lerpAtZeroReturnsFrom() { Vec3 from = Vec3.ZERO; Vec3 to = new Vec3(10, 10, 10); Vec3 result = from.lerp(to, 0.0); assertEquals(from.x(), result.x(), 1e-9); assertEquals(from.y(), result.y(), 1e-9); assertEquals(from.z(), result.z(), 1e-9); } @Test void lerpAtOneReturnsTo() { Vec3 from = Vec3.ZERO; Vec3 to = new Vec3(10, 10, 10); Vec3 result = from.lerp(to, 1.0); assertEquals(to.x(), result.x(), 1e-9); assertEquals(to.y(), result.y(), 1e-9); assertEquals(to.z(), result.z(), 1e-9); } @Test void lerpAtHalfReturnsMidpoint() { Vec3 from = new Vec3(0, 0, 0); Vec3 to = new Vec3(10, 0, 0); Vec3 result = from.lerp(to, 0.5); assertEquals(5.0, result.x(), 1e-9); assertEquals(0.0, result.y(), 1e-9); assertEquals(0.0, result.z(), 1e-9); } }