diff --git a/deno.lock b/deno.lock
index 847748c..9a7fad9 100644
--- a/deno.lock
+++ b/deno.lock
@@ -2,6 +2,10 @@
"version": "4",
"specifiers": {
"jsr:@bearmetal/doodler@0.0.5-c": "0.0.5-c",
+ "jsr:@std/assert@*": "1.0.10",
+ "jsr:@std/assert@^1.0.10": "1.0.10",
+ "jsr:@std/internal@^1.0.5": "1.0.5",
+ "jsr:@std/testing@*": "1.0.8",
"npm:@deno/vite-plugin@^1.0.4": "1.0.4_vite@6.1.0",
"npm:@types/node@*": "22.5.4",
"npm:vite@*": "6.1.0",
@@ -11,6 +15,22 @@
"jsr": {
"@bearmetal/doodler@0.0.5-c": {
"integrity": "34b0db85af1393b1b01622915963a8b33ee923c14b381afe9c771efd3d631cf1"
+ },
+ "@std/assert@1.0.10": {
+ "integrity": "59b5cbac5bd55459a19045d95cc7c2ff787b4f8527c0dd195078ff6f9481fbb3",
+ "dependencies": [
+ "jsr:@std/internal"
+ ]
+ },
+ "@std/internal@1.0.5": {
+ "integrity": "54a546004f769c1ac9e025abd15a76b6671ddc9687e2313b67376125650dc7ba"
+ },
+ "@std/testing@1.0.8": {
+ "integrity": "ceef535808fb7568e91b0f8263599bd29b1c5603ffb0377227f00a8ca9fe42a2",
+ "dependencies": [
+ "jsr:@std/assert@^1.0.10",
+ "jsr:@std/internal"
+ ]
}
},
"npm": {
diff --git a/src/test/angleMathBench.test.ts b/src/test/angleMathBench.test.ts
new file mode 100644
index 0000000..1ccb584
--- /dev/null
+++ b/src/test/angleMathBench.test.ts
@@ -0,0 +1,32 @@
+///
+///
+///
+///
+///
+///
+
+import { averageAngles, lerpAngle } from "../math/lerp.ts";
+import { testPerformance } from "./bench.ts";
+
+Deno.test("angle math", () => {
+ console.log("Average angles");
+ testPerformance(
+ () => {
+ const a = Math.random() * Math.PI * 2;
+ const b = Math.random() * Math.PI * 2;
+ const avg = averageAngles(a, b);
+ },
+ 10000,
+ 60,
+ );
+ console.log("Lerp angles");
+ testPerformance(
+ () => {
+ const a = Math.random() * Math.PI * 2;
+ const b = Math.random() * Math.PI * 2;
+ const avg = lerpAngle(a, b, .5);
+ },
+ 10000,
+ 60,
+ );
+});
diff --git a/src/train/train.ts b/src/train/train.ts
index d32fa56..57db737 100644
--- a/src/train/train.ts
+++ b/src/train/train.ts
@@ -310,7 +310,7 @@ export class TrainCar extends Debuggable {
for (const p of ps) {
doodler.dot(p.pos, { color: "green" });
doodler.fillText(
- p.angle.toFixed(1).toString(),
+ p.angle.toFixed(2).toString(),
p.pos.copy().add(0, 20),
100,
{