    @Test
    public void testPredict() throws Exception {

        List<Long> result = new ArrayList<>();
        // make length unequal
        results.get(domainID).get(0L).remove(0);
        // produce duplicates
        results.get(domainID).get(3L).set(0, results.get(domainID).get(0L).get(0));

        ArrayList<List<Long>> bins = new ArrayList<>();
        int maxLength = 0;
        for (Long catID : catIds) {
            int lenght = results.get(domainID).get(catID).size();
            maxLength = (maxLength > lenght) ? maxLength : lenght;
            bins.add(new ArrayList<>(results.get(domainID).get(catID)));
        }

        int numberOfRequestedResults = 4;
        // round robin
        for (int i = 0; i < maxLength * bins.size(); i++) {
            int j = i % bins.size();
            int k = i / bins.size();
            try {
                Long newEntry = bins.get(j).get(k);
                if (!result.contains(newEntry))
                    result.add(bins.get(j).get(k));
                if (result.size() >= numberOfRequestedResults)
                    break;
            } catch (Exception e) {
                // do not care
            }
        }
        System.out.println("results = \n" + results);
        System.out.println("result = \n" + result);
    }