multiple files can be open at the same time
This commit is contained in:
@@ -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") {
|
||||
|
||||
Reference in New Issue
Block a user