Beispiel #1
0
 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))
Beispiel #2
0
 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()))
Beispiel #3
0
 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())
Beispiel #4
0
 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))
Beispiel #5
0
 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())
Beispiel #6
0
 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())
Beispiel #7
0
 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)
Beispiel #8
0
 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))
Beispiel #9
0
 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))
Beispiel #10
0
 def test_robots_en_ronda(self):
     robots = self.robots[:]
     fixture = Fixture(robots)
     ronda = fixture.generar_ronda()
     self.assertEqual(set(robots), set(ronda.robots))
Beispiel #11
0
 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))
Beispiel #12
0
 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)
Beispiel #13
0
 def test_con_robots(self):
     fixture = Fixture(self.robots)
     self.assertEqual(fixture.iniciado(), False)
     self.assertEqual(fixture.finalizado(), False)
Beispiel #14
0
 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))