#!/bin/sh
# Smoke test for the installed vector_math library; runs offline.
set -eu

work=$(mktemp -d)
export HOME="$work"
trap 'rm -rf "$work"' EXIT INT TERM

DART=$(command -v dart 2>/dev/null || true)
[ -n "$DART" ] || DART=/usr/lib/dart/bin/dart

mkdir -p "$work/.dart_tool"
cat > "$work/.dart_tool/package_config.json" <<'JSON'
{"configVersion":2,"packages":[{"name":"vector_math","rootUri":"file:///usr/share/dart/packages/vector_math","packageUri":"lib/","languageVersion":"3.10"}]}
JSON

cat > "$work/main.dart" <<'DART'
import "package:vector_math/vector_math.dart";

void main() {
  final a = Vector3(1.0, 2.0, 3.0);
  final b = Vector3(4.0, 5.0, 6.0);

  if (a.dot(b) != 32.0) {
    throw StateError("dot product: ${a.dot(b)}");
  }

  final c = a.cross(b);
  if (c.x != -3.0 || c.y != 6.0 || c.z != -3.0) {
    throw StateError("cross product: $c");
  }

  final m = Matrix4.identity()..translate(1.0, 2.0, 3.0);
  final v = m.transform3(Vector3.zero());
  if (v.x != 1.0 || v.y != 2.0 || v.z != 3.0) {
    throw StateError("matrix translation: $v");
  }

  final q = Quaternion.axisAngle(Vector3(0.0, 0.0, 1.0), 3.141592653589793);
  if ((q.rotate(Vector3(1.0, 0.0, 0.0)) - Vector3(-1.0, 0.0, 0.0)).length > 1e-9) {
    throw StateError("quaternion rotation");
  }

  print("vector_math smoke test passed");
}
DART

cd "$work"
"$DART" run main.dart
