1/*
2 * Copyright (C) 2016 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5 * use this file except in compliance with the License. You may obtain a copy of
6 * 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, WITHOUT
12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13 * License for the specific language governing permissions and limitations under
14 * the License.
15 */
16package com.android.internal.util;
17
18import android.test.suitebuilder.annotation.SmallTest;
19import junit.framework.TestCase;
20
21import java.util.ArrayList;
22import java.util.Arrays;
23import java.util.Collections;
24
25public class ArrayUtilsTest extends TestCase {
26
27    @SmallTest
28    public void testUnstableRemoveIf() throws Exception {
29        java.util.function.Predicate<Object> isNull = new java.util.function.Predicate<Object>() {
30            @Override
31            public boolean test(Object o) {
32                return o == null;
33            }
34        };
35
36        final Object a = new Object();
37        final Object b = new Object();
38        final Object c = new Object();
39
40        ArrayList<Object> collection = null;
41        assertEquals(0, ArrayUtils.unstableRemoveIf(collection, isNull));
42
43        collection = new ArrayList<>();
44        assertEquals(0, ArrayUtils.unstableRemoveIf(collection, isNull));
45
46        collection = new ArrayList<>(Collections.singletonList(a));
47        assertEquals(0, ArrayUtils.unstableRemoveIf(collection, isNull));
48        assertEquals(1, collection.size());
49        assertTrue(collection.contains(a));
50
51        collection = new ArrayList<>(Collections.singletonList(null));
52        assertEquals(1, ArrayUtils.unstableRemoveIf(collection, isNull));
53        assertEquals(0, collection.size());
54
55        collection = new ArrayList<>(Arrays.asList(a, b));
56        assertEquals(0, ArrayUtils.unstableRemoveIf(collection, isNull));
57        assertEquals(2, collection.size());
58        assertTrue(collection.contains(a));
59        assertTrue(collection.contains(b));
60
61        collection = new ArrayList<>(Arrays.asList(a, null));
62        assertEquals(1, ArrayUtils.unstableRemoveIf(collection, isNull));
63        assertEquals(1, collection.size());
64        assertTrue(collection.contains(a));
65
66        collection = new ArrayList<>(Arrays.asList(null, a));
67        assertEquals(1, ArrayUtils.unstableRemoveIf(collection, isNull));
68        assertEquals(1, collection.size());
69        assertTrue(collection.contains(a));
70
71        collection = new ArrayList<>(Arrays.asList(null, null));
72        assertEquals(2, ArrayUtils.unstableRemoveIf(collection, isNull));
73        assertEquals(0, collection.size());
74
75        collection = new ArrayList<>(Arrays.asList(a, b, c));
76        assertEquals(0, ArrayUtils.unstableRemoveIf(collection, isNull));
77        assertEquals(3, collection.size());
78        assertTrue(collection.contains(a));
79        assertTrue(collection.contains(b));
80        assertTrue(collection.contains(c));
81
82        collection = new ArrayList<>(Arrays.asList(a, b, null));
83        assertEquals(1, ArrayUtils.unstableRemoveIf(collection, isNull));
84        assertEquals(2, collection.size());
85        assertTrue(collection.contains(a));
86        assertTrue(collection.contains(b));
87
88        collection = new ArrayList<>(Arrays.asList(a, null, b));
89        assertEquals(1, ArrayUtils.unstableRemoveIf(collection, isNull));
90        assertEquals(2, collection.size());
91        assertTrue(collection.contains(a));
92        assertTrue(collection.contains(b));
93
94        collection = new ArrayList<>(Arrays.asList(null, a, b));
95        assertEquals(1, ArrayUtils.unstableRemoveIf(collection, isNull));
96        assertEquals(2, collection.size());
97        assertTrue(collection.contains(a));
98        assertTrue(collection.contains(b));
99
100        collection = new ArrayList<>(Arrays.asList(a, null, null));
101        assertEquals(2, ArrayUtils.unstableRemoveIf(collection, isNull));
102        assertEquals(1, collection.size());
103        assertTrue(collection.contains(a));
104
105        collection = new ArrayList<>(Arrays.asList(null, null, a));
106        assertEquals(2, ArrayUtils.unstableRemoveIf(collection, isNull));
107        assertEquals(1, collection.size());
108        assertTrue(collection.contains(a));
109
110        collection = new ArrayList<>(Arrays.asList(null, a, null));
111        assertEquals(2, ArrayUtils.unstableRemoveIf(collection, isNull));
112        assertEquals(1, collection.size());
113        assertTrue(collection.contains(a));
114
115        collection = new ArrayList<>(Arrays.asList(null, null, null));
116        assertEquals(3, ArrayUtils.unstableRemoveIf(collection, isNull));
117        assertEquals(0, collection.size());
118    }
119}
120