def test_deve_retornar_posicoes_rapidamente_quando_classificacao_e_colossal(
            self):
        qtd_pontuacoes = es_o_primeiro_do_ranking.ENTRADA_TESTE_3[
            'qtd_pontuacoes']
        pontuacoes = list(
            map(
                int,
                es_o_primeiro_do_ranking.ENTRADA_TESTE_3['pontuacoes'].rstrip(
                ).split()))
        qtd_pontuacoes_do_joaozinho = es_o_primeiro_do_ranking.ENTRADA_TESTE_3[
            'qtd_pontuacoes_joaozinho']
        pontuacoes_do_joaozinho = list(
            map(
                int, es_o_primeiro_do_ranking.
                ENTRADA_TESTE_3['pontuacoes_joaozinho'].rstrip().split()))

        tempo_de_inicio = time.time()
        resposta = o_primeiro_do_ranking(qtd_pontuacoes, pontuacoes,
                                         qtd_pontuacoes_do_joaozinho,
                                         pontuacoes_do_joaozinho)
        tempo_de_execucao = time.time() - tempo_de_inicio

        resposta_esperada = list(
            map(int,
                es_o_primeiro_do_ranking.SAIDA_TESTE_3.rstrip().split()))
        self.assertEqual(resposta_esperada, resposta)
        self.assertTrue(
            tempo_de_execucao < 5
        )  # Caso não consiga fazer em menos de 5 segundos, tente chegar o mais proximo disso
    def test_deve_lancar_erro_em_caso_de_valores_invalidos(self):
        for i in range(len(testes_de_erro.DADOS)):
            teste = testes_de_erro.DADOS[i]['teste']
            error_message = testes_de_erro.DADOS[i]['error_message']

            with self.subTest(msg=teste, i=i):
                qtd_pontuacoes = testes_de_erro.DADOS[i]['qtd_pontuacoes']
                pontuacoes = testes_de_erro.DADOS[i]['pontuacoes']
                qtd_pontuacoes_do_joaozinho = testes_de_erro.DADOS[i][
                    'qtd_pontuacoes_do_joaozinho']
                pontuacoes_do_joaozinho = testes_de_erro.DADOS[i][
                    'pontuacoes_do_joaozinho']

                with self.assertRaises(validacao.ValidacaoError) as context:
                    o_primeiro_do_ranking(qtd_pontuacoes, pontuacoes,
                                          qtd_pontuacoes_do_joaozinho,
                                          pontuacoes_do_joaozinho)

                self.assertEqual(error_message, context.exception.message)
    def test_deve_retornar_posicoes_quando_classificacao_e_pequena(self):
        qtd_pontuacoes = 7
        pontuacoes = [100, 100, 50, 40, 40, 20, 10]
        qtd_pontuacoes_do_joaozinho = 4
        pontuacoes_do_joaozinho = [5, 25, 50, 120]

        resposta = o_primeiro_do_ranking(qtd_pontuacoes, pontuacoes,
                                         qtd_pontuacoes_do_joaozinho,
                                         pontuacoes_do_joaozinho)

        self.assertEqual([6, 4, 2, 1], resposta)
    def test_deve_retornar_posicoes_quando_classificacao_e_um_pouco_maior(
            self):
        qtd_pontuacoes = es_o_primeiro_do_ranking.ENTRADA_TESTE_1[
            'qtd_pontuacoes']
        pontuacoes = list(
            map(
                int,
                es_o_primeiro_do_ranking.ENTRADA_TESTE_1['pontuacoes'].rstrip(
                ).split()))
        qtd_pontuacoes_do_joaozinho = es_o_primeiro_do_ranking.ENTRADA_TESTE_1[
            'qtd_pontuacoes_joaozinho']
        pontuacoes_do_joaozinho = list(
            map(
                int, es_o_primeiro_do_ranking.
                ENTRADA_TESTE_1['pontuacoes_joaozinho'].rstrip().split()))

        resposta = o_primeiro_do_ranking(qtd_pontuacoes, pontuacoes,
                                         qtd_pontuacoes_do_joaozinho,
                                         pontuacoes_do_joaozinho)

        resposta_esperada = list(
            map(int,
                es_o_primeiro_do_ranking.SAIDA_TESTE_1.rstrip().split()))
        self.assertEqual(resposta_esperada, resposta)