Index: ps/trunk/binaries/data/mods/public/maps/random/tests/test_Constraint.js =================================================================== --- ps/trunk/binaries/data/mods/public/maps/random/tests/test_Constraint.js +++ ps/trunk/binaries/data/mods/public/maps/random/tests/test_Constraint.js @@ -0,0 +1,21 @@ +Engine.LoadLibrary("rmgen"); + +var g_MapSettings = { "Size": 512 }; +var g_Map = new RandomMap(0, 0, "blackness"); + +{ + let tileClass = new TileClass(g_Map.getSize()); + + let addedPos = new Vector2D(5, 0); + tileClass.add(addedPos); + + let origin = new Vector2D(0, 0); + + TS_ASSERT(!(new AvoidTileClassConstraint(tileClass, 0).allows(addedPos))); + TS_ASSERT(new AvoidTileClassConstraint(tileClass, 0).allows(origin)); + TS_ASSERT(!(new AvoidTileClassConstraint(tileClass, 5).allows(origin))); + + TS_ASSERT(new NearTileClassConstraint(tileClass, 5).allows(origin)); + TS_ASSERT(new NearTileClassConstraint(tileClass, 20).allows(origin)); + TS_ASSERT(!(new NearTileClassConstraint(tileClass, 4).allows(origin))); +} Index: ps/trunk/binaries/data/mods/public/maps/random/tests/test_LayeredPainter.js =================================================================== --- ps/trunk/binaries/data/mods/public/maps/random/tests/test_LayeredPainter.js +++ ps/trunk/binaries/data/mods/public/maps/random/tests/test_LayeredPainter.js @@ -0,0 +1,22 @@ +Engine.LoadLibrary("rmgen"); + +var g_MapSettings = { "Size": 512 }; +var g_Map = new RandomMap(0, 0, "blackness"); + +{ + let min = new Vector2D(4, 4); + let max = new Vector2D(10, 10); + + let center = Vector2D.average([min, max]); + + createArea( + new RectPlacer(min, max), + new LayeredPainter(["red", "blue"], [2])); + + TS_ASSERT_EQUALS(g_Map.getTexture(min), "red"); + TS_ASSERT_EQUALS(g_Map.getTexture(max), "red"); + TS_ASSERT_EQUALS(g_Map.getTexture(new Vector2D(-1, -1).add(max)), "red"); + TS_ASSERT_EQUALS(g_Map.getTexture(new Vector2D(-2, -2).add(max)), "blue"); + TS_ASSERT_EQUALS(g_Map.getTexture(new Vector2D(-3, -3).add(max)), "blue"); + TS_ASSERT_EQUALS(g_Map.getTexture(center), "blue"); +} Index: ps/trunk/binaries/data/mods/public/maps/random/tests/test_RectPlacer.js =================================================================== --- ps/trunk/binaries/data/mods/public/maps/random/tests/test_RectPlacer.js +++ ps/trunk/binaries/data/mods/public/maps/random/tests/test_RectPlacer.js @@ -0,0 +1,17 @@ +Engine.LoadLibrary("rmgen"); + +var g_MapSettings = { "Size": 512 }; +var g_Map = new RandomMap(0, 0, "blackness"); + +{ + let min = new Vector2D(5, 5); + let max = new Vector2D(7, 7); + + let area = createArea(new RectPlacer(min, max)); + + TS_ASSERT(!area.contains(new Vector2D(-1, -1).add(min))); + TS_ASSERT(area.contains(min)); + TS_ASSERT(area.contains(max)); + TS_ASSERT(area.contains(max.clone())); + TS_ASSERT(area.contains(Vector2D.average([min, max]))); +} Index: ps/trunk/binaries/data/mods/public/maps/random/tests/test_SmoothingPainter.js =================================================================== --- ps/trunk/binaries/data/mods/public/maps/random/tests/test_SmoothingPainter.js +++ ps/trunk/binaries/data/mods/public/maps/random/tests/test_SmoothingPainter.js @@ -0,0 +1,30 @@ +Engine.LoadLibrary("rmgen"); + +var g_MapSettings = { "Size": 512 }; +var g_Map; + +{ + let min = new Vector2D(5, 5); + let center = new Vector2D(6, 6); + let max = new Vector2D(7, 7); + + let minHeight = 20; + let maxHeight = 25; + + // Test SmoothingPainter + { + g_Map = new RandomMap(0, 0, "blackness"); + + let centerHeight = g_Map.getHeight(center); + + createArea( + new RectPlacer(min, max), + [ + new RandomElevationPainter(minHeight, maxHeight), + new SmoothingPainter(2, 1, 1) + ]); + + TS_ASSERT_GREATER_EQUAL(g_Map.getHeight(center), centerHeight); + TS_ASSERT_LESS_EQUAL(g_Map.getHeight(center), minHeight); + } +} Index: ps/trunk/binaries/data/mods/public/maps/random/tests/test_TileClass.js =================================================================== --- ps/trunk/binaries/data/mods/public/maps/random/tests/test_TileClass.js +++ ps/trunk/binaries/data/mods/public/maps/random/tests/test_TileClass.js @@ -15,6 +15,7 @@ // Test out-of-bounds { let tileClass = new TileClass(32); + let absentPoints = [ new Vector2D(0, 0), new Vector2D(0, 1), @@ -40,6 +41,8 @@ // Still one point remaining tileClass.remove(point); + TS_ASSERT(tileClass.has(point)); + tileClass.remove(point); TS_ASSERT(!tileClass.has(point)); } @@ -66,9 +69,10 @@ for (let i = 0; i < 50; ++i) tileClass.add(point); + TS_ASSERT_EQUALS(tileClass.countNonMembersInRadius(point, 1), 4); tileClass.remove(point); TS_ASSERT(tileClass.has(point)); - + TS_ASSERT_EQUALS(tileClass.countNonMembersInRadius(point, 1), 4); tileClass.remove(point); TS_ASSERT(tileClass.has(point)); } @@ -76,16 +80,19 @@ // Test getters { let tileClass = new TileClass(88); + let point = new Vector2D(5, 1); tileClass.add(point); let point2 = new Vector2D(4, 9); tileClass.add(point2); + TS_ASSERT_EQUALS(tileClass.countMembersInRadius(point, 0), 1); TS_ASSERT_EQUALS(tileClass.countMembersInRadius(point, 1), 1); TS_ASSERT_EQUALS(tileClass.countMembersInRadius(point, 100), 2); TS_ASSERT_EQUALS(tileClass.countNonMembersInRadius(point, 1), 4); + TS_ASSERT_EQUALS(tileClass.countNonMembersInRadius(point, 1), 4); TS_ASSERT_EQUALS(tileClass.countNonMembersInRadius(point, 2), 12); TS_ASSERT_EQUALS(tileClass.countNonMembersInRadius(point, 3), 28); } Index: ps/trunk/binaries/data/tests/test_setup.js =================================================================== --- ps/trunk/binaries/data/tests/test_setup.js +++ ps/trunk/binaries/data/tests/test_setup.js @@ -8,31 +8,31 @@ function fail(msg) { // Get a list of callers - let trace = (new Error).stack.split("\n"); + let trace = (new Error()).stack.split("\n"); // Remove the Error ctor and this function from the stack trace = trace.splice(2); trace = "Stack trace:\n" + trace.join("\n"); Engine.TS_FAIL(trace + msg); } -global.TS_FAIL = function TS_FAIL(msg) +global.TS_FAIL = function(msg) { fail(msg); }; -global.TS_ASSERT = function TS_ASSERT(e) +global.TS_ASSERT = function(e) { if (!e) fail("Assert failed"); }; -global.TS_ASSERT_EQUALS = function TS_ASSERT_EQUALS(x, y) +global.TS_ASSERT_EQUALS = function(x, y) { - if (!(x === y)) - fail("Expected equal, got "+uneval(x)+" !== "+uneval(y)); + if (x !== y) + fail("Expected equal, got " + uneval(x) + " !== " + uneval(y)); }; -global.TS_ASSERT_EQUALS_APPROX = function TS_ASSERT_EQUALS_APPROX(x, y, maxDifference) +global.TS_ASSERT_EQUALS_APPROX = function(x, y, maxDifference) { TS_ASSERT_NUMBER(maxDifference); @@ -40,10 +40,10 @@ fail("Expected almost equal, got " + uneval(x) + " !== " + uneval(y)); }; -global.TS_ASSERT_UNEVAL_EQUALS = function TS_ASSERT_UNEVAL_EQUALS(x, y) +global.TS_ASSERT_UNEVAL_EQUALS = function(x, y) { if (!(uneval(x) === uneval(y))) - fail("Expected equal, got "+uneval(x)+" !== "+uneval(y)); + fail("Expected equal, got " + uneval(x) + " !== " + uneval(y)); }; global.TS_ASSERT_EXCEPTION = function(func) @@ -60,3 +60,27 @@ if (typeof value != "number" || !isFinite(value)) fail("The given value must be a real number!"); }; + +global.TS_ASSERT_LESS = function(x, y) +{ + if (x >= y) + fail("Expected less than, got " + uneval(x) + " >= " + uneval(y)); +}; + +global.TS_ASSERT_GREATER = function(x, y) +{ + if (x <= y) + fail("Expected greater than, got " + uneval(x) + " <= " + uneval(y)); +}; + +global.TS_ASSERT_LESS_EQUAL = function(x, y) +{ + if (x > y) + fail("Expected less than or equal to, got " + uneval(x) + " > " + uneval(y)); +}; + +global.TS_ASSERT_GREATER_EQUAL = function(x, y) +{ + if (x < y) + fail("Expected greater than or equal, got " + uneval(x) + " < " + uneval(y)); +};