private List<Disciplina> filtraSemRequisitos(List<Disciplina> ofertadas, Plano plano) { List<Disciplina> comRequisitos = new ArrayList<Disciplina>(); for (Disciplina disciplina : ofertadas) { if (plano.temRequisitos(disciplina, plano.getPeriodoAtual() + 1)) { comRequisitos.add(disciplina); } } return comRequisitos; }
@Test public void disciplinasOfertadas() { List<Disciplina> naoAlocadas = new ArrayList<Disciplina>(); naoAlocadas.add(grade.getDisciplinaPorNome("Inglês")); naoAlocadas.add(grade.getDisciplinaPorNome("Engenharia de Software II")); assertTrue(plano1.getDisciplinasOfertadas(grade).containsAll(naoAlocadas)); }
@Test public void comparaDeferencasEntrePlanos() { Plano plano2 = new Plano(); plano2.iniciaPlanoSugerido(grade); assertEquals(0, plano1.getDiferencaDePlanos(plano2)); plano2.removeDisciplina(grade.getDisciplinaPorNome("Projeto em Computação I")); assertEquals(2, plano1.getDiferencaDePlanos(plano2)); plano2.addDisciplina(grade.getDisciplinaPorNome("Projeto em Computação I"), 6); assertEquals(1, plano1.getDiferencaDePlanos(plano2)); plano2.addDisciplina(grade.getDisciplinaPorNome("Projeto em Computação II"), 7); plano2.addDisciplina(grade.getDisciplinaPorNome("Inglês"), 7); assertEquals(1, plano1.getDiferencaDePlanos(plano2)); }
@Test public void mudarDisciplinaDePeriodo() { assertTrue( plano1 .getPeriodos() .get(6) .contemDisciplina(grade.getDisciplinaPorNome("Métodos e Software Numéricos"))); plano1.addDisciplina(grade.getDisciplinaPorNome("Métodos e Software Numéricos"), 7); assertFalse( plano1 .getPeriodos() .get(6) .contemDisciplina(grade.getDisciplinaPorNome("Métodos e Software Numéricos"))); assertTrue( plano1 .getPeriodos() .get(7) .contemDisciplina(grade.getDisciplinaPorNome("Métodos e Software Numéricos"))); }
@Override public List<Disciplina> quaisAlocar(Plano plano) { List<Disciplina> paraAlocar = new ArrayList<Disciplina>(); List<Disciplina> possiveis = filtraSemRequisitos(plano.getDisciplinasOfertadas(new Grade()), plano); Disciplina proximaDificil; int creditos = 0; while (true) { proximaDificil = maisDificil(possiveis); creditos += proximaDificil.getCreditos(); if (creditos > MAX_CREDITOS) break; paraAlocar.add(proximaDificil); possiveis.remove(proximaDificil); } return paraAlocar; }
@Test public void definirPeriodoAtual() { plano1.setPeriodoAtual(3); plano1.addDisciplina(grade.getDisciplinaPorNome("Cálculo Diferencial e Integral III"), 2); assertFalse( plano1 .getDisciplinasAlocadas() .contains(grade.getDisciplinaPorNome("Cálculo Diferencial e Integral III"))); plano1.addDisciplina(grade.getDisciplinaPorNome("Cálculo Diferencial e Integral III"), 3); assertFalse( plano1 .getDisciplinasAlocadas() .contains(grade.getDisciplinaPorNome("Cálculo Diferencial e Integral III"))); plano1.removeDisciplina(grade.getDisciplinaPorNome("Projeto em Computação II")); plano1.addDisciplina(grade.getDisciplinaPorNome("Cálculo Diferencial e Integral III"), 6); plano1.addDisciplina(grade.getDisciplinaPorNome("Economia"), 6); plano1.addDisciplina(grade.getDisciplinaPorNome("Administração"), 6); plano1.addDisciplina(grade.getDisciplinaPorNome("Engenharia de Software II"), 6); plano1.addDisciplina(grade.getDisciplinaPorNome("Inglês"), 6); assertTrue( plano1 .getDisciplinasAlocadas() .contains(grade.getDisciplinaPorNome("Cálculo Diferencial e Integral III"))); assertTrue(plano1.getDisciplinasAlocadas().contains(grade.getDisciplinaPorNome("Economia"))); assertTrue( plano1.getDisciplinasAlocadas().contains(grade.getDisciplinaPorNome("Administração"))); assertTrue( plano1 .getDisciplinasAlocadas() .contains(grade.getDisciplinaPorNome("Engenharia de Software II"))); assertTrue(plano1.getDisciplinasAlocadas().contains(grade.getDisciplinaPorNome("Inglês"))); assertEquals(33, plano1.getPeriodos().get(6).getTotalDeCreditos()); }