| package junitparams.custom.combined; |
| |
| import java.util.Arrays; |
| import java.util.List; |
| |
| class Cartesian { |
| |
| static Object[] getCartesianProductOf(List<Object[]> array) { |
| if (array == null || array.size() == 0) { |
| return new Object[]{}; |
| } |
| |
| for (int i = 0; i < array.size() - 1; i++) { |
| Object[] arrayOne = array.get(i); |
| Object[] arrayTwo = array.get(i + 1); |
| array.set(i + 1, cartesianProduct(arrayOne, arrayTwo)); |
| } |
| |
| return array.get(array.size() - 1); |
| } |
| |
| private static Object[] cartesianProduct(Object[] arrayOne, Object[] arrayTwo) { |
| int numberOfCombinations = arrayOne.length * arrayTwo.length; |
| Object[] resultArray = new Object[numberOfCombinations][2]; |
| |
| int i = 0; |
| for (Object firstElement : arrayOne) { |
| for (Object secondElement : arrayTwo) { |
| resultArray[i] = getCartesianOfTwoElements(firstElement, secondElement); |
| i++; |
| } |
| } |
| |
| return resultArray; |
| } |
| |
| private static Object getCartesianOfTwoElements(Object objectOne, Object objectTwo) { |
| if (!objectOne.getClass().isArray()) { |
| return new Object[]{objectOne, objectTwo}; |
| } |
| Object[] initialArray = (Object[]) objectOne; |
| Object[] newArray = Arrays.copyOf(initialArray, initialArray.length + 1); |
| newArray[newArray.length - 1] = objectTwo; |
| return newArray; |
| } |
| } |