示例#1
0
bool test_task_type_manip(TaskManager& task_manager,
                          const Waypoints &waypoints, unsigned n_points)
{
    if (!test_task_random_RT_AAT_FAI(task_manager, waypoints, n_points))
        return false;

    switch (rand() %4) {
    case 0:
        task_manager.SetFactory(TaskFactoryType::AAT);
        test_note("# switched FACTORY TYPE to AAT\n");
        break;
    case 1:
        task_manager.SetFactory(TaskFactoryType::RACING);
        test_note("# switched FACTORY TYPE to RT\n");
        break;
    case 2:
        task_manager.SetFactory(TaskFactoryType::FAI_GENERAL);
        test_note("# switched FACTORY TYPE to FAI GENERAL\n");
        break;
    case 3:
        task_manager.SetFactory(TaskFactoryType::MAT);
        test_note("# switched FACTORY TYPE to MAT\n");
        break;
    default:
        test_note("# unknown task type\n");
    }

    AbstractTaskFactory &fact = task_manager.GetFactory();
    fact.MutateTPsToTaskType();
    fact.UpdateStatsGeometry();

    test_note("# checking mutated start..\n");
    if (!fact.IsValidStartType(fact.GetType(task_manager.GetOrderedTask().GetTaskPoint(0))))
        return false;


    char tmp[255];
    sprintf(tmp, "# checking mutated intermediates.  task_size():%d..\n",
            task_manager.TaskSize());
    test_note(tmp);

    for (unsigned i = 1; i < (task_manager.TaskSize() - 1); i++) {
        sprintf(tmp, "# checking mutated intermediate point %d..\n", i);
        test_note(tmp);
        if (!fact.IsValidIntermediateType(fact.GetType(task_manager.GetOrderedTask().GetTaskPoint(i))))
            return false;
    }

    test_note("# checking mutated finish..\n");
    if (!fact.IsValidFinishType(
                fact.GetType(task_manager.GetOrderedTask().GetTaskPoint(task_manager.TaskSize() - 1))))
        return false;

    test_note("# validating task..\n");
    if (!fact.Validate()) {
        return false;
    }
    test_note("# checking task..\n");
    if (!task_manager.CheckOrderedTask()) {
        return false;
    }

    if (task_manager.GetOrderedTask().GetFactoryType() ==
            TaskFactoryType::FAI_GENERAL) {
        test_note("# checking OZs for FAI task..\n");
        if (!fact.ValidateFAIOZs())
            return false;
    }

    if (task_manager.GetOrderedTask().GetFactoryType() ==
            TaskFactoryType::MAT) {
        test_note("# checking OZs for MAT task..\n");
        if (!fact.ValidateMATOZs())
            return false;
    }
    return true;
}
bool test_task_type_manip(TaskManager& task_manager,
                     const Waypoints &waypoints, unsigned n_points)
{
  if (!test_task_random_RT_AAT_FAI(task_manager, waypoints, n_points))
    return false;

  AbstractTaskFactory &fact = task_manager.get_factory();

  switch (rand() %3) {
  case 0:
    task_manager.set_factory(TaskBehaviour::FACTORY_AAT);
    test_note("# switched FACTORY TYPE to AAT\n");
    break;
  case 1:
    task_manager.set_factory(TaskBehaviour::FACTORY_RT);
    test_note("# switched FACTORY TYPE to RT\n");
    break;
  case 2:
    task_manager.set_factory(TaskBehaviour::FACTORY_FAI_GENERAL);
    test_note("# switched FACTORY TYPE to FAI GENERAL\n");
    break;
  default:
    test_note("# unknown task type\n");
  }

  fact.mutate_tps_to_task_type();

  test_note("# checking mutated start..\n");
  if (!fact.validStartType(
      fact.getType(*task_manager.get_ordered_task().getTaskPoint(0))))
    return false;


  char tmp[255];
  sprintf(tmp, "# checking mutated intermediates.  task_size():%d..\n",
      task_manager.task_size());
  test_note(tmp);

  for (unsigned i = 1; i < (task_manager.task_size() - 1); i++) {
    sprintf(tmp, "# checking mutated intermediate point %d..\n", i);
    test_note(tmp);
    if (!fact.validIntermediateType(
        fact.getType(*task_manager.get_ordered_task().getTaskPoint(i))))
      return false;
  }

  test_note("# checking mutated finish..\n");
  if (!fact.validFinishType(
      fact.getType(*task_manager.get_ordered_task().getTaskPoint(
          task_manager.task_size() - 1))))
    return false;

  test_note("# validating task..\n");
  if (!fact.validate()) {
    return false;
  }
  test_note("# checking task..\n");
  if (!task_manager.check_ordered_task()) {
    return false;
  }

  if (task_manager.get_ordered_task().get_factory_type() ==
                                      TaskBehaviour::FACTORY_FAI_GENERAL) {
    test_note("# checking OZs for FAI task..\n");
    if (!fact.validateFAIOZs())
      return false;
  }

  return true;
}