class SaturdayAfternoonTest: def __init__(self, championship): self.championship = championship self.qualification = SessionSimulator() self.sessions32 = [] self.sessions16 = [] self.sessions8 = [] self.sessions4 = [] self.sessions2 = [] self.finale = None self.dual = self.championship.dual self.fake1 = self.championship.fake1 self.chrono = self.championship.chrono self.beacons = self.championship.beacons self.elitePilots = self.championship.elitePilots self.openPilots = self.championship.openPilots self.womanPilots = self.championship.womanPilots self.juniorPilots = self.championship.juniorPilots self.eliteCategory = self.championship.eliteCategory self.openCategory = self.championship.openCategory self.womanCategory = self.championship.womanCategory self.juniorCategory = self.championship.juniorCategory def createSessions(self): # Add sessions print("---- Create session of Saturday afternoon ----") s1 = datetime(2000, 1, 2, 14) e1 = datetime(2000, 1, 2, 15) event = self.championship.event location = self.dual chronos = [self.fake1, self.chrono] pilots = self.championship.allPilots self.qualification.create('Saturday pm qualification', s1, e1, 'tt', location, event, chronos, self.beacons, pilots) for i in range(1, 33): sessions32_i = SessionSimulator() name = "Sat pm dual 32th #" + str(i) h, m = divmod(i * 2, 60) eh, em = divmod(i * 2 + 2, 60) sessions32_i.create(name, datetime(2000, 1, 2, 16 + h, m), datetime(2000, 1, 1, 16 + eh, em), 'rc', location, event, chronos, self.beacons) self.sessions32.append(sessions32_i) for i in range(1, 17): name = 'Sat pm dual 16th #' + str(i) sessions16_i = SessionSimulator() sessions16_i.create(name, datetime(2000, 1, 2, 17, 20 + i * 2), datetime(2000, 1, 1, 17, 22 + i * 2), 'rc', location, event, chronos, self.beacons) self.sessions16.append(sessions16_i) for i in range(1, 9): name = 'Sat pm dual 8th #' + str(i) sessions8_i = SessionSimulator() sessions8_i.create(name, datetime(2000, 1, 2, 18, i * 2), datetime(2000, 1, 1, 18, i * 2 + 2), 'rc', location, event, chronos, self.beacons) self.sessions8.append(sessions8_i) for i in range(1, 5): name = 'Sat pm dual 4th #' + str(i) sessions4_i = SessionSimulator() sessions4_i.create(name, datetime(2000, 1, 2, 18, 30 + i * 2), datetime(2000, 1, 1, 15, 32 + i * 2 + 2), 'rc', location, event, chronos, self.beacons) self.sessions4.append(sessions4_i) for i in range(1, 3): name = 'Sat pm dual 2th #' + str(i) sessions2_i = SessionSimulator() sessions2_i.create(name, datetime(2000, 1, 2, 19, i * 2), datetime(2000, 1, 1, 19, i * 2 + 2), 'rc', location, event, chronos, self.beacons) self.sessions2.append(sessions2_i) self.finale = SessionSimulator() self.finale.create('Sat pm dual finale', datetime(2000, 1, 2, 19, 30), datetime(2000, 1, 1, 19, 32), 'rc', location, event, chronos, self.beacons) def test(self): bestLaps = self.qualify() qualifiedNext = self.runSessions(bestLaps, self.sessions32) qualifiedNext = self.runSessions(qualifiedNext, self.sessions16) qualifiedNext = self.runSessions(qualifiedNext, self.sessions8) qualifiedNext = self.runSessions(qualifiedNext, self.sessions4) qualifiedNext = self.runSessions(qualifiedNext, self.sessions2) self.runSessions(qualifiedNext, [self.finale]) def runFinale(self, qualified): print("---- Dual Finale ----") def runSessions(self, qualified, sessions): results = [] print("---- Dual " + str(len(sessions)) + "th finale ----") for i in range(0, len(sessions)): session = sessions[i] session.addPilot(qualified[2 * i]['pilot']) session.addPilot(qualified[2 * i + 1]['pilot']) session.startSession() session.simRace(1, 10, self.chrono['id'], 0) session.endSession() # We keep winner sessionResults = getResultsForSession(session.session['id']) results.append(sessionResults[0]) print("---- Tests Results of " + session.session['name'] + "----") checkLaps(getLapsForSession(session.session['id']), 2, {1: 2}, {1: 2}) checkBestLaps(getBestLapsForSession(session.session['id']), 2, {1: 2}, {1: 2}) checkResults(sessionResults, 2, {1: 2}, {1: 2}) return results def qualify(self): self.qualification.startSession() print("---- Test #1 ----") self.qualification.simTimeTrial(2, 19, 20, self.fake1['id'], self.chrono['id']) print("---- Test #2 ----") self.qualification.simTimeTrial(2, 19, 20, self.fake1['id'], self.chrono['id'], startShift=30) self.qualification.endSession() print("---- Tests Results (general) ----") bestLaps = getBestLapsForSession(self.qualification.session['id']) checkBestLaps(bestLaps, 80, {}, {}) print("---- Tests Results (Elite) ----") bestLapsElite = getBestLapsForSession(self.qualification.session['id'], self.eliteCategory['id']) checkBestLaps(bestLapsElite, len(self.elitePilots), {}, {}, 'Elite', 120000, 140000) print("---- Tests Results (Open) ----") bestLapsOpen = getBestLapsForSession(self.qualification.session['id'], self.openCategory['id']) checkBestLaps(bestLapsOpen, len(self.openPilots), {}, {}, 'Open', 120000, 140000) print("---- Tests Results (Women) ----") bestLapsWomen = getBestLapsForSession(self.qualification.session['id'], self.womanCategory['id']) checkBestLaps(bestLapsWomen, len(self.womanPilots), {}, {}, 'Woman', 120000, 140000) print("---- Tests Results (Junior) ----") bestLapsJunior = getBestLapsForSession(self.qualification.session['id'], self.juniorCategory['id']) checkBestLaps(bestLapsJunior, len(self.juniorPilots), {}, {}, 'Junior', 120000, 140000) # Find the 64 participants qualified = bestLapsElite[0:24] + bestLapsOpen[0:16] + bestLapsWomen[0:16] + bestLapsJunior[0:8] return qualified
class FridayMorningTest: def __init__(self, championship): self.championship = championship self.morningTest = SessionSimulator() self.morningChrono = SessionSimulator() self.boarderCross = self.championship.boarderCross self.fake1 = self.championship.fake1 self.chrono = self.championship.chrono self.beacons = self.championship.beacons def createSessions(self): # Add sessions print("---- Create session of Friday morning ----") s1 = datetime(2000, 1, 1, 10) e1 = datetime(2000, 1, 1, 11) event = self.championship.event location = self.boarderCross chronos = [self.fake1, self.chrono] pilots = self.championship.allPilots self.morningTest.create('Friday am tests', s1, e1, 'tt', location, event, chronos, self.beacons, pilots) s2 = datetime(2000, 1, 1, 11) e2 = datetime(2000, 1, 1, 12) self.morningChrono.create('Friday am Chrono', s2, e2, 'tt', location, event, chronos, self.beacons) def test(self): self.borderCrossQP() self.borderCrossChronos() def borderCrossQP(self): # descente dans le boarder cross # Border cross # deux runs d essais (controle transpondeurs) # deux runs chronos # le meilleur retenu print("---- Test #1 ----") self.morningTest.startSession() self.morningTest.simTimeTrial(2, 19, 20, self.fake1['id'], self.chrono['id'], doNotStart=1, doNotFinish=1) print("---- Test #2 ----") self.morningTest.simTimeTrial(2, 19, 20, self.fake1['id'], self.chrono['id'], doNotStart=2, doNotFinish=2, startShift=30) # We forget to stop that one self.morningTest.endSession() print("---- Tests Results ----") friMorningTestsLaps = getLapsForSession(self.morningTest.session['id']) checkLaps(friMorningTestsLaps, 160 - 6, {1: 78, 2: 76}, {1: 2}) friMorningTestsLapsElite = getLapsForSession( self.morningTest.session['id'], self.championship.eliteCategory['id']) checkLaps(friMorningTestsLapsElite, 60 - 6, { 1: 28, 2: 26 }, {1: 2}, self.championship.eliteCategory['name']) friMorningTestsBests = getBestLapsForSession( self.morningTest.session['id']) printLaps(friMorningTestsBests, True) checkBestLaps(friMorningTestsBests, 78, {}, {1: 2}) # ---- Determine startup ---- friMorningTestsResults = getResultsForSession( self.morningTest.session['id']) # TODO Have chart with startup list # TODO Check if it should count points checkResults(friMorningTestsResults, 80, {}, {1: 4}) beaconsStartOrder = [] for i in reversed(range(30)): self.morningChrono.addPilot(friMorningTestsResults[i]['pilot']) for i in range(30, 80): self.morningChrono.addPilot(friMorningTestsResults[i]['pilot']) def borderCrossChronos(self): # Some do 1 test # Some dont test # Some start but dont finish # Some finish after expected time print("---- Chrono #1 ----") self.morningChrono.startSession() self.morningChrono.simTimeTrial(2, 19, 20, self.fake1['id'], self.chrono['id'], doNotStart=1, doNotFinish=1, startShift=10) print("---- Chrono #2 ----") self.morningChrono.simTimeTrial(2, 19, 20, self.fake1['id'], self.chrono['id'], doNotStart=2, doNotFinish=2, startShift=45) self.morningTest.endSession() print("---- Chrono Results ----") # ---- Results ---- # ---- Checks - Asserts ---- friMorningChronoLaps = getLapsForSession( self.morningChrono.session['id']) checkLaps(friMorningChronoLaps, 160 - 6, {1: 78, 2: 76}, {1: 2}) friMorningChronoBests = getBestLapsForSession( self.morningChrono.session['id']) checkBestLaps(friMorningChronoBests, 78, {}, {1: 2}) friMorningChronoResults = getResultsForSession( self.morningChrono.session['id']) checkResults(friMorningChronoResults, 80, {}, {1: 4})
class SundayMorningTest: def __init__(self, championship): self.championship = championship self.fake1 = self.championship.fake1 self.fake2 = self.championship.fake2 self.chrono = self.championship.chrono self.beacons = self.championship.beacons self.allPilots = self.championship.allPilots self.elitePilots = self.championship.elitePilots self.openPilots = self.championship.openPilots self.womanPilots = self.championship.womanPilots self.juniorPilots = self.championship.juniorPilots self.valette = self.championship.valette self.sunDerby2Elite = SessionSimulator() self.sunDerby2Open = SessionSimulator() self.sunDerby2Woman = SessionSimulator() self.sunDerby2Junior = SessionSimulator() self.redRiver = self.championship.redRiver self.roubines = self.championship.roubines self.sunDoubleRedRiver = SessionSimulator() self.sunDoubleRoubines = SessionSimulator() def createSessions(self): # Add sessions print("---- Create session of Sunday morning ----") valette = self.valette event = self.championship.event beacons = self.beacons chronos = [self.fake1, self.chrono] self.sunDerby2Elite.create('Sun Derby 2 - Elite', datetime(2000, 1, 3, 10, 5), datetime(2000, 1, 3, 10, 10), 'rc', valette, event, chronos, beacons, self.elitePilots) self.sunDerby2Open.create('Sun Derby 2 - Open', datetime(2000, 1, 3, 10, 15), datetime(2000, 1, 3, 10, 20), 'rc', valette, event, chronos, beacons, self.openPilots) self.sunDerby2Woman.create('Sun Derby 2 - Woman', datetime(2000, 1, 3, 10, 25), datetime(2000, 1, 3, 10, 30), 'rc', valette, event, chronos, beacons, self.womanPilots) self.sunDerby2Junior.create('Sun Derby 2 - Junior', datetime(2000, 1, 3, 10, 35), datetime(2000, 1, 3, 10, 40), 'rc', valette, event, chronos, beacons, self.juniorPilots) chronos2 = [self.fake2, self.chrono] redRiver = self.redRiver roubines = self.roubines allPilots = self.allPilots self.sunDoubleRedRiver.create('Sun Double - Red River', datetime(2000, 1, 3, 11, 0), datetime(2000, 1, 3, 13, 00), 'tt', redRiver, event, chronos, beacons, allPilots) self.sunDoubleRoubines.create('Sun Double - Roubines', datetime(2000, 1, 3, 11, 0), datetime(2000, 1, 3, 13, 00), 'tt', roubines, event, chronos2, beacons, allPilots) def test(self): self.testDerby() self.testDouble() def testDouble(self): print("---- Double of Sunday morning ----") print("-- First runs") self.sunDoubleRedRiver.startSession() self.sunDoubleRoubines.startSession() print(" Elite and Junior run in Red River") self.sunDoubleRedRiver.pilots = self.elitePilots + self.juniorPilots self.sunDoubleRedRiver.simTimeTrial(3, 59, 10, self.fake1['id'], self.chrono['id']) print(" Open and Women run in Roubines") self.sunDoubleRoubines.pilots = self.openPilots + self.womanPilots self.sunDoubleRoubines.simTimeTrial(3, 59, 10, self.fake2['id'], self.chrono['id']) print(" Open and Women run in Red River") self.sunDoubleRedRiver.pilots = self.openPilots + self.womanPilots self.sunDoubleRedRiver.simTimeTrial(3, 59, 10, self.fake1['id'], self.chrono['id'], startShift=20) print(" Elite and Junior run in Roubines") self.sunDoubleRoubines.pilots = self.elitePilots + self.juniorPilots self.sunDoubleRoubines.simTimeTrial(3, 59, 10, self.fake2['id'], self.chrono['id'], startShift=20) print("-- Second runs") print(" Elite improve in Red River") self.sunDoubleRedRiver.pilots = self.elitePilots self.sunDoubleRedRiver.simTimeTrial(2, 59, 10, self.fake1['id'], self.chrono['id'], startShift=45) print(" Open dont improve in Red River") self.sunDoubleRedRiver.pilots = self.openPilots self.sunDoubleRedRiver.simTimeTrial(4, 59, 10, self.fake1['id'], self.chrono['id'], startShift=60) print(" Women improve in Roubines") self.sunDoubleRoubines.pilots = self.womanPilots self.sunDoubleRoubines.simTimeTrial(2, 59, 10, self.fake2['id'], self.chrono['id'], startShift=45) print(" Junior dont improve in Roubines") self.sunDoubleRoubines.pilots = self.juniorPilots self.sunDoubleRoubines.simTimeTrial(4, 59, 10, self.fake2['id'], self.chrono['id'], startShift=60) self.sunDoubleRedRiver.endSession() self.sunDoubleRoubines.endSession() print("---- Tests Results (general) ----") bestLapsRedRiver = getBestLaps(self.redRiver['id']) bestLapsRoubines = getBestLaps(self.roubines['id']) checkBestLaps(bestLapsRedRiver, 80, { 2: 30, 1: 50 }, { 1: 30, 2: 50 }, None, 120000, 240000) checkBestLaps(bestLapsRoubines, 80, { 2: 20, 1: 60 }, { 1: 50, 2: 30 }, None, 120000, 240000) def testDerby(self): print("---- Derby of Sunday morning ----") self.sunDerby2Elite.startSession() self.sunDerby2Elite.simRace(3, 10, self.chrono['id']) self.sunDerby2Elite.endSession() print("---- Tests Results of " + self.sunDerby2Elite.session['name'] + "----") checkLaps(getLapsForSession(self.sunDerby2Elite.session['id']), len(self.elitePilots), {1: len(self.elitePilots)}, {1: len(self.elitePilots)}, 'Elite', 180000, 190000) checkBestLaps(getBestLapsForSession(self.sunDerby2Elite.session['id']), len(self.elitePilots), {1: len(self.elitePilots)}, {1: len(self.elitePilots)}, 'Elite', 180000, 190000) checkResults(getResultsForSession(self.sunDerby2Elite.session['id']), len(self.elitePilots), {1: len(self.elitePilots)}, {1: len(self.elitePilots)}, 'Elite', 180000, 190000) self.sunDerby2Open.startSession() self.sunDerby2Open.simRace(3, 20, self.chrono['id']) # We forget to end that one #self.sunDerby2Open.endSession() print("---- Tests Results of " + self.sunDerby2Open.session['name'] + "----") checkLaps(getLapsForSession(self.sunDerby2Open.session['id']), len(self.openPilots), {1: len(self.openPilots)}, {1: len(self.openPilots)}, 'Open', 180000, 200000) checkBestLaps(getBestLapsForSession(self.sunDerby2Open.session['id']), len(self.openPilots), {1: len(self.openPilots)}, {1: len(self.openPilots)}, 'Open', 180000, 200000) checkResults(getResultsForSession(self.sunDerby2Open.session['id']), len(self.openPilots), {1: len(self.openPilots)}, {1: len(self.openPilots)}, 'Open', 180000, 200000) self.sunDerby2Woman.startSession() self.sunDerby2Woman.simRace(3, 30, self.chrono['id']) self.sunDerby2Woman.endSession() checkLaps(getLapsForSession(self.sunDerby2Woman.session['id']), len(self.womanPilots), {1: len(self.womanPilots)}, {1: len(self.womanPilots)}, 'Woman', 180000, 210000) checkBestLaps(getBestLapsForSession(self.sunDerby2Woman.session['id']), len(self.womanPilots), {1: len(self.womanPilots)}, {1: len(self.womanPilots)}, 'Woman', 180000, 210000) checkResults(getResultsForSession(self.sunDerby2Woman.session['id']), len(self.womanPilots), {1: len(self.womanPilots)}, {1: len(self.womanPilots)}, 'Woman', 180000, 210000) self.sunDerby2Junior.startSession() self.sunDerby2Junior.simRace(3, 40, self.chrono['id']) self.sunDerby2Junior.endSession() checkLaps(getLapsForSession(self.sunDerby2Junior.session['id']), len(self.juniorPilots), {1: len(self.juniorPilots)}, {1: len(self.juniorPilots)}, 'Junior', 180000, 220000) checkBestLaps( getBestLapsForSession(self.sunDerby2Junior.session['id']), len(self.juniorPilots), {1: len(self.juniorPilots)}, {1: len(self.juniorPilots)}, 'Junior', 180000, 220000) checkResults(getResultsForSession(self.sunDerby2Junior.session['id']), len(self.juniorPilots), {1: len(self.juniorPilots)}, {1: len(self.juniorPilots)}, 'Junior', 180000, 220000)