1
0
forked from 0ad/0ad

Adopt generator based interface by mapgen tests

This put the tests more in line with actual mapgen scripts.
This commit is contained in:
phosit 2024-09-19 18:36:06 +02:00
parent e56ebb3f46
commit 201d215f29
8 changed files with 130 additions and 136 deletions

View File

@ -10,10 +10,11 @@ Engine.GetTemplate = (path) => {
Engine.LoadLibrary("rmgen");
var g_MapSettings = { "Size": 512 };
var g_Map = new RandomMap(0, "blackness");
function* GenerateMap()
{
g_MapSettings = { "Size": 512 };
globalThis.g_Map = new RandomMap(0, "blackness");
let tileClass = new TileClass(g_Map.getSize());
let addedPos = new Vector2D(5, 0);

View File

@ -10,64 +10,67 @@ Engine.GetTemplate = (path) => {
Engine.LoadLibrary("rmgen");
function* GenerateMap()
{
var g_MapSettings = { "Size": 512 };
var g_Map = new RandomMap(0, "blackness");
let center = new Vector2D(10, 10);
let area = createArea(new DiskPlacer(3, center));
{
g_MapSettings = { "Size": 512 };
globalThis.g_Map = new RandomMap(0, "blackness");
const center = new Vector2D(10, 10);
let area = createArea(new DiskPlacer(3, center));
// Contains center
TS_ASSERT(area.contains(center));
// Contains center
TS_ASSERT(area.contains(center));
// Contains disk boundaries
TS_ASSERT(area.contains(new Vector2D(10, 13)));
TS_ASSERT(area.contains(new Vector2D(10, 7)));
TS_ASSERT(area.contains(new Vector2D(7, 10)));
TS_ASSERT(area.contains(new Vector2D(13, 10)));
// Contains disk boundaries
TS_ASSERT(area.contains(new Vector2D(10, 13)));
TS_ASSERT(area.contains(new Vector2D(10, 7)));
TS_ASSERT(area.contains(new Vector2D(7, 10)));
TS_ASSERT(area.contains(new Vector2D(13, 10)));
// Does not contain rectangle vertices
TS_ASSERT(!area.contains(new Vector2D(13, 13)));
TS_ASSERT(!area.contains(new Vector2D(7, 7)));
TS_ASSERT(!area.contains(new Vector2D(13, 7)));
TS_ASSERT(!area.contains(new Vector2D(7, 13)));
// Does not contain rectangle vertices
TS_ASSERT(!area.contains(new Vector2D(13, 13)));
TS_ASSERT(!area.contains(new Vector2D(7, 7)));
TS_ASSERT(!area.contains(new Vector2D(13, 7)));
TS_ASSERT(!area.contains(new Vector2D(7, 13)));
// Does not contain points outside disk range
TS_ASSERT(!area.contains(new Vector2D(10, 14)));
TS_ASSERT(!area.contains(new Vector2D(10, 6)));
TS_ASSERT(!area.contains(new Vector2D(6, 10)));
TS_ASSERT(!area.contains(new Vector2D(14, 10)));
// Does not contain points outside disk range
TS_ASSERT(!area.contains(new Vector2D(10, 14)));
TS_ASSERT(!area.contains(new Vector2D(10, 6)));
TS_ASSERT(!area.contains(new Vector2D(6, 10)));
TS_ASSERT(!area.contains(new Vector2D(14, 10)));
area = createArea(new DiskPlacer(3, new Vector2D(0, 0)));
area = createArea(new DiskPlacer(3, new Vector2D(0, 0)));
// Does not allow points out of map boundaries
TS_ASSERT(!area.contains(new Vector2D(-1, -1)));
// Contains map edge
TS_ASSERT(area.contains(new Vector2D(0, 0)));
}
{
// Contains points outside map disk range on CircularMap
var g_MapSettings = { "Size": 512, "CircularMap": true };
var g_Map = new RandomMap(0, "blackness");
var area = createArea(new DiskPlacer(10, new Vector2D(436, 436)));
TS_ASSERT(area.contains(new Vector2D(438, 438)));
TS_ASSERT(area.contains(new Vector2D(437, 436)));
TS_ASSERT(area.contains(new Vector2D(436, 437)));
TS_ASSERT(area.contains(new Vector2D(435, 435)));
area = createArea(new DiskPlacer(3, new Vector2D(0, 0)));
// Does not allow points out of map boundaries
TS_ASSERT(!area.contains(new Vector2D(-1, -1)));
}
{
var g_MapSettings = { "Size": 320, "CircularMap": true };
var g_Map = new RandomMap(0, "blackness");
// Does not error with floating point radius
var area = createArea(new DiskPlacer(86.4, new Vector2D(160, 160)));
// Does not error with extreme out of bounds disk
area = createArea(new DiskPlacer(86.4, new Vector2D(800, 800)));
// Does not error when disk on edge
area = createArea(new DiskPlacer(10, new Vector2D(321, 321)));
// Does not allow points out of map boundaries
TS_ASSERT(!area.contains(new Vector2D(-1, -1)));
// Contains map edge
TS_ASSERT(area.contains(new Vector2D(0, 0)));
}
{
// Contains points outside map disk range on CircularMap
g_MapSettings = { "Size": 512, "CircularMap": true };
g_Map = new RandomMap(0, "blackness");
let area = createArea(new DiskPlacer(10, new Vector2D(436, 436)));
TS_ASSERT(area.contains(new Vector2D(438, 438)));
TS_ASSERT(area.contains(new Vector2D(437, 436)));
TS_ASSERT(area.contains(new Vector2D(436, 437)));
TS_ASSERT(area.contains(new Vector2D(435, 435)));
area = createArea(new DiskPlacer(3, new Vector2D(0, 0)));
// Does not allow points out of map boundaries
TS_ASSERT(!area.contains(new Vector2D(-1, -1)));
}
{
g_MapSettings = { "Size": 320, "CircularMap": true };
g_Map = new RandomMap(0, "blackness");
// Does not error with floating point radius
var area = createArea(new DiskPlacer(86.4, new Vector2D(160, 160)));
// Does not error with extreme out of bounds disk
area = createArea(new DiskPlacer(86.4, new Vector2D(800, 800)));
// Does not error when disk on edge
area = createArea(new DiskPlacer(10, new Vector2D(321, 321)));
}
}

View File

@ -10,10 +10,11 @@ Engine.GetTemplate = (path) => {
Engine.LoadLibrary("rmgen");
var g_MapSettings = { "Size": 512 };
var g_Map = new RandomMap(0, "blackness");
function* GenerateMap()
{
g_MapSettings = { "Size": 512 };
globalThis.g_Map = new RandomMap(0, "blackness");
let min = new Vector2D(4, 4);
let max = new Vector2D(10, 10);

View File

@ -3,14 +3,11 @@ function* GenerateMap()
try
{
yield;
TS_FAIL("The yield statement didn't throw.");
}
catch (error)
{
TS_ASSERT(error instanceof Error);
TS_ASSERT_EQUALS(error.message, "Failed to convert the yielded value to an integer.");
yield 50;
return;
}
TS_FAIL("The yield statement didn't throw.");
}

View File

@ -10,10 +10,11 @@ Engine.GetTemplate = (path) => {
Engine.LoadLibrary("rmgen");
var g_MapSettings = { "Size": 512 };
var g_Map = new RandomMap(0, "blackness");
function* GenerateMap()
{
g_MapSettings = { "Size": 512 };
globalThis.g_Map = new RandomMap(0, "blackness");
let min = new Vector2D(5, 5);
let max = new Vector2D(7, 7);

View File

@ -10,10 +10,10 @@ Engine.GetTemplate = (path) => {
Engine.LoadLibrary("rmgen");
var g_MapSettings = { "Size": 512 };
var g_Map;
function* GenerateMap()
{
g_MapSettings = { "Size": 512 };
let min = new Vector2D(5, 5);
let center = new Vector2D(6, 6);
let max = new Vector2D(7, 7);
@ -23,7 +23,7 @@ var g_Map;
// Test SmoothingPainter
{
g_Map = new RandomMap(0, "blackness");
globalThis.g_Map = new RandomMap(0, "blackness");
let centerHeight = g_Map.getHeight(center);

View File

@ -10,56 +10,59 @@ Engine.GetTemplate = (path) => {
Engine.LoadLibrary("rmgen");
var g_MapSettings = { "Size": 512 };
var g_Map = new RandomMap(0, "blackness");
// Test that that it checks by value, not by reference
function* GenerateMap()
{
const tileClass = new TileClass(2);
const reference1 = new Vector2D(1, 1);
const reference2 = new Vector2D(1, 1);
tileClass.add(reference1);
TS_ASSERT(tileClass.has(reference2));
}
// Test out-of-bounds
{
const tileClass = new TileClass(32);
const absentPoints = [
new Vector2D(0, 0),
new Vector2D(0, 1),
new Vector2D(1, 0),
new Vector2D(-1, -1),
new Vector2D(2048, 0),
new Vector2D(0, NaN),
new Vector2D(0, Infinity)
];
for (const point of absentPoints)
TS_ASSERT(!tileClass.has(point));
}
// Test getters
{
const tileClass = new TileClass(88);
const point = new Vector2D(5, 5);
tileClass.add(point);
const pointBorder = new Vector2D(1, 9);
tileClass.add(pointBorder);
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, 2), 12);
TS_ASSERT_EQUALS(tileClass.countNonMembersInRadius(point, 3), 28);
// Points not on the map are not counted.
TS_ASSERT_EQUALS(tileClass.countNonMembersInRadius(pointBorder, 1), 4);
TS_ASSERT_EQUALS(tileClass.countNonMembersInRadius(pointBorder, 2), 11);
TS_ASSERT_EQUALS(tileClass.countNonMembersInRadius(pointBorder, 3), 22);
g_MapSettings = { "Size": 512 };
globalThis.g_Map = new RandomMap(0, "blackness");
// Test that that it checks by value, not by reference
{
const tileClass = new TileClass(2);
const reference1 = new Vector2D(1, 1);
const reference2 = new Vector2D(1, 1);
tileClass.add(reference1);
TS_ASSERT(tileClass.has(reference2));
}
// Test out-of-bounds
{
const tileClass = new TileClass(32);
const absentPoints = [
new Vector2D(0, 0),
new Vector2D(0, 1),
new Vector2D(1, 0),
new Vector2D(-1, -1),
new Vector2D(2048, 0),
new Vector2D(0, NaN),
new Vector2D(0, Infinity)
];
for (const point of absentPoints)
TS_ASSERT(!tileClass.has(point));
}
// Test getters
{
const tileClass = new TileClass(88);
const point = new Vector2D(5, 5);
tileClass.add(point);
const pointBorder = new Vector2D(1, 9);
tileClass.add(pointBorder);
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, 2), 12);
TS_ASSERT_EQUALS(tileClass.countNonMembersInRadius(point, 3), 28);
// Points not on the map are not counted.
TS_ASSERT_EQUALS(tileClass.countNonMembersInRadius(pointBorder, 1), 4);
TS_ASSERT_EQUALS(tileClass.countNonMembersInRadius(pointBorder, 2), 11);
TS_ASSERT_EQUALS(tileClass.countNonMembersInRadius(pointBorder, 3), 22);
}
}

View File

@ -60,22 +60,10 @@ public:
const Script::StructuredClone result{RunMapGenerationScript(progress, scriptInterface,
path, "{\"Seed\": 0}", JSPROP_ENUMERATE | JSPROP_PERMANENT)};
if (path == "maps/random/tests/test_Generator.js" ||
path == "maps/random/tests/test_RecoverableError.js")
{
TS_ASSERT_DIFFERS(result, nullptr);
if (path == "maps/random/tests/test_Generator.js")
TS_ASSERT_EQUALS(progress.load(), 50);
TS_ASSERT_DIFFERS(result, nullptr);
}
else
{
// The test scripts don't call `ExportMap` so `RunMapGenerationScript` allways
// returns `nullptr`.
TS_ASSERT_EQUALS(result, nullptr);
// Because the test scripts don't call `ExportMap`, `GenerateMap` is searched, which
// doesn't exist.
TS_ASSERT_STR_CONTAINS(logger.GetOutput(),
"Failed to call the generator `GenerateMap`.");
}
}
}
};