Skip to content

Commit

Permalink
#685 Test and Fix RiegenRotationsregel
Browse files Browse the repository at this point in the history
  • Loading branch information
luechtdiode committed May 27, 2023
1 parent a693723 commit c9e84c8
Show file tree
Hide file tree
Showing 3 changed files with 83 additions and 18 deletions.
28 changes: 12 additions & 16 deletions src/main/scala/ch/seidel/kutu/domain/RiegenRotationsregel.scala
Original file line number Diff line number Diff line change
@@ -1,11 +1,5 @@
package ch.seidel.kutu.domain

import ch.seidel.kutu.data.GroupSection.STANDARD_SCORE_FACTOR
import org.controlsfx.validation.{Severity, ValidationResult, Validator}

import java.time.temporal.ChronoUnit
import scala.math.BigDecimal.{RoundingMode, long2bigDecimal}


object RiegenRotationsregel {
val defaultRegel = RiegenRotationsregelList(List(
Expand Down Expand Up @@ -92,20 +86,22 @@ case object RiegenRotationsregelRotierend extends RiegenRotationsregel {
}

def rotate(text: Char, offset: Int): Char = {
val r1 = text + offset
val r2 = if (r1 > 'Z') {
r1 - 26
} else if (r1 < 'A') {
r1 + 26
} else {
r1
if (text <='9' && text >= '0') text else {
val r1 = text + offset
val r2 = if (r1 > 'Z') {
r1 - 26
} else if (r1 < 'A') {
r1 + 26
} else {
r1
}
r2.toChar
}
r2.toChar
}
override def sorter(acc: List[String], kandidat: Kandidat): List[String] = {
val date = kandidat.wertungen.head.wettkampf.datum.toLocalDate
val day = date.getDayOfYear
val alphaOffset = day % 26
val alphaOffset = (date.getYear + day) % 26
acc.map(rotateIfAlphaNumeric(_, alphaOffset))
}
override def toFormel: String = "Rotierend"
Expand Down Expand Up @@ -161,7 +157,7 @@ case class RiegenRotationsregelAlter(aufsteigend: Boolean) extends RiegenRotatio
case _: NumberFormatException => 100
}
val jg = (if (alter > 15) "0000" else kandidat.jahrgang)
acc :+ (if (aufsteigend) kandidat.jahrgang.reverse else kandidat.jahrgang)
acc :+ (if (aufsteigend) jg.reverse else jg)
}
override def toFormel: String = if (aufsteigend) "AlterAufsteigend" else "AlterAbsteigend"
}
4 changes: 2 additions & 2 deletions src/main/scala/ch/seidel/kutu/renderer/Kandidat.scala
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package ch.seidel.kutu.renderer

import ch.seidel.kutu.domain.{AthletJahrgang, AthletView, GeraeteRiege, WertungView}
import ch.seidel.kutu.domain.GeraeteRiege

object Kandidaten {
def apply(riegen: Seq[GeraeteRiege]) = {
def apply(riegen: Seq[GeraeteRiege]): Seq[Kandidat] = {
riegen
// filter startgeraet
.filter(riege => riege.halt == 0)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package ch.seidel.kutu.domain

import org.scalatest.matchers.should.Matchers
import org.scalatest.wordspec.AnyWordSpec

import java.time.LocalDate
import java.util.UUID

class RiegenRotationsregelTest extends AnyWordSpec with Matchers {

"Einfach 16+ / Default" in {
val turnerinA: Kandidat = mockKandidat("Einfach", 2007, 2023, 11, "TV Aarau", "Almirez", "Almaz", "K1", "Turnerin")
assert(RiegenRotationsregel(turnerinA.wertungen.head.wettkampf).sort(turnerinA) ==
"K1 -Aarau -0000-Turnerin -Almirez -Almaz ")
}
"Einfach 15 / Default" in {
val turnerinA: Kandidat = mockKandidat("Einfach", 2008, 2023, 11, "TV Aarau", "Almirez", "Almaz", "K1", "Turnerin")
assert(RiegenRotationsregel(turnerinA.wertungen.head.wettkampf).sort(turnerinA) ==
"K1 -Aarau -2008-Turnerin -Almirez -Almaz ")
}
"Einfach 16+ / AltInvers odd" in {
val turnerinA: Kandidat = mockKandidat("Einfach/AltInvers", 2008, 2023, 11, "TV Aarau", "Almirez", "Almaz", "K1", "Turnerin")
assert(RiegenRotationsregel(turnerinA.wertungen.head.wettkampf).sort(turnerinA) ==
"1K -uaraA -2008-nirenruT -zerimlA -zamlA ")
}
"Einfach 16+ / AltInvers even" in {
val turnerinA: Kandidat = mockKandidat("Einfach/AltInvers", 2004, 2023, 10, "TV Aarau", "Almirez", "Almaz", "K1", "Turnerin")
assert(RiegenRotationsregel(turnerinA.wertungen.head.wettkampf).sort(turnerinA) ==
"K1 -Aarau -0000-Turnerin -Almirez -Almaz ")
}
"Rotierend only leads to defautl (Einfach)" in {
val turnerinA: Kandidat = mockKandidat("Rotierend", 2007, 2023, 11, "TV Aarau", "Almirez", "Almaz", "K1", "Turnerin")
assert(RiegenRotationsregel(turnerinA.wertungen.head.wettkampf).sort(turnerinA) ==
"K1 -Aarau -0000-Turnerin -Almirez -Almaz ")
}
"AltInvers only leads to defautl (Einfach)" in {
val turnerinA: Kandidat = mockKandidat("AltInvers", 2007, 2023, 11, "TV Aarau", "Almirez", "Almaz", "K1", "Turnerin")
assert(RiegenRotationsregel(turnerinA.wertungen.head.wettkampf).sort(turnerinA) ==
"K1 -Aarau -0000-Turnerin -Almirez -Almaz ")
}
"Einfach/Rotierend offset 0" in {
val turnerinA: Kandidat = mockKandidat("Einfach/Rotierend", 2007, 2023, 4, "TV Aarau", "Almirez", "Almaz", "K1", "Turnerin")
assert(RiegenRotationsregel(turnerinA.wertungen.head.wettkampf).sort(turnerinA) ==
"K1 -AARAU -0000-TURNERIN -ALMIREZ -ALMAZ ")
}
"Einfach/Rotierend offset 1" in {
val turnerinA: Kandidat = mockKandidat("Einfach/Rotierend", 2007, 2023, 5, "TV Aarau", "Almirez", "Almaz", "K1", "Turnerin")
assert(RiegenRotationsregel(turnerinA.wertungen.head.wettkampf).sort(turnerinA) ==
"L1 -BBSBV -0000-UVSOFSJO -BMNJSFA -BMNBA ")
}
"Einfach 15/Rotierend/AltInvers offset 1" in {
val turnerinA: Kandidat = mockKandidat("Einfach/Rotierend/AltInvers", 2008, 2023, 5, "TV Aarau", "Almirez", "Almaz", "K1", "Turnerin")
assert(RiegenRotationsregel(turnerinA.wertungen.head.wettkampf).sort(turnerinA) ==
"1L -VBSBB -2008-OJSFOSVU -AFSJNMB -ABNMB ")
}
"Kategorie/Verein/AlterAufsteigend/Geschlecht/Name/Vorname/Rotierend/AltInvers offset 1" in {
val turnerinA: Kandidat = mockKandidat("Kategorie/Verein/AlterAufsteigend/Geschlecht/Name/Vorname/Rotierend/AltInvers", 2008, 2023, 5, "TV Aarau", "Almirez", "Almaz", "K1", "Turnerin")
assert(RiegenRotationsregel(turnerinA.wertungen.head.wettkampf).sort(turnerinA) ==
"1L -VBSBB -8002-OJSFOSVU -AFSJNMB -ABNMB ")
}

private def mockKandidat(rotation: String, jahrgang: Int, wettkampfjahr: Int, wettkampfTag: Int, verein: String, name: String, vorname: String, kategorie: String, geschlecht: String) = {
val wk = Wettkampf(1L, None, LocalDate.of(wettkampfjahr, 1, 1).plusDays(wettkampfTag) , "Testwettkampf", 44L, 0, BigDecimal(0d), "", None, None, None, Some(rotation))
val a = Athlet(1L).copy(name = name, vorname = vorname, gebdat = Some(LocalDate.of(jahrgang, 3, 2))).toAthletView(Some(Verein(1L, verein, Some("Testverband"))))
val wd = WettkampfdisziplinView(1, ProgrammView(44L, kategorie, 0, None, 1, 0, 100, UUID.randomUUID().toString, 1), Disziplin(1, "Boden"), "", None, StandardWettkampf(1.0), 1, 1, 0, 3, 1, 0, 30, 1)
val wv = WertungView(wd.id, a, wd, wk, None, None, None, None, None)
Kandidat("Testwettkampf", geschlecht, kategorie, 1, name, vorname, s"$jahrgang", verein, None, None, Seq(wd.disziplin), Seq.empty, Seq(wv))
}
}

0 comments on commit c9e84c8

Please sign in to comment.