def test_robots_impares_en_ronda(self): robots = self.robots[:] while len(robots) % 2 != 1: robots.pop() fixture = Fixture(robots) ronda = fixture.generar_ronda() self.assertEqual(set(robots), set(ronda.robots))
def test_ganador_1_en_eliminacion_1(self): robots = self.robots[:] ganadores = set() fixture = Fixture(robots) fase = fixture.eliminacion() fase.generar_rondas() for e in fase.get_encuentros(): ganadores.add(e.robot_1) e.agregar_ganador(e.robot_1) self.assertEqual(set(ganadores), set(fase.ganadores()))
def test_ganador_por_eliminacion_del_torneo(self): robots = self.robots[:] ganador = random.choice(robots) fixture = Fixture(robots) fase = fixture.eliminacion() while not fixture.finalizado(): fase.generar_rondas() for e in fase.get_encuentros(): while not e.finalizado(): robot = ganador if e.participa(ganador) else random.choice([e.robot_1, e.robot_2]) e.agregar_ganador(robot) self.assertEqual(ganador, fixture.ganador())
def test_torneo_de_ocho(self): robots = self.robots[:8] # (robot, jugados, triunfos, empates, derrotas, a favor, en contra, diferencia, puntos) scores = [[robot, 0, 0, 0, 0, 0, 0, 0, 0] for robot in robots] fixture = Fixture(robots) while not fixture.finalizado(): ronda = fixture.generar_ronda() for encuentro in ronda.encuentros: while not encuentro.finalizado(): rwin = random.choice( [encuentro.robot_1, encuentro.robot_2]) rlose = encuentro.robot_2 if encuentro.robot_1 == rwin else encuentro.robot_1 fixture.gano(rwin, nencuentro=encuentro.numero) rwin = encuentro.ganador() rlose = encuentro.robot_2 if encuentro.robot_1 == rwin else encuentro.robot_1 s = encuentro.score(rwin) swin = [s for s in scores if s[0] == rwin].pop() slose = [s for s in scores if s[0] == rlose].pop() scores[scores.index(swin)] = [ swin[0], swin[1] + 1, swin[2] + 1, swin[3], swin[4], swin[5] + s[0], swin[6] + s[1], swin[7] + s[0] - s[1], swin[8] + 3 ] scores[scores.index(slose)] = [ slose[0], slose[1] + 1, slose[2], slose[3], slose[4] + 1, slose[5] + s[1], slose[6] + s[0], slose[7] + s[1] - s[0], slose[8] ] scores = sorted(scores, key=lambda t: t[8], reverse=True) self.assertEqual(scores[0][0], fixture.ganador()) for robot in fixture.robots: score = [s for s in scores if s[0] == robot].pop() self.assertEqual(tuple(score[1:]), fixture.score(robot))
def test_ganador_por_clasificacion_impares_tct_del_torneo(self): robots = self.robots[:27] fixture = Fixture(robots) fase = fixture.clasificacion(8) ganadores = [g.robots[0] for g in fase.get_grupos()] self.assertEqual([len(g) for g in fase.get_grupos()], [3,3,3,3,3,4,4,4]) while not fixture.finalizado(): fase.generar_rondas(tct=True) for e in fase.get_encuentros(): while not e.finalizado(): if e.robot_1 in ganadores: robot = e.robot_1 elif e.robot_2 in ganadores: robot = e.robot_2 else: robot = random.choice([e.robot_1, e.robot_2]) e.agregar_ganador(robot) self.assertEqual(ganadores, fixture.ganadores())
def test_un_robot(self): robots = self.robots[:] robot = random.choice(robots) fixture = Fixture([robot]) self.assertEqual(fixture.finalizado(), False) ronda = fixture.generar_ronda() self.assertEqual(fixture.finalizado(), True) self.assertEqual(robot, fixture.ganador())
def test_estados(self): robots = self.robots[:16] fixture = Fixture(robots) self.assertEqual(fixture.iniciado(), False) self.assertEqual(fixture.finalizado(), False) self.assertEqual(fixture.compitiendo(), False) while not fixture.finalizado(): ronda = fixture.generar_ronda() self.assertEqual(ronda.iniciado(), True) self.assertEqual(ronda.compitiendo(), True) self.assertEqual(fixture.iniciado(), True) self.assertEqual(fixture.compitiendo(), True) for encuentro in ronda.encuentros: self.assertEqual(encuentro.iniciado(), True) self.assertEqual(encuentro.compitiendo(), True) while not encuentro.finalizado(): rwin = random.choice( [encuentro.robot_1, encuentro.robot_2]) fixture.gano(rwin, nencuentro=encuentro.numero) self.assertEqual(encuentro.iniciado(), False) self.assertEqual(encuentro.compitiendo(), False) self.assertEqual(encuentro.finalizado(), True) self.assertEqual(ronda.iniciado(), False) self.assertEqual(ronda.compitiendo(), False) self.assertEqual(fixture.compitiendo(), False) self.assertEqual(fixture.finalizado(), True) self.assertEqual(fixture.compitiendo(), False)
def test_tres_robots(self): robots = self.robots[:3] fixture = Fixture(robots) ronda = fixture.generar_ronda(True) self.assertEqual(set(robots), set(ronda.robots)) self.assertEqual(3, len(ronda.encuentros))
def test_robots_random_en_ronda(self): robots = self.robots[:] robots = robots[random.randint(1, len(robots)):] fixture = Fixture(robots) ronda = fixture.generar_ronda() self.assertEqual(set(robots), set(ronda.robots))
def test_robots_en_ronda(self): robots = self.robots[:] fixture = Fixture(robots) ronda = fixture.generar_ronda() self.assertEqual(set(robots), set(ronda.robots))
def test_torneo_de_cuarenta_y_cuatro_con_tct_en_once(self): robots = self.robots[:44] fixture = Fixture(robots) scores = [[robot, 0, 0, 0, 0, 0, 0, 0, 0] for robot in robots] fixture = Fixture(robots) ronda = None while not fixture.finalizado(): r = len(fixture.robots_en_juego()) ronda = fixture.generar_ronda(r <= 11) for encuentro in ronda.encuentros: while not encuentro.finalizado(): rwin = random.choice( [encuentro.robot_1, encuentro.robot_2]) rlose = encuentro.robot_2 if encuentro.robot_1 == rwin else encuentro.robot_1 fixture.gano(rwin, nencuentro=encuentro.numero) rwin = encuentro.ganador() rlose = encuentro.robot_2 if encuentro.robot_1 == rwin else encuentro.robot_1 s = encuentro.score(rwin) swin = [s for s in scores if s[0] == rwin].pop() slose = [s for s in scores if s[0] == rlose].pop() scores[scores.index(swin)] = [ swin[0], swin[1] + 1, swin[2] + 1, swin[3], swin[4], swin[5] + s[0], swin[6] + s[1], swin[7] + s[0] - s[1], swin[8] + 3 ] scores[scores.index(slose)] = [ slose[0], slose[1] + 1, slose[2], slose[3], slose[4] + 1, slose[5] + s[1], slose[6] + s[0], slose[7] + s[1] - s[0], slose[8] ] if ronda is not None and ronda.tct: self.assertEqual(ronda.ganador(), fixture.ganador()) else: scores = sorted(scores, key=lambda t: t[8], reverse=True) self.assertEqual(scores[0][0], fixture.ganador()) for robot in fixture.robots: score = [s for s in scores if s[0] == robot].pop() self.assertEqual(tuple(score[1:]), fixture.score(robot))
def test_con_robots_y_ronda(self): fixture = Fixture(self.robots) ronda = fixture.generar_ronda() self.assertEqual(fixture.iniciado(), True) self.assertEqual(fixture.finalizado(), False)
def test_con_robots(self): fixture = Fixture(self.robots) self.assertEqual(fixture.iniciado(), False) self.assertEqual(fixture.finalizado(), False)
def test_sin_robots(self): fixture = Fixture([]) self.assertEqual(fixture.iniciado(), False) self.assertEqual(fixture.finalizado(), True)
PORT = 5000 DEBUG = True if os.environ.get('DEBUG') else False import json from flask import Flask, render_template, redirect from flask_graphql import GraphQLView from flask_cors import CORS from faker import Factory from server import Fixture, schema, Encuentro, Ronda, Robot_scrapper fake = Factory.create() FIXTURE = Fixture() with open("./datos/robots.json", "r") as f: for robot in json.loads(f.read()): FIXTURE.inscribir_robot(*robot) SCRAPPER = Robot_scrapper(True) SCRAPPER.scrap_file() app = Flask(__name__) CORS(app) app.add_url_rule('/fixture', view_func = GraphQLView.as_view('fixture', schema=schema, get_context= lambda *args, **kwargs: {"fixture": FIXTURE}, graphiql=True))