package com.mattrixwv.project_euler.problems; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertThrows; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; import org.mockito.junit.jupiter.MockitoExtension; import com.mattrixwv.project_euler.exceptions.Unsolved; @ExtendWith(MockitoExtension.class) public class TestProblem29 extends BaseTest{ @InjectMocks private Problem29 problem; @Test @Override public void testDescription(){ assertEquals("How many distinct terms are in the sequence generated by a^b for 2 <= a <= 100 and 2 <= b <= 100?", problem.getDescription()); assertFalse(problem.getSolved()); } @Test @Override public void testSolve(){ assertThrows(Unsolved.class, () -> { problem.getUnique(); }); assertThrows(Unsolved.class, () -> { problem.getNumUnique(); }); problem.solve(); //Verify result assertEquals(9183, problem.getUnique().size()); assertEquals(9183, problem.getNumUnique()); assertEquals("The number of unique values generated by a^b for 2 <= a <= 100 and 2 <= b <= 100 is 9183", problem.getResult()); //Verify the problem variables and functions were called verifyProblem(problem); //Verify the problem won't be run again verifyProblemSecondRun(problem); } @Test @Override public void testReset(){ problem.reset(); //Verify solved was reset assertFalse(problem.getSolved()); super.testReset(); //Verify the problem can be solved again testSolve(); } }