bool test_task(TaskManager& task_manager, const Waypoints &waypoints, int test_num) { unsigned n_points = rand()%8+1; switch (test_num) { case 0: return test_task_mixed(task_manager,waypoints); case 1: return test_task_fai(task_manager,waypoints); case 2: return test_task_aat(task_manager,waypoints); case 3: return test_task_or(task_manager,waypoints); case 4: return test_task_dash(task_manager,waypoints); case 5: return test_task_fg(task_manager,waypoints); case 6: return test_task_manip(task_manager,waypoints); case 7: return test_task_random(task_manager,waypoints,n_points); case 8: return test_task_mat(task_manager,waypoints); default: return false; } }
bool test_task_bad(TaskManager& task_manager, const Waypoints& waypoints) { test_task_random(task_manager,waypoints,2); task_manager.SetFactory(TaskFactoryType::RACING); AbstractTaskFactory& fact = task_manager.GetFactory(); const Waypoint* wp = random_waypoint(waypoints); ok (!fact.CreateFinish((TaskPointFactoryType)20,*wp),"bad finish type",0); ok (!fact.CreateStart((TaskPointFactoryType)20,*wp),"bad start type",0); ok (!fact.CreateIntermediate((TaskPointFactoryType)20,*wp),"bad intermediate type",0); // now create a taskpoint from FAI const TaskPointFactoryType s = GetRandomType(fact.GetIntermediateTypes()); // test it is bad for AAT task_manager.SetFactory(TaskFactoryType::AAT); AbstractTaskFactory& bfact = task_manager.GetFactory(); ok (!bfact.CreateIntermediate(s,*wp),"bad intermediate type (after task change)",0); bfact.Remove(1); bfact.UpdateStatsGeometry(); ok (bfact.Validate(),"ok with one tp",0); bfact.Remove(1); bfact.UpdateStatsGeometry(); ok (bfact.Validate(),"ok with zero tps (just start and finish)",0); ok (bfact.Remove(task_manager.TaskSize()-1,false),"remove finish manually",0); bfact.UpdateStatsGeometry(); ok (!bfact.Validate(),"aat is invalid (no finish)",0); return true; }
bool test_task_bad(TaskManager& task_manager, const Waypoints& waypoints) { test_task_random(task_manager,waypoints,2); task_manager.set_factory(OrderedTask::FACTORY_RT); AbstractTaskFactory& fact = task_manager.get_factory(); const Waypoint* wp = random_waypoint(waypoints); ok (!fact.createFinish((AbstractTaskFactory::LegalPointType_t)20,*wp),"bad finish type",0); ok (!fact.createStart((AbstractTaskFactory::LegalPointType_t)20,*wp),"bad start type",0); ok (!fact.createIntermediate((AbstractTaskFactory::LegalPointType_t)20,*wp),"bad intermediate type",0); // now create a taskpoint from FAI AbstractTaskFactory::LegalPointType_t s = fact.getIntermediateTypes()[(rand() % fact.getIntermediateTypes().size())]; // test it is bad for AAT task_manager.set_factory(OrderedTask::FACTORY_AAT); AbstractTaskFactory& bfact = task_manager.get_factory(); ok (!bfact.createIntermediate(s,*wp),"bad intermediate type (after task change)",0); bfact.remove(1); ok (bfact.validate(),"ok with one tp",0); bfact.remove(1); ok (!bfact.validate(),"insufficient tps for aat",0); ok (bfact.remove(task_manager.task_size()-1,false),"remove finish manually",0); ok (!bfact.validate(),"aat is invalid (no finish)",0); return true; }