multiple files can be open at the same time

This commit is contained in:
Connor
2026-02-22 20:39:58 +09:00
parent 376442e95a
commit 1e6a8d4f60
8 changed files with 980 additions and 229 deletions

View File

@@ -168,6 +168,38 @@ TEST_SUITE("WorldGraph::Nodes") {
CHECK(n.Evaluate(c, {}).AsInt() == -3);
}
// ── Abs / Negate ──────────────────────────────────────────────────────────
TEST_CASE("AbsNode: positive input unchanged") {
AbsNode n;
CHECK(n.Evaluate(ctx, { Value::MakeFloat(3.0f) }).AsFloat() == doctest::Approx(3.0f));
}
TEST_CASE("AbsNode: negative input becomes positive") {
AbsNode n;
CHECK(n.Evaluate(ctx, { Value::MakeFloat(-7.5f) }).AsFloat() == doctest::Approx(7.5f));
}
TEST_CASE("AbsNode: zero") {
AbsNode n;
CHECK(n.Evaluate(ctx, { Value::MakeFloat(0.0f) }).AsFloat() == doctest::Approx(0.0f));
}
TEST_CASE("NegateNode: positive becomes negative") {
NegateNode n;
CHECK(n.Evaluate(ctx, { Value::MakeFloat(4.0f) }).AsFloat() == doctest::Approx(-4.0f));
}
TEST_CASE("NegateNode: negative becomes positive") {
NegateNode n;
CHECK(n.Evaluate(ctx, { Value::MakeFloat(-2.5f) }).AsFloat() == doctest::Approx(2.5f));
}
TEST_CASE("NegateNode: zero") {
NegateNode n;
CHECK(n.Evaluate(ctx, { Value::MakeFloat(0.0f) }).AsFloat() == doctest::Approx(0.0f));
}
// ── Min / Max / Clamp ─────────────────────────────────────────────────────
TEST_CASE("MinNode: returns smaller value") {
@@ -216,6 +248,42 @@ TEST_SUITE("WorldGraph::Nodes") {
== doctest::Approx(10.0f));
}
// ── Map (range remap) ─────────────────────────────────────────────────────
TEST_CASE("MapNode: maps midpoint correctly") {
MapNode n(0.0f, 1.0f, 0.0f, 100.0f);
CHECK(n.Evaluate(ctx, { Value::MakeFloat(0.5f) }).AsFloat() == doctest::Approx(50.0f));
}
TEST_CASE("MapNode: maps min boundary") {
MapNode n(0.0f, 1.0f, 10.0f, 20.0f);
CHECK(n.Evaluate(ctx, { Value::MakeFloat(0.0f) }).AsFloat() == doctest::Approx(10.0f));
}
TEST_CASE("MapNode: maps max boundary") {
MapNode n(0.0f, 1.0f, 10.0f, 20.0f);
CHECK(n.Evaluate(ctx, { Value::MakeFloat(1.0f) }).AsFloat() == doctest::Approx(20.0f));
}
TEST_CASE("MapNode: maps noise range [-1, 1] to [0, 1]") {
MapNode n(-1.0f, 1.0f, 0.0f, 1.0f);
CHECK(n.Evaluate(ctx, { Value::MakeFloat(-1.0f) }).AsFloat() == doctest::Approx(0.0f));
CHECK(n.Evaluate(ctx, { Value::MakeFloat( 0.0f) }).AsFloat() == doctest::Approx(0.5f));
CHECK(n.Evaluate(ctx, { Value::MakeFloat( 1.0f) }).AsFloat() == doctest::Approx(1.0f));
}
TEST_CASE("MapNode: inverted output range") {
MapNode n(0.0f, 1.0f, 1.0f, 0.0f);
CHECK(n.Evaluate(ctx, { Value::MakeFloat(0.0f) }).AsFloat() == doctest::Approx(1.0f));
CHECK(n.Evaluate(ctx, { Value::MakeFloat(1.0f) }).AsFloat() == doctest::Approx(0.0f));
CHECK(n.Evaluate(ctx, { Value::MakeFloat(0.25f) }).AsFloat() == doctest::Approx(0.75f));
}
TEST_CASE("MapNode: degenerate input range returns min1") {
MapNode n(5.0f, 5.0f, 99.0f, 100.0f); // min0 == max0
CHECK(n.Evaluate(ctx, { Value::MakeFloat(5.0f) }).AsFloat() == doctest::Approx(99.0f));
}
// ── Int control flow ──────────────────────────────────────────────────────
TEST_CASE("IntBranchNode: selects true branch") {