Added test for TODOs in Django. Removed n^2 scan for merging comments.
[idea/community.git] / platform / util / testSrc / com / intellij / util / containers / ContainerUtilTest.java
1 /*
2  * Copyright 2000-2009 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package com.intellij.util.containers;
18
19 import com.intellij.openapi.util.Condition;
20 import gnu.trove.TIntArrayList;
21
22 import java.util.*;
23
24 public class ContainerUtilTest extends junit.framework.TestCase {
25   public void testFindInstanceOf() {
26     Iterator<Object> iterator = Arrays.<Object>asList(new Integer(1), new ArrayList(), "1").iterator();
27     String string = (String)ContainerUtil.find(iterator, FilteringIterator.instanceOf(String.class));
28     junit.framework.Assert.assertEquals("1", string);
29   }
30
31   public void testConcatMulti() {
32     List<Integer> l = ContainerUtil.concat(Arrays.asList(1, 2), Collections.EMPTY_LIST, Arrays.asList(3, 4));
33     assertEquals(4, l.size());
34     assertEquals(1, (int)l.get(0));
35     assertEquals(2, (int)l.get(1));
36     assertEquals(3, (int)l.get(2));
37     assertEquals(4, (int)l.get(3));
38
39     try {
40       l.get(-1);
41       fail();
42     }
43     catch (IndexOutOfBoundsException ignore) {
44     }
45
46     try {
47       l.get(4);
48       fail();
49     }
50     catch (IndexOutOfBoundsException ignore) {
51     }
52   }
53
54   public void testIterateWithCondition() throws Exception {
55     Condition<Integer> cond = new Condition<Integer>() {
56       @Override
57       public boolean value(Integer integer) {
58         return integer > 2;
59       }
60     };
61
62     asserIterating(Arrays.asList(1, 4, 2, 5), cond, 4, 5);
63     asserIterating(Arrays.asList(1, 2), cond);
64     asserIterating(Collections.<Integer>emptyList(), cond);
65     asserIterating(Arrays.asList(4), cond, 4);
66   }
67
68   private static void asserIterating(List<Integer> collection, Condition<Integer> condition, Integer... expected) {
69     Iterable<Integer> it = ContainerUtil.iterate(collection, condition);
70     List<Integer> actual = new ArrayList<Integer>();
71     for (Integer each : it) {
72       actual.add(each);
73     }
74     assertEquals(Arrays.asList(expected), actual);
75   }
76
77   public void testIteratingBackward() throws Exception {
78     List<String> ss = new ArrayList<String>();
79     ss.add("a");
80     ss.add("b");
81     ss.add("c");
82
83     String log = "";
84     for (String s : ss) {
85       log += s;
86     }
87
88     for (String s : ContainerUtil.iterateBackward(ss)) {
89       log += s;
90     }
91
92     assertEquals("abccba", log);
93   }
94
95   public void testMergeSortedArrays() {
96     TIntArrayList x1 = new TIntArrayList(new int[]{0, 2, 4, 6});
97     TIntArrayList y1 = new TIntArrayList(new int[]{0, 2, 4, 6});
98     TIntArrayList x2 = new TIntArrayList(new int[]{1, 2, 2});
99     TIntArrayList y2 = new TIntArrayList(new int[]{1, 2, 3});
100     ContainerUtil.mergeSortedArrays(x1, y1, x2, y2);
101     assertEquals(new TIntArrayList(new int[]{0, 1, 2, 2, 4, 6}), x1);
102     assertEquals(new TIntArrayList(new int[]{0, 1, 2, 3, 4, 6}), y1);
103     x2 = new TIntArrayList(new int[]{1, 2, 2});
104     y2 = new TIntArrayList(new int[]{1, 2, 3});
105     ContainerUtil.mergeSortedArrays(x1, y1, x2, y2);
106     assertEquals(new TIntArrayList(new int[]{0, 1, 2, 2, 4, 6}), x1);
107     assertEquals(new TIntArrayList(new int[]{0, 1, 2, 3, 4, 6}), y1);
108
109     x2 = new TIntArrayList(new int[]{-1, -1, -2});
110     y2 = new TIntArrayList(new int[]{-1, -2, -3});
111     ContainerUtil.mergeSortedArrays(x1, y1, x2, y2);
112     assertEquals(new TIntArrayList(new int[]{-1, -1, -2, 0, 1, 2, 2, 4, 6}), x1);
113     assertEquals(new TIntArrayList(new int[]{-1, -2, -3, 0, 1, 2, 3, 4, 6}), y1);
114   }
115 }