aboutsummaryrefslogtreecommitdiffstats
path: root/container-search/src/test/java/com/yahoo/vespa/streamingvisitors/ListMergerTestCase.java
blob: 97dc2674256a5acea91eaab03b445e91bd9e136a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.streamingvisitors;

import org.junit.jupiter.api.Test;

import java.util.List;
import java.util.LinkedList;

import static org.junit.jupiter.api.Assertions.assertEquals;

/**
 * @author Ulf Carlin
 */
public class ListMergerTestCase {

    private void initializeLists(List<String> list1, List<String> list2, int entryCount, int padding) {
        for (int i = 0; i < entryCount; i++) {
            if ((i % 2) == 0) {
                list1.add("String " + String.format("%0" + padding + "d", (i+1)));
            } else {
                list2.add("String " + String.format("%0" + padding + "d", (i+1)));
            }
        }
    }

    private void verifyList(List<String> list, int entryCount, int padding) {
        assertEquals(entryCount, list.size());
        for (int i = 0; i < entryCount; i++) {
            assertEquals("String " + String.format("%0" + padding + "d", (i+1)), list.get(i));
        }
    }

    @Test
    void testMergeLists() {
        int entryCount = 6;
        int padding = (int) Math.log10(entryCount) + 1;

        List<String> list1 = new LinkedList<>();
        List<String> list2 = new LinkedList<>();
        initializeLists(list1, list2, entryCount, padding);

        List<String> newList = ListMerger.mergeIntoArrayList(list1, list2);
        verifyList(newList, entryCount, padding);

        newList = ListMerger.mergeIntoArrayList(list1, list2, entryCount / 2);
        verifyList(newList, entryCount / 2, padding);

        ListMerger.mergeLinkedLists(list1, list2, entryCount / 2);
        verifyList(list1, entryCount / 2, padding);
    }

    @Test
    void testMergeListsReversed() {
        int entryCount = 6;
        int padding = (int) Math.log10(entryCount) + 1;

        List<String> list1 = new LinkedList<>();
        List<String> list2 = new LinkedList<>();
        initializeLists(list2, list1, entryCount, padding);

        List<String> newList = ListMerger.mergeIntoArrayList(list1, list2);
        verifyList(newList, entryCount, padding);

        newList = ListMerger.mergeIntoArrayList(list1, list2, entryCount / 2);
        verifyList(newList, entryCount / 2, padding);

        ListMerger.mergeLinkedLists(list1, list2, entryCount / 2);
        verifyList(list1, entryCount / 2, padding);
    }

}