Files
Ymir/core/tests/physics/TestForces.cpp
T
vinihcrosaandClaude Sonnet 4.6 6295d540a4 feat: migrate to monorepo with WASM core, Fastify API, and React frontend
- Move C++ sources to core/ subdirectory (T05)
- Add pnpm workspaces + Turborepo pipeline (T06)
- Add Emscripten CMake target and build-wasm.sh (T07)
- Implement Embind bindings via YmirBindings.cpp (T08)
- Add packages/types with TypeBox schemas for VesselDTO, ScenarioDTO, SimulationStateDTO (T09)
- Create apps/api: Fastify v4 + Drizzle ORM + SQLite with vessels/scenarios CRUD (T10-T13)
- Create apps/web: Vite + React 18 + COOP/COEP headers (T14)
- Add simulation.worker.ts for WASM loop in Web Worker (T15)
- Add Zustand simulationStore (T16)
- Add TelemetryPanel component (T17)
- Verified: pnpm build 3/3 tasks, 21ms cached; ctest 211/211 pass (T18-T19)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-28 00:08:28 -03:00

63 lines
1.4 KiB
C++

#include <catch2/catch_test_macros.hpp>
#include <catch2/matchers/catch_matchers_floating_point.hpp>
#include <ymir/physics/Forces.h>
using Catch::Matchers::WithinAbs;
using namespace ymir;
TEST_CASE("Forces default constructed to zero", "[forces]")
{
Forces f;
for (int i = 0; i < 6; ++i)
REQUIRE_THAT(f.f[i], WithinAbs(0.0, 1e-15));
}
TEST_CASE("Forces::zero() returns zeroed forces", "[forces]")
{
Forces f = Forces::zero();
for (int i = 0; i < 6; ++i)
REQUIRE_THAT(f.f[i], WithinAbs(0.0, 1e-15));
}
TEST_CASE("Forces operator+", "[forces]")
{
Forces a, b;
a.f[0] = 100.0;
a.f[5] = 50.0;
b.f[0] = 200.0;
b.f[3] = -10.0;
Forces c = a + b;
REQUIRE_THAT(c.f[0], WithinAbs(300.0, 1e-12));
REQUIRE_THAT(c.f[3], WithinAbs(-10.0, 1e-12));
REQUIRE_THAT(c.f[5], WithinAbs(50.0, 1e-12));
}
TEST_CASE("Forces operator+=", "[forces]")
{
Forces a, b;
a.f[1] = 10.0;
b.f[1] = 5.0;
a += b;
REQUIRE_THAT(a.f[1], WithinAbs(15.0, 1e-12));
}
TEST_CASE("Forces operator-", "[forces]")
{
Forces a, b;
a.f[2] = 30.0;
b.f[2] = 10.0;
Forces c = a - b;
REQUIRE_THAT(c.f[2], WithinAbs(20.0, 1e-12));
}
TEST_CASE("Forces operator* scalar", "[forces]")
{
Forces a;
a.f[0] = 100.0;
Forces b = a * 3.0;
REQUIRE_THAT(b.f[0], WithinAbs(300.0, 1e-12));
REQUIRE_THAT(a.f[0], WithinAbs(100.0, 1e-12)); // original unchanged
}