| 254 | } |
| 255 | |
| 256 | EngineMatch* parseMatch(const QStringList& args, QObject* parent) |
| 257 | { |
| 258 | MatchParser parser(args); |
| 259 | parser.addOption("-srand", QMetaType::UInt, 1, 1); |
| 260 | parser.addOption("-tournament", QMetaType::QString, 1, 1); |
| 261 | parser.addOption("-engine", QMetaType::QStringList, 1, -1, true); |
| 262 | parser.addOption("-each", QMetaType::QStringList, 1); |
| 263 | parser.addOption("-variant", QMetaType::QString, 1, 1); |
| 264 | parser.addOption("-concurrency", QMetaType::Int, 1, 1); |
| 265 | parser.addOption("-draw", QMetaType::QStringList); |
| 266 | parser.addOption("-resign", QMetaType::QStringList); |
| 267 | parser.addOption("-maxmoves", QMetaType::Int, 1, 1); |
| 268 | parser.addOption("-tb", QMetaType::QString, 1, 1); |
| 269 | parser.addOption("-tbpieces", QMetaType::Int, 1, 1); |
| 270 | parser.addOption("-tbignore50", QMetaType::Bool, 0, 0); |
| 271 | parser.addOption("-event", QMetaType::QString, 1, 1); |
| 272 | parser.addOption("-games", QMetaType::Int, 1, 1); |
| 273 | parser.addOption("-rounds", QMetaType::Int, 1, 1); |
| 274 | parser.addOption("-sprt", QMetaType::QStringList); |
| 275 | parser.addOption("-ratinginterval", QMetaType::Int, 1, 1); |
| 276 | parser.addOption("-outcomeinterval", QMetaType::Int, 1, 1); |
| 277 | parser.addOption("-resultformat", QMetaType::QString, 1, 1); |
| 278 | parser.addOption("-debug", QMetaType::QString, 0, 1); |
| 279 | parser.addOption("-openings", QMetaType::QStringList); |
| 280 | parser.addOption("-bookmode", QMetaType::QString); |
| 281 | parser.addOption("-pgnout", QMetaType::QStringList, 1, 3); |
| 282 | parser.addOption("-epdout", QMetaType::QString, 1, 1); |
| 283 | parser.addOption("-repeat", QMetaType::Int, 0, 1); |
| 284 | parser.addOption("-noswap", QMetaType::Bool, 0, 0); |
| 285 | parser.addOption("-reverse", QMetaType::Bool, 0, 0); |
| 286 | parser.addOption("-recover", QMetaType::Bool, 0, 0); |
| 287 | parser.addOption("-site", QMetaType::QString, 1, 1); |
| 288 | parser.addOption("-wait", QMetaType::Int, 1, 1); |
| 289 | parser.addOption("-seeds", QMetaType::UInt, 1, 1); |
| 290 | if (!parser.parse()) |
| 291 | return nullptr; |
| 292 | |
| 293 | GameManager* manager = CuteChessCoreApplication::instance()->gameManager(); |
| 294 | |
| 295 | QString ttype = parser.takeOption("-tournament").toString(); |
| 296 | if (ttype.isEmpty()) |
| 297 | ttype = "round-robin"; |
| 298 | Tournament* tournament = TournamentFactory::create(ttype, manager, parent); |
| 299 | if (tournament == nullptr) |
| 300 | { |
| 301 | qWarning("Invalid tournament type: %s", qUtf8Printable(ttype)); |
| 302 | return nullptr; |
| 303 | } |
| 304 | |
| 305 | EngineMatch* match = new EngineMatch(tournament, parent); |
| 306 | |
| 307 | QList<EngineData> engines; |
| 308 | QStringList eachOptions; |
| 309 | GameAdjudicator adjudicator; |
| 310 | |
| 311 | const auto options = parser.options(); |
| 312 | for (const auto& option : options) |
| 313 | { |
no test coverage detected