import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.List; import static org.junit.Assert.assertEquals; @RunWith(Parameterized.class) public class PrimeFactorsCalculatorTest { private long input; private List<Long> expectedOutput; @Parameters(name="Prime factors of {0} = {1}") public static Collection<Object[]> data() { return Arrays.asList(new Object[][]{ {1L, Collections.emptyList()}, {2L, Collections.singletonList(2L)}, {3L, Collections.singletonList(3L)}, {4L, Arrays.asList(2L, 2L)}, {6L, Arrays.asList(2L, 3L)}, {8L, Arrays.asList(2L, 2L, 2L)}, {9L, Arrays.asList(3L, 3L)}, {27L, Arrays.asList(3L, 3L, 3L)}, {625L, Arrays.asList(5L, 5L, 5L, 5L)}, {901255L, Arrays.asList(5L, 17L, 23L, 461L)}, {93819012551L, Arrays.asList(11L, 9539L, 894119L)} }); } public PrimeFactorsCalculatorTest(long input, List<Long> expectedOutput) { this.input = input; this.expectedOutput = expectedOutput; } @Test public void test() { assertEquals(expectedOutput, new PrimeFactorsCalculator().calculatePrimeFactorsOf(input)); } }