Index: source/simulation2/components/tests/test_Pathfinder.h =================================================================== --- source/simulation2/components/tests/test_Pathfinder.h +++ source/simulation2/components/tests/test_Pathfinder.h @@ -17,8 +17,11 @@ #include "simulation2/system/ComponentTest.h" +#define TEST + #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 +67,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 +79,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 +92,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 +104,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 +116,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 +129,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 +155,8 @@ LDR_EndRegistering(); TS_ASSERT_OK(LDR_NonprogressiveLoad()); + sim2.PreInitGame(); + sim2.InitGame(); sim2.Update(0); CmpPtr cmp(sim2, SYSTEM_ENTITY); @@ -240,6 +268,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 +325,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);