Index: ps/trunk/source/simulation2/components/tests/test_Pathfinder.h =================================================================== --- ps/trunk/source/simulation2/components/tests/test_Pathfinder.h +++ ps/trunk/source/simulation2/components/tests/test_Pathfinder.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2018 Wildfire Games. +/* Copyright (C) 2019 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -19,6 +19,7 @@ #include "simulation2/components/ICmpObstructionManager.h" #include "simulation2/components/ICmpPathfinder.h" +#include "simulation2/components/CCmpPathfinder_Common.h" #include "graphics/MapReader.h" #include "graphics/Terrain.h" @@ -64,7 +65,7 @@ TS_ASSERT_EQUALS((Pathfinding::NAVCELL_SIZE >> 1).ToInt_RoundToZero(), Pathfinding::NAVCELL_SIZE_LOG2); } - void test_pathgoal() + void test_pathgoal_nearest_distance() { entity_pos_t i = Pathfinding::NAVCELL_SIZE; CFixedVector2D u(i*1, i*0); @@ -76,6 +77,11 @@ TS_ASSERT_EQUALS(goal.DistanceToPoint(u*8 + v*4), i*2); TS_ASSERT_EQUALS(goal.NearestPointOnGoal(u*0 + v*0), u*8 + v*6); TS_ASSERT_EQUALS(goal.DistanceToPoint(u*0 + v*0), i*10); + TS_ASSERT(goal.RectContainsGoal(i*4, i*3, i*12, i*9)); + TS_ASSERT(goal.RectContainsGoal(i*4, i*3, i*8, i*6)); + TS_ASSERT(goal.RectContainsGoal(i*8, i*6, i*12, i*9)); + TS_ASSERT(!goal.RectContainsGoal(i*4, i*3, i*7, i*5)); + TS_ASSERT(!goal.RectContainsGoal(i*9, i*7, i*13, i*15)); } { @@ -84,6 +90,10 @@ TS_ASSERT_EQUALS(goal.DistanceToPoint(u*8 + v*4), i*0); TS_ASSERT_EQUALS(goal.NearestPointOnGoal(u*0 + v*0), u*4 + v*3); TS_ASSERT_EQUALS(goal.DistanceToPoint(u*0 + v*0), i*5); + TS_ASSERT(goal.RectContainsGoal(i*7, i*5, i*9, i*7)); // fully inside + TS_ASSERT(goal.RectContainsGoal(i*3, i*1, i*13, i*11)); // fully outside + TS_ASSERT(goal.RectContainsGoal(i*4, i*3, i*8, i*6)); // partially inside + TS_ASSERT(goal.RectContainsGoal(i*4, i*0, i*12, i*1)); // touching the edge } { @@ -92,6 +102,10 @@ TS_ASSERT_EQUALS(goal.DistanceToPoint(u*8 + v*4), i*3); TS_ASSERT_EQUALS(goal.NearestPointOnGoal(u*0 + v*0), u*0 + v*0); TS_ASSERT_EQUALS(goal.DistanceToPoint(u*0 + v*0), i*0); + TS_ASSERT(!goal.RectContainsGoal(i*7, i*5, i*9, i*7)); // fully inside + TS_ASSERT(goal.RectContainsGoal(i*3, i*1, i*13, i*11)); // fully outside + TS_ASSERT(goal.RectContainsGoal(i*4, i*3, i*8, i*6)); // partially inside + TS_ASSERT(goal.RectContainsGoal(i*4, i*0, i*12, i*1)); // touching the edge } { @@ -100,6 +114,11 @@ TS_ASSERT_EQUALS(goal.DistanceToPoint(u*8 + v*4), i*0); TS_ASSERT_EQUALS(goal.NearestPointOnGoal(u*0 + v*0), u*4 + v*3); TS_ASSERT_EQUALS(goal.DistanceToPoint(u*0 + v*0), i*5); + TS_ASSERT(goal.RectContainsGoal(i*7, i*5, i*9, i*7)); // fully inside + TS_ASSERT(goal.RectContainsGoal(i*3, i*1, i*13, i*11)); // fully outside + TS_ASSERT(goal.RectContainsGoal(i*4, i*3, i*8, i*6)); // partially inside + TS_ASSERT(goal.RectContainsGoal(i*4, i*2, i*12, i*3)); // touching the edge + TS_ASSERT(goal.RectContainsGoal(i*3, i*0, i*4, i*10)); // touching the edge } { @@ -108,6 +127,11 @@ TS_ASSERT_EQUALS(goal.DistanceToPoint(u*8 + v*4), i*1); TS_ASSERT_EQUALS(goal.NearestPointOnGoal(u*0 + v*0), u*0 + v*0); TS_ASSERT_EQUALS(goal.DistanceToPoint(u*0 + v*0), i*0); + TS_ASSERT(!goal.RectContainsGoal(i*7, i*5, i*9, i*7)); // fully inside + TS_ASSERT(goal.RectContainsGoal(i*3, i*1, i*13, i*11)); // fully outside + TS_ASSERT(!goal.RectContainsGoal(i*4, i*3, i*8, i*6)); // inside, touching (should fail) + TS_ASSERT(goal.RectContainsGoal(i*4, i*2, i*12, i*3)); // touching the edge + TS_ASSERT(goal.RectContainsGoal(i*3, i*0, i*4, i*10)); // touching the edge } } @@ -129,6 +153,8 @@ LDR_EndRegistering(); TS_ASSERT_OK(LDR_NonprogressiveLoad()); + sim2.PreInitGame(); + sim2.InitGame(); sim2.Update(0); CmpPtr cmp(sim2, SYSTEM_ENTITY); @@ -240,6 +266,8 @@ LDR_EndRegistering(); TS_ASSERT_OK(LDR_NonprogressiveLoad()); + sim2.PreInitGame(); + sim2.InitGame(); sim2.Update(0); std::ofstream stream(OsString("perf2.html").c_str(), std::ofstream::out | std::ofstream::trunc); @@ -295,6 +323,8 @@ LDR_EndRegistering(); TS_ASSERT_OK(LDR_NonprogressiveLoad()); + sim2.PreInitGame(); + sim2.InitGame(); sim2.Update(0); std::ofstream stream(OsString("perf3.html").c_str(), std::ofstream::out | std::ofstream::trunc);