Refactor Swiss tests and clean up

This commit is contained in:
Quentin Rendu
2024-02-26 17:11:36 +01:00
committed by Claude Brisson
parent 211a08705e
commit 4ac951e759
2 changed files with 46 additions and 100 deletions

View File

@@ -1,7 +1,6 @@
package org.jeudego.pairgoth.test
import org.jeudego.pairgoth.ext.OpenGotha
import org.jeudego.pairgoth.model.toFullJson
import org.jeudego.pairgoth.model.toJson
import org.jeudego.pairgoth.util.XmlUtils
import org.junit.jupiter.api.Test
@@ -16,18 +15,20 @@ class ImportExportTests: TestBase() {
@Test
fun `001 test imports`() {
getTestResources("opengotha/tournamentfiles/").forEach { file ->
getTestResources("opengotha/tournamentfiles/")?.forEach { file ->
logger.info("reading resource ${file.canonicalPath}")
val resource = file.readText(StandardCharsets.UTF_8)
//logger.info("post resource to api: $resource")
val resp = TestAPI.post("/api/tour", resource)
val id = resp.asObject().getInt("id")
logger.info("read tournament id: $id")
val tournament = TestAPI.get("/api/tour/$id").asObject()
logger.info(tournament.toString().slice(0..50) + "...")
val players = TestAPI.get("/api/tour/$id/part").asArray()
logger.info(players.toString().slice(0..50) + "...")
for (round in 1..tournament.getInt("rounds")!!) {
val games = TestAPI.get("/api/tour/$id/res/1").asArray()
logger.info("games for round $round: {}", games.toString())
logger.info("games for round $round: {}", games.toString().slice(0..50) + "...")
}
val xml = TestAPI.getXml("/api/tour/$id")
logger.info(xml.slice(0..50)+"...")
@@ -38,7 +39,7 @@ class ImportExportTests: TestBase() {
fun `002 test opengotha import export`() {
// We import a tournament
// Check that after exporting and reimporting we get the same pairgoth tournament object
getTestResources("opengotha/tournamentfiles").forEach { file ->
getTestResources("opengotha/tournamentfiles")?.forEach { file ->
val resource = file.readText(StandardCharsets.UTF_8)
val root_xml = XmlUtils.parse(resource)
val tournament = OpenGotha.import(root_xml)

View File

@@ -117,6 +117,9 @@ class PairingTests: TestBase() {
openGothaPair.add(Pair(tmpOG.white, tmpOG.black))
}
}
if (gamesPair!=openGothaPair) {
logger.info("Pairings do not match "+gamesPair.asSequence().minus(openGothaPair).map {it}.toList().toString())
}
return gamesPair==openGothaPair
}
@@ -133,67 +136,44 @@ class PairingTests: TestBase() {
@Test
fun `008 simple swiss tournament`() {
/* // read tournament with pairing
var fileOG = getTestFile("opengotha/pairings/simpleswiss_7R.xml")
logger.info("read from file $fileOG")
val resourceOG = fileOG.readText(StandardCharsets.UTF_8)
val respOG = TestAPI.post("/api/tour", resourceOG)
val idOG = respOG.asObject().getInt("id")
val tournamentOG = TestAPI.get("/api/tour/$idOG").asObject()
logger.info(tournamentOG.toString().slice(0..50) + "...")
val playersOG = TestAPI.get("/api/tour/$idOG/part").asArray()
//logger.info(players.toString().slice(0..50) + "...")
//logger.info(playersOG.toString())
val pairingsOG = mutableListOf<String>()
for (round in 1..tournamentOG.getInt("rounds")!!) {
val games = TestAPI.get("/api/tour/$idOG/res/$round").asArray()
logger.info("games for round $round: {}", games.toString())
pairingsOG.add(games.toString())
}*/
val pairingsR1 = """[{"id":603,"t":1,"w":333,"b":338,"h":0,"r":"b","dd":0},{"id":604,"t":2,"w":324,"b":322,"h":0,"r":"b","dd":0},{"id":605,"t":3,"w":340,"b":332,"h":0,"r":"b","dd":0},{"id":606,"t":4,"w":321,"b":317,"h":0,"r":"b","dd":0},{"id":607,"t":5,"w":341,"b":316,"h":0,"r":"b","dd":0},{"id":608,"t":6,"w":312,"b":325,"h":0,"r":"b","dd":0},{"id":609,"t":7,"w":315,"b":314,"h":0,"r":"b","dd":0},{"id":610,"t":8,"w":331,"b":337,"h":0,"r":"b","dd":0},{"id":611,"t":9,"w":311,"b":326,"h":0,"r":"b","dd":0},{"id":612,"t":10,"w":320,"b":336,"h":0,"r":"b","dd":0},{"id":613,"t":11,"w":323,"b":318,"h":0,"r":"b","dd":0},{"id":614,"t":12,"w":310,"b":339,"h":0,"r":"b","dd":0},{"id":615,"t":13,"w":313,"b":327,"h":0,"r":"b","dd":0},{"id":616,"t":14,"w":330,"b":319,"h":0,"r":"b","dd":0},{"id":617,"t":15,"w":329,"b":334,"h":0,"r":"b","dd":0},{"id":618,"t":16,"w":335,"b":328,"h":0,"r":"b","dd":0}]"""
val pairingsR2 = """[{"id":619,"t":1,"w":334,"b":338,"h":0,"r":"b","dd":0},{"id":620,"t":2,"w":332,"b":322,"h":0,"r":"b","dd":0},{"id":621,"t":3,"w":317,"b":325,"h":0,"r":"b","dd":0},{"id":622,"t":4,"w":316,"b":326,"h":0,"r":"b","dd":0},{"id":623,"t":5,"w":318,"b":314,"h":0,"r":"b","dd":0},{"id":624,"t":6,"w":339,"b":337,"h":0,"r":"b","dd":0},{"id":625,"t":7,"w":319,"b":336,"h":0,"r":"b","dd":0},{"id":626,"t":8,"w":328,"b":327,"h":0,"r":"b","dd":0},{"id":627,"t":9,"w":340,"b":324,"h":0,"r":"b","dd":0},{"id":628,"t":10,"w":321,"b":312,"h":0,"r":"b","dd":0},{"id":629,"t":11,"w":311,"b":341,"h":0,"r":"b","dd":0},{"id":630,"t":12,"w":323,"b":315,"h":0,"r":"b","dd":0},{"id":631,"t":13,"w":331,"b":310,"h":0,"r":"b","dd":0},{"id":632,"t":14,"w":330,"b":320,"h":0,"r":"b","dd":0},{"id":633,"t":15,"w":335,"b":313,"h":0,"r":"b","dd":0},{"id":634,"t":16,"w":329,"b":333,"h":0,"r":"b","dd":0}]"""
val pairingsR3 = """[{"id":635,"t":1,"w":327,"b":338,"h":0,"r":"b","dd":0},{"id":636,"t":2,"w":322,"b":325,"h":0,"r":"b","dd":0},{"id":637,"t":3,"w":337,"b":314,"h":0,"r":"b","dd":0},{"id":638,"t":4,"w":326,"b":336,"h":0,"r":"b","dd":0},{"id":639,"t":5,"w":318,"b":317,"h":0,"r":"b","dd":0},{"id":640,"t":6,"w":313,"b":312,"h":0,"r":"b","dd":0},{"id":641,"t":7,"w":334,"b":319,"h":0,"r":"b","dd":0},{"id":642,"t":8,"w":333,"b":328,"h":0,"r":"b","dd":0},{"id":643,"t":9,"w":315,"b":316,"h":0,"r":"b","dd":0},{"id":644,"t":10,"w":339,"b":320,"h":0,"r":"b","dd":0},{"id":645,"t":11,"w":324,"b":310,"h":0,"r":"b","dd":0},{"id":646,"t":12,"w":332,"b":341,"h":0,"r":"b","dd":0},{"id":647,"t":13,"w":321,"b":340,"h":0,"r":"b","dd":0},{"id":648,"t":14,"w":329,"b":323,"h":0,"r":"b","dd":0},{"id":649,"t":15,"w":330,"b":311,"h":0,"r":"b","dd":0},{"id":650,"t":16,"w":335,"b":331,"h":0,"r":"b","dd":0}]"""
val pairingsR4 = """[{"id":651,"t":1,"w":314,"b":336,"h":0,"r":"b","dd":0},{"id":652,"t":2,"w":325,"b":338,"h":0,"r":"b","dd":0},{"id":653,"t":3,"w":326,"b":320,"h":0,"r":"b","dd":0},{"id":654,"t":4,"w":319,"b":327,"h":0,"r":"b","dd":0},{"id":655,"t":5,"w":316,"b":312,"h":0,"r":"b","dd":0},{"id":656,"t":6,"w":341,"b":322,"h":0,"r":"b","dd":0},{"id":657,"t":7,"w":337,"b":310,"h":0,"r":"b","dd":0},{"id":658,"t":8,"w":328,"b":317,"h":0,"r":"b","dd":0},{"id":659,"t":9,"w":339,"b":324,"h":0,"r":"b","dd":0},{"id":660,"t":10,"w":315,"b":311,"h":0,"r":"b","dd":0},{"id":661,"t":11,"w":318,"b":313,"h":0,"r":"b","dd":0},{"id":662,"t":12,"w":331,"b":332,"h":0,"r":"b","dd":0},{"id":663,"t":13,"w":340,"b":334,"h":0,"r":"b","dd":0},{"id":664,"t":14,"w":323,"b":333,"h":0,"r":"b","dd":0},{"id":665,"t":15,"w":330,"b":335,"h":0,"r":"b","dd":0},{"id":666,"t":16,"w":321,"b":329,"h":0,"r":"b","dd":0}]"""
val pairingsR5 = """[{"id":667,"t":1,"w":336,"b":338,"h":0,"r":"b","dd":0},{"id":668,"t":2,"w":320,"b":325,"h":0,"r":"b","dd":0},{"id":669,"t":3,"w":312,"b":327,"h":0,"r":"b","dd":0},{"id":670,"t":4,"w":322,"b":317,"h":0,"r":"b","dd":0},{"id":671,"t":5,"w":314,"b":310,"h":0,"r":"b","dd":0},{"id":672,"t":6,"w":324,"b":326,"h":0,"r":"b","dd":0},{"id":673,"t":7,"w":319,"b":313,"h":0,"r":"b","dd":0},{"id":674,"t":8,"w":328,"b":334,"h":0,"r":"b","dd":0},{"id":675,"t":9,"w":333,"b":341,"h":0,"r":"b","dd":0},{"id":676,"t":10,"w":332,"b":316,"h":0,"r":"b","dd":0},{"id":677,"t":11,"w":311,"b":337,"h":0,"r":"b","dd":0},{"id":678,"t":12,"w":339,"b":340,"h":0,"r":"b","dd":0},{"id":679,"t":13,"w":335,"b":318,"h":0,"r":"b","dd":0},{"id":680,"t":14,"w":331,"b":323,"h":0,"r":"b","dd":0},{"id":681,"t":15,"w":315,"b":329,"h":0,"r":"b","dd":0},{"id":682,"t":16,"w":321,"b":330,"h":0,"r":"b","dd":0}]"""
val pairingsR6 = """[{"id":683,"t":1,"w":327,"b":325,"h":0,"r":"b","dd":0},{"id":684,"t":2,"w":338,"b":317,"h":0,"r":"b","dd":0},{"id":685,"t":3,"w":310,"b":336,"h":0,"r":"b","dd":0},{"id":686,"t":4,"w":334,"b":312,"h":0,"r":"b","dd":0},{"id":687,"t":5,"w":313,"b":322,"h":0,"r":"b","dd":0},{"id":688,"t":6,"w":316,"b":314,"h":0,"r":"b","dd":0},{"id":689,"t":7,"w":341,"b":326,"h":0,"r":"b","dd":0},{"id":690,"t":8,"w":337,"b":320,"h":0,"r":"b","dd":0},{"id":691,"t":9,"w":332,"b":319,"h":0,"r":"b","dd":0},{"id":692,"t":10,"w":311,"b":328,"h":0,"r":"b","dd":0},{"id":693,"t":11,"w":340,"b":333,"h":0,"r":"b","dd":0},{"id":694,"t":12,"w":324,"b":323,"h":0,"r":"b","dd":0},{"id":695,"t":13,"w":329,"b":318,"h":0,"r":"b","dd":0},{"id":696,"t":14,"w":339,"b":335,"h":0,"r":"b","dd":0},{"id":697,"t":15,"w":315,"b":330,"h":0,"r":"b","dd":0},{"id":698,"t":16,"w":331,"b":321,"h":0,"r":"b","dd":0}]"""
/*
2 solutions have the same sum of weights, OpenGotha pairing is
val pairingsR7 = """[{"id":699,"t":1,"w":336,"b":325,"h":0,"r":"b","dd":0},{"id":700,"t":2,"w":317,"b":312,"h":0,"r":"b","dd":0},{"id":701,"t":3,"w":338,"b":326,"h":0,"r":"b","dd":0},{"id":702,"t":4,"w":314,"b":327,"h":0,"r":"b","dd":0},{"id":703,"t":5,"w":322,"b":310,"h":0,"r":"b","dd":0},{"id":704,"t":6,"w":320,"b":318,"h":0,"r":"b","dd":0},{"id":705,"t":7,"w":341,"b":313,"h":0,"r":"b","dd":0},{"id":706,"t":8,"w":333,"b":319,"h":0,"r":"b","dd":0},{"id":707,"t":9,"w":337,"b":328,"h":0,"r":"b","dd":0},{"id":708,"t":10,"w":334,"b":323,"h":0,"r":"b","dd":0},{"id":709,"t":11,"w":316,"b":329,"h":0,"r":"b","dd":0},{"id":710,"t":12,"w":324,"b":335,"h":0,"r":"b","dd":0},{"id":711,"t":13,"w":330,"b":332,"h":0,"r":"b","dd":0},{"id":712,"t":14,"w":340,"b":311,"h":0,"r":"b","dd":0},{"id":713,"t":15,"w":339,"b":321,"h":0,"r":"b","dd":0},{"id":714,"t":16,"w":331,"b":315,"h":0,"r":"b","dd":0}]"""
Pairgoth pairing is
*/
val pairingsR7 = """[{"id":699,"t":1,"w":336,"b":325,"h":0,"r":"?","dd":0},{"id":700,"t":2,"w":338,"b":326,"h":0,"r":"?","dd":1},{"id":701,"t":3,"w":317,"b":320,"h":0,"r":"?","dd":1},{"id":702,"t":4,"w":314,"b":327,"h":0,"r":"?","dd":0},{"id":703,"t":5,"w":322,"b":310,"h":0,"r":"?","dd":0},{"id":704,"t":6,"w":312,"b":318,"h":0,"r":"?","dd":1},{"id":705,"t":7,"w":341,"b":313,"h":0,"r":"?","dd":0},{"id":706,"t":8,"w":333,"b":319,"h":0,"r":"?","dd":0},{"id":707,"t":9,"w":337,"b":328,"h":0,"r":"?","dd":0},{"id":708,"t":10,"w":334,"b":323,"h":0,"r":"?","dd":0},{"id":709,"t":11,"w":316,"b":329,"h":0,"r":"?","dd":1},{"id":710,"t":12,"w":324,"b":335,"h":0,"r":"?","dd":0},{"id":711,"t":13,"w":330,"b":332,"h":0,"r":"?","dd":0},{"id":712,"t":14,"w":340,"b":311,"h":0,"r":"?","dd":0},{"id":713,"t":15,"w":339,"b":321,"h":0,"r":"?","dd":0},{"id":714,"t":16,"w":331,"b":315,"h":0,"r":"?","dd":0}]"""
val pairings = mutableListOf<String>()
pairings.add(pairingsR1)
pairings.add(pairingsR2)
pairings.add(pairingsR3)
pairings.add(pairingsR4)
pairings.add(pairingsR5)
pairings.add(pairingsR6)
pairings.add(pairingsR7)
// read tournament without pairings
var file = getTestFile("opengotha/pairings/simpleswiss_nopairings.xml")
// read tournament with pairing
var file = getTestFile("opengotha/pairings/simpleswiss_7R.xml")
logger.info("read from file $file")
val resource = file.readText(StandardCharsets.UTF_8)
var resp = TestAPI.post("/api/tour", resource)
val id = resp.asObject().getInt("id")
assertNotNull(id)
val tournament = TestAPI.get("/api/tour/$id").asObject()
logger.info(tournament.toString().slice(0..50) + "...")
val players = TestAPI.get("/api/tour/$id/part").asArray()
logger.info(players.toString().slice(0..50) + "...")
val pairingsOG = mutableListOf<String>()
for (round in 1..tournament.getInt("rounds")!!) {
val games = TestAPI.get("/api/tour/$id/res/$round").asArray()
logger.info("games for round $round: {}", games.toString().slice(0..50) + "...")
pairingsOG.add(games.toString())
}
for (round in tournament.getInt("rounds")!! downTo 1) {
TestAPI.delete("/api/tour/$id/pair/$round", Json.Array("all"))
}
/*
2 solutions have the same sum of weights, OpenGotha pairing is
"""[{"id":698,"t":1,"w":335,"b":324,"h":0,"r":"b","dd":0},{"id":699,"t":2,"w":316,"b":311,"h":0,"r":"b","dd":0},{"id":700,"t":3,"w":337,"b":325,"h":0,"r":"b","dd":0},{"id":701,"t":4,"w":313,"b":326,"h":0,"r":"b","dd":0},{"id":702,"t":5,"w":321,"b":309,"h":0,"r":"b","dd":0},{"id":703,"t":6,"w":319,"b":317,"h":0,"r":"b","dd":0},{"id":704,"t":7,"w":340,"b":312,"h":0,"r":"b","dd":0},{"id":705,"t":8,"w":332,"b":318,"h":0,"r":"b","dd":0},{"id":706,"t":9,"w":336,"b":327,"h":0,"r":"b","dd":0},{"id":707,"t":10,"w":333,"b":322,"h":0,"r":"b","dd":0},{"id":708,"t":11,"w":315,"b":328,"h":0,"r":"b","dd":0},{"id":709,"t":12,"w":323,"b":334,"h":0,"r":"b","dd":0},{"id":710,"t":13,"w":329,"b":331,"h":0,"r":"b","dd":0},{"id":711,"t":14,"w":339,"b":310,"h":0,"r":"b","dd":0},{"id":712,"t":15,"w":338,"b":320,"h":0,"r":"b","dd":0},{"id":713,"t":16,"w":330,"b":314,"h":0,"r":"b","dd":0}]"""
Pairgoth pairing is
*/
pairingsOG[6] = """[{"id":810,"t":1,"w":335,"b":324,"h":0,"r":"?","dd":0},{"id":811,"t":2,"w":337,"b":325,"h":0,"r":"?","dd":1},{"id":812,"t":3,"w":316,"b":319,"h":0,"r":"?","dd":1},{"id":813,"t":4,"w":313,"b":326,"h":0,"r":"?","dd":0},{"id":814,"t":5,"w":321,"b":309,"h":0,"r":"?","dd":0},{"id":815,"t":6,"w":311,"b":317,"h":0,"r":"?","dd":1},{"id":816,"t":7,"w":340,"b":312,"h":0,"r":"?","dd":0},{"id":817,"t":8,"w":332,"b":318,"h":0,"r":"?","dd":0},{"id":818,"t":9,"w":336,"b":327,"h":0,"r":"?","dd":0},{"id":819,"t":10,"w":333,"b":322,"h":0,"r":"?","dd":0},{"id":820,"t":11,"w":315,"b":328,"h":0,"r":"?","dd":1},{"id":821,"t":12,"w":323,"b":334,"h":0,"r":"?","dd":0},{"id":822,"t":13,"w":329,"b":331,"h":0,"r":"?","dd":0},{"id":823,"t":14,"w":339,"b":310,"h":0,"r":"?","dd":0},{"id":824,"t":15,"w":338,"b":320,"h":0,"r":"?","dd":0},{"id":825,"t":16,"w":330,"b":314,"h":0,"r":"?","dd":0}]"""
var games: Json.Array
var firstGameID: Int
for (round in 1..7) {
BaseSolver.weightsLogger = PrintWriter(FileWriter(getOutputFile("weights.txt")))
games = TestAPI.post("/api/tour/$id/pair/$round", Json.Array("all")).asArray()
logger.info("games for round $round: {}", games.toString())
logger.info("games for round $round: {}", games.toString().slice(0..50) + "...")
assertTrue(compare_weights(getOutputFile("weights.txt"), getTestFile("opengotha/simpleswiss_weights_R$round.txt")), "Not matching opengotha weights for round $round")
assertTrue(compare_games(games, Json.parse(pairings[round - 1])!!.asArray()),"pairings for round $round differ")
assertTrue(compare_games(games, Json.parse(pairingsOG[round - 1])!!.asArray()),"pairings for round $round differ")
logger.info("Pairings for round $round match OpenGotha")
firstGameID = (games.getJson(0)!!.asObject()["id"] as Long?)!!.toInt()
@@ -209,64 +189,31 @@ class PairingTests: TestBase() {
@Test
fun `009 not so simple swiss tournament`() {
/* // read tournament with pairing
var fileOG = getTestFile("opengotha/pairings/notsosimpleswiss_10R.xml")
logger.info("read from file $fileOG")
val resourceOG = fileOG.readText(StandardCharsets.UTF_8)
val respOG = TestAPI.post("/api/tour", resourceOG)
val idOG = respOG.asObject().getInt("id")
val tournamentOG = TestAPI.get("/api/tour/$idOG").asObject()
logger.info(tournamentOG.toString().slice(0..50) + "...")
val playersOG = TestAPI.get("/api/tour/$idOG/part").asArray()
//logger.info(players.toString().slice(0..50) + "...")
//logger.info(playersOG.toString())
val pairingsOG = mutableListOf<String>()
for (round in 1..tournamentOG.getInt("rounds")!!) {
val games = TestAPI.get("/api/tour/$idOG/res/$round").asArray()
logger.info("games for round $round: {}", games.toString())
pairingsOG.add(games.toString())
}*/
val pairingsR1 = """[{"id":723,"t":1,"w":389,"b":386,"h":0,"r":"b","dd":0},{"id":724,"t":2,"w":373,"b":383,"h":0,"r":"b","dd":0},{"id":725,"t":3,"w":374,"b":370,"h":0,"r":"b","dd":0},{"id":726,"t":4,"w":391,"b":381,"h":0,"r":"b","dd":0},{"id":727,"t":5,"w":369,"b":365,"h":0,"r":"b","dd":0},{"id":728,"t":6,"w":364,"b":371,"h":0,"r":"b","dd":0},{"id":729,"t":7,"w":392,"b":360,"h":0,"r":"b","dd":0},{"id":730,"t":8,"w":362,"b":375,"h":0,"r":"b","dd":0},{"id":731,"t":9,"w":388,"b":363,"h":0,"r":"b","dd":0},{"id":732,"t":10,"w":359,"b":368,"h":0,"r":"b","dd":0},{"id":733,"t":11,"w":387,"b":366,"h":0,"r":"b","dd":0},{"id":734,"t":12,"w":390,"b":372,"h":0,"r":"b","dd":0},{"id":735,"t":13,"w":358,"b":361,"h":0,"r":"b","dd":0},{"id":736,"t":14,"w":367,"b":376,"h":0,"r":"b","dd":0},{"id":737,"t":15,"w":380,"b":379,"h":0,"r":"b","dd":0},{"id":738,"t":16,"w":377,"b":385,"h":0,"r":"b","dd":0},{"id":739,"t":17,"w":384,"b":382,"h":0,"r":"b","dd":0}]"""
val pairingsR2 = """[{"id":740,"t":1,"w":381,"b":370,"h":0,"r":"b","dd":0},{"id":741,"t":2,"w":371,"b":365,"h":0,"r":"b","dd":0},{"id":742,"t":3,"w":360,"b":375,"h":0,"r":"b","dd":0},{"id":743,"t":4,"w":372,"b":363,"h":0,"r":"b","dd":0},{"id":744,"t":5,"w":368,"b":376,"h":0,"r":"b","dd":0},{"id":745,"t":6,"w":366,"b":385,"h":0,"r":"b","dd":0},{"id":746,"t":7,"w":386,"b":361,"h":0,"r":"b","dd":0},{"id":747,"t":8,"w":379,"b":383,"h":0,"r":"b","dd":0},{"id":748,"t":9,"w":378,"b":389,"h":0,"r":"b","dd":0},{"id":749,"t":10,"w":373,"b":380,"h":0,"r":"b","dd":0},{"id":750,"t":11,"w":384,"b":391,"h":0,"r":"b","dd":0},{"id":751,"t":12,"w":374,"b":364,"h":0,"r":"b","dd":0},{"id":752,"t":13,"w":369,"b":362,"h":0,"r":"b","dd":0},{"id":753,"t":14,"w":388,"b":392,"h":0,"r":"b","dd":0},{"id":754,"t":15,"w":390,"b":359,"h":0,"r":"b","dd":0},{"id":755,"t":16,"w":367,"b":387,"h":0,"r":"b","dd":0},{"id":756,"t":17,"w":377,"b":358,"h":0,"r":"b","dd":0}]"""
val pairingsR3 = """[{"id":757,"t":1,"w":383,"b":370,"h":0,"r":"b","dd":0},{"id":758,"t":2,"w":376,"b":375,"h":0,"r":"b","dd":0},{"id":759,"t":3,"w":361,"b":385,"h":0,"r":"b","dd":0},{"id":760,"t":4,"w":365,"b":363,"h":0,"r":"b","dd":0},{"id":761,"t":5,"w":386,"b":358,"h":0,"r":"b","dd":0},{"id":762,"t":6,"w":372,"b":360,"h":0,"r":"b","dd":0},{"id":763,"t":7,"w":371,"b":391,"h":0,"r":"b","dd":0},{"id":764,"t":8,"w":381,"b":364,"h":0,"r":"b","dd":0},{"id":765,"t":9,"w":368,"b":387,"h":0,"r":"b","dd":0},{"id":766,"t":10,"w":380,"b":366,"h":0,"r":"b","dd":0},{"id":767,"t":11,"w":379,"b":392,"h":0,"r":"b","dd":0},{"id":768,"t":12,"w":359,"b":362,"h":0,"r":"b","dd":0},{"id":769,"t":13,"w":382,"b":378,"h":0,"r":"b","dd":0},{"id":770,"t":14,"w":389,"b":369,"h":0,"r":"b","dd":0},{"id":771,"t":15,"w":367,"b":373,"h":0,"r":"b","dd":0},{"id":772,"t":16,"w":384,"b":388,"h":0,"r":"b","dd":0},{"id":773,"t":17,"w":390,"b":374,"h":0,"r":"b","dd":0}]"""
val pairingsR4 = """[{"id":774,"t":1,"w":385,"b":370,"h":0,"r":"b","dd":0},{"id":775,"t":2,"w":375,"b":363,"h":0,"r":"b","dd":0},{"id":776,"t":3,"w":358,"b":376,"h":0,"r":"b","dd":0},{"id":777,"t":4,"w":383,"b":392,"h":0,"r":"b","dd":0},{"id":778,"t":5,"w":364,"b":362,"h":0,"r":"b","dd":0},{"id":779,"t":6,"w":365,"b":387,"h":0,"r":"b","dd":0},{"id":780,"t":7,"w":366,"b":378,"h":0,"r":"b","dd":0},{"id":781,"t":8,"w":361,"b":391,"h":0,"r":"b","dd":0},{"id":782,"t":9,"w":360,"b":382,"h":0,"r":"b","dd":0},{"id":783,"t":10,"w":379,"b":374,"h":0,"r":"b","dd":0},{"id":784,"t":11,"w":372,"b":368,"h":0,"r":"b","dd":0},{"id":785,"t":12,"w":388,"b":377,"h":0,"r":"b","dd":0},{"id":786,"t":13,"w":369,"b":380,"h":0,"r":"b","dd":0},{"id":787,"t":14,"w":371,"b":389,"h":0,"r":"b","dd":0},{"id":788,"t":15,"w":373,"b":386,"h":0,"r":"b","dd":0},{"id":789,"t":16,"w":359,"b":381,"h":0,"r":"b","dd":0},{"id":790,"t":17,"w":390,"b":384,"h":0,"r":"b","dd":0}]"""
val pairingsR5 = """[{"id":791,"t":1,"w":370,"b":363,"h":0,"r":"b","dd":0},{"id":792,"t":2,"w":362,"b":387,"h":0,"r":"b","dd":0},{"id":793,"t":3,"w":376,"b":378,"h":0,"r":"b","dd":0},{"id":794,"t":4,"w":385,"b":392,"h":0,"r":"b","dd":0},{"id":795,"t":5,"w":375,"b":382,"h":0,"r":"b","dd":0},{"id":796,"t":6,"w":391,"b":366,"h":0,"r":"b","dd":0},{"id":797,"t":7,"w":383,"b":364,"h":0,"r":"b","dd":0},{"id":798,"t":8,"w":368,"b":358,"h":0,"r":"b","dd":0},{"id":799,"t":9,"w":365,"b":386,"h":0,"r":"b","dd":0},{"id":800,"t":10,"w":381,"b":389,"h":0,"r":"b","dd":0},{"id":801,"t":11,"w":374,"b":361,"h":0,"r":"b","dd":0},{"id":802,"t":12,"w":360,"b":377,"h":0,"r":"b","dd":0},{"id":803,"t":13,"w":380,"b":388,"h":0,"r":"b","dd":0},{"id":804,"t":14,"w":373,"b":359,"h":0,"r":"b","dd":0},{"id":805,"t":15,"w":384,"b":372,"h":0,"r":"b","dd":0},{"id":806,"t":16,"w":371,"b":367,"h":0,"r":"b","dd":0},{"id":807,"t":17,"w":369,"b":390,"h":0,"r":"b","dd":0}]"""
val pairingsR6 = """[{"id":808,"t":1,"w":387,"b":378,"h":0,"r":"b","dd":0},{"id":809,"t":2,"w":392,"b":370,"h":0,"r":"b","dd":0},{"id":810,"t":3,"w":363,"b":382,"h":0,"r":"b","dd":0},{"id":811,"t":4,"w":362,"b":358,"h":0,"r":"b","dd":0},{"id":812,"t":5,"w":376,"b":386,"h":0,"r":"b","dd":0},{"id":813,"t":6,"w":389,"b":361,"h":0,"r":"b","dd":0},{"id":814,"t":7,"w":391,"b":385,"h":0,"r":"b","dd":0},{"id":815,"t":8,"w":364,"b":366,"h":0,"r":"b","dd":0},{"id":816,"t":9,"w":375,"b":377,"h":0,"r":"b","dd":0},{"id":817,"t":10,"w":374,"b":368,"h":0,"r":"b","dd":0},{"id":818,"t":11,"w":372,"b":383,"h":0,"r":"b","dd":0},{"id":819,"t":12,"w":365,"b":379,"h":0,"r":"b","dd":0},{"id":820,"t":13,"w":380,"b":381,"h":0,"r":"b","dd":0},{"id":821,"t":14,"w":359,"b":388,"h":0,"r":"b","dd":0},{"id":822,"t":15,"w":360,"b":367,"h":0,"r":"b","dd":0},{"id":823,"t":16,"w":369,"b":384,"h":0,"r":"b","dd":0},{"id":824,"t":17,"w":371,"b":373,"h":0,"r":"b","dd":0}]"""
val pairingsR7 = """[{"id":825,"t":1,"w":363,"b":378,"h":0,"r":"b","dd":0},{"id":826,"t":2,"w":370,"b":382,"h":0,"r":"b","dd":0},{"id":827,"t":3,"w":392,"b":366,"h":0,"r":"b","dd":0},{"id":828,"t":4,"w":358,"b":387,"h":0,"r":"b","dd":0},{"id":829,"t":5,"w":386,"b":385,"h":0,"r":"b","dd":0},{"id":830,"t":6,"w":377,"b":391,"h":0,"r":"b","dd":0},{"id":831,"t":7,"w":381,"b":383,"h":0,"r":"b","dd":0},{"id":832,"t":8,"w":368,"b":389,"h":0,"r":"b","dd":0},{"id":833,"t":9,"w":388,"b":362,"h":0,"r":"b","dd":0},{"id":834,"t":10,"w":376,"b":364,"h":0,"r":"b","dd":0},{"id":835,"t":11,"w":375,"b":379,"h":0,"r":"b","dd":0},{"id":836,"t":12,"w":367,"b":380,"h":0,"r":"b","dd":0},{"id":837,"t":13,"w":359,"b":372,"h":0,"r":"b","dd":0},{"id":838,"t":14,"w":365,"b":384,"h":0,"r":"b","dd":0},{"id":839,"t":15,"w":373,"b":374,"h":0,"r":"b","dd":0},{"id":840,"t":16,"w":360,"b":390,"h":0,"r":"b","dd":0},{"id":841,"t":17,"w":371,"b":369,"h":0,"r":"b","dd":0}]"""
val pairingsR8 = """[{"id":842,"t":1,"w":382,"b":385,"h":0,"r":"b","dd":0},{"id":843,"t":2,"w":378,"b":370,"h":0,"r":"b","dd":0},{"id":844,"t":3,"w":387,"b":363,"h":0,"r":"b","dd":0},{"id":845,"t":4,"w":366,"b":361,"h":0,"r":"b","dd":0},{"id":846,"t":5,"w":383,"b":389,"h":0,"r":"b","dd":0},{"id":847,"t":6,"w":386,"b":364,"h":0,"r":"b","dd":0},{"id":848,"t":7,"w":391,"b":362,"h":0,"r":"b","dd":0},{"id":849,"t":8,"w":392,"b":377,"h":0,"r":"b","dd":0},{"id":850,"t":9,"w":358,"b":379,"h":0,"r":"b","dd":0},{"id":851,"t":10,"w":388,"b":368,"h":0,"r":"b","dd":0},{"id":852,"t":11,"w":384,"b":374,"h":0,"r":"b","dd":0},{"id":853,"t":12,"w":381,"b":372,"h":0,"r":"b","dd":0},{"id":854,"t":13,"w":376,"b":380,"h":0,"r":"b","dd":0},{"id":855,"t":14,"w":375,"b":367,"h":0,"r":"b","dd":0},{"id":856,"t":15,"w":390,"b":365,"h":0,"r":"b","dd":0},{"id":857,"t":16,"w":360,"b":373,"h":0,"r":"b","dd":0},{"id":858,"t":17,"w":369,"b":359,"h":0,"r":"b","dd":0}]"""
val pairingsR9 = """[{"id":859,"t":1,"w":385,"b":378,"h":0,"r":"b","dd":0},{"id":860,"t":2,"w":363,"b":361,"h":0,"r":"b","dd":0},{"id":861,"t":3,"w":382,"b":387,"h":0,"r":"b","dd":0},{"id":862,"t":4,"w":389,"b":362,"h":0,"r":"b","dd":0},{"id":863,"t":5,"w":370,"b":377,"h":0,"r":"b","dd":0},{"id":864,"t":6,"w":364,"b":379,"h":0,"r":"b","dd":0},{"id":865,"t":7,"w":374,"b":383,"h":0,"r":"b","dd":0},{"id":866,"t":8,"w":391,"b":368,"h":0,"r":"b","dd":0},{"id":867,"t":9,"w":386,"b":372,"h":0,"r":"b","dd":0},{"id":868,"t":10,"w":380,"b":392,"h":0,"r":"b","dd":0},{"id":869,"t":11,"w":358,"b":367,"h":0,"r":"b","dd":0},{"id":870,"t":12,"w":376,"b":384,"h":0,"r":"b","dd":0},{"id":871,"t":13,"w":365,"b":373,"h":0,"r":"b","dd":0},{"id":872,"t":14,"w":375,"b":359,"h":0,"r":"b","dd":0},{"id":873,"t":15,"w":381,"b":390,"h":0,"r":"b","dd":0},{"id":874,"t":16,"w":369,"b":360,"h":0,"r":"b","dd":0},{"id":875,"t":17,"w":388,"b":371,"h":0,"r":"b","dd":0}]"""
val pairingsR10 = """[{"id":876,"t":1,"w":361,"b":378,"h":0,"r":"b","dd":0},{"id":877,"t":2,"w":385,"b":363,"h":0,"r":"b","dd":0},{"id":878,"t":3,"w":362,"b":382,"h":0,"r":"b","dd":0},{"id":879,"t":4,"w":387,"b":377,"h":0,"r":"b","dd":0},{"id":880,"t":5,"w":370,"b":379,"h":0,"r":"b","dd":0},{"id":881,"t":6,"w":389,"b":364,"h":0,"r":"b","dd":0},{"id":882,"t":7,"w":383,"b":368,"h":0,"r":"b","dd":0},{"id":883,"t":8,"w":372,"b":392,"h":0,"r":"b","dd":0},{"id":884,"t":9,"w":366,"b":367,"h":0,"r":"b","dd":0},{"id":885,"t":10,"w":380,"b":386,"h":0,"r":"b","dd":0},{"id":886,"t":11,"w":373,"b":391,"h":0,"r":"b","dd":0},{"id":887,"t":12,"w":359,"b":374,"h":0,"r":"b","dd":0},{"id":888,"t":13,"w":358,"b":390,"h":0,"r":"b","dd":0},{"id":889,"t":14,"w":384,"b":375,"h":0,"r":"b","dd":0},{"id":890,"t":15,"w":360,"b":376,"h":0,"r":"b","dd":0},{"id":891,"t":16,"w":388,"b":365,"h":0,"r":"b","dd":0},{"id":892,"t":17,"w":381,"b":371,"h":0,"r":"b","dd":0}]"""
val pairings = mutableListOf<String>()
pairings.add(pairingsR1)
pairings.add(pairingsR2)
pairings.add(pairingsR3)
pairings.add(pairingsR4)
pairings.add(pairingsR5)
pairings.add(pairingsR6)
pairings.add(pairingsR7)
pairings.add(pairingsR8)
pairings.add(pairingsR9)
pairings.add(pairingsR10)
// read tournament without pairings
var file = getTestFile("opengotha/pairings/notsosimpleswiss_nopairings.xml")
// read tournament with pairing
var file = getTestFile("opengotha/pairings/notsosimpleswiss_10R.xml")
logger.info("read from file $file")
val resource = file.readText(StandardCharsets.UTF_8)
var resp = TestAPI.post("/api/tour", resource)
val id = resp.asObject().getInt("id")
assertNotNull(id)
val tournament = TestAPI.get("/api/tour/$id").asObject()
logger.info(tournament.toString().slice(0..50) + "...")
val players = TestAPI.get("/api/tour/$id/part").asArray()
logger.info(players.toString().slice(0..50) + "...")
logger.info(players.toString())
val pairingsOG = mutableListOf<String>()
for (round in 1..tournament.getInt("rounds")!!) {
val games = TestAPI.get("/api/tour/$id/res/$round").asArray()
logger.info("games for round $round: {}", games.toString().slice(0..50) + "...")
pairingsOG.add(games.toString())
}
for (round in tournament.getInt("rounds")!! downTo 1) {
TestAPI.delete("/api/tour/$id/pair/$round", Json.Array("all"))
}
var games: Json.Array
var firstGameID: Int
var playersList = mutableListOf<Long>()
val playersList = mutableListOf<Long>()
for (i in 0..34){
playersList.add(players.getJson(i)!!.asObject()["id"] as Long)
@@ -278,14 +225,12 @@ class PairingTests: TestBase() {
//games = TestAPI.post("/api/tour/$id/pair/$round", Json.Array(playersList.filter{it != byePlayerList[round-1]})).asArray()
games = TestAPI.post("/api/tour/$id/pair/$round", Json.Array("all")).asArray()
logger.info("games for round $round: {}", games.toString())
logger.info("games for round $round: {}", games.toString().slice(0..50) + "...")
assertTrue(compare_weights(getOutputFile("weights.txt"), getTestFile("opengotha/notsosimpleswiss_weights_R$round.txt")), "Not matching opengotha weights for round $round")
assertTrue(compare_games(games, Json.parse(pairings[round - 1])!!.asArray()),"pairings for round $round differ")
assertTrue(compare_games(games, Json.parse(pairingsOG[round - 1])!!.asArray()),"pairings for round $round differ")
logger.info("Pairings for round $round match OpenGotha")
logger.info("games for round $round: {}", games.toString())
firstGameID = (games.getJson(0)!!.asObject()["id"] as Long?)!!.toInt()
for (gameID in firstGameID..firstGameID + 16) {
resp = TestAPI.put("/api/tour/$id/res/$round", Json.parse("""{"id":$gameID,"result":"b"}""")).asObject()