blob: 6bbd3b6a185c49d8e57b95441766970142a9be8f [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.ignite.internal.util.collection;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.NoSuchElementException;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
import org.junit.Test;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
/**
*
*/
public class BitSetIntSetTest extends GridCommonAbstractTest {
/**
*
*/
@Test
public void testSizeIsEmpty() {
sizeIsEmpty(0);
sizeIsEmpty(1024);
}
/**
*
*/
private void sizeIsEmpty(int initCap) {
IntSet bitSetIntSet = initCap != 0 ? new BitSetIntSet(initCap) : new BitSetIntSet();
assertEquals(0, bitSetIntSet.size());
assertTrue(bitSetIntSet.isEmpty());
bitSetIntSet = new BitSetIntSet();
assertTrue(bitSetIntSet.add(1));
assertEquals(1, bitSetIntSet.size());
assertTrue(bitSetIntSet.add(10));
assertEquals(2, bitSetIntSet.size());
assertTrue(bitSetIntSet.add(1025));
assertEquals(3, bitSetIntSet.size());
assertEquals(3, bitSetIntSet.size());
assertFalse(bitSetIntSet.isEmpty());
}
/** */
@Test
public void testItetator() {
testIterator(0);
testIterator(1024);
}
/** */
@Test(expected = NoSuchElementException.class)
public void shouldThrowExceptionIfHasNotNextElement() {
IntSet intSet = new BitSetIntSet(2);
intSet.add(1);
intSet.add(2);
Iterator<Integer> iterator = intSet.iterator();
iterator.next();
iterator.next();
iterator.next();
}
/** */
@Test
public void hasNextShouldBeIdempotent() {
IntSet intSet = new BitSetIntSet(3);
intSet.add(1);
intSet.add(2);
intSet.add(3);
Iterator<Integer> iter = intSet.iterator();
assertEquals(1, (int) iter.next());
iter.hasNext();
iter.hasNext();
iter.hasNext();
assertEquals(2, (int) iter.next());
iter.hasNext();
iter.hasNext();
assertEquals(3, (int) iter.next());
}
/** */
@Test
public void toIntArray() {
IntSet emptySet = new BitSetIntSet();
int[] emptyArr = emptySet.toIntArray();
assertThat(emptyArr.length, is(0));
IntSet withGapsSet = new BitSetIntSet(100, Arrays.asList(43, 23, 53));
int[] arr = withGapsSet.toIntArray();
assertThat(arr.length, is(3));
assertThat(arr[0], is(23));
assertThat(arr[1], is(43));
assertThat(arr[2], is(53));
}
/** */
private void testIterator(int initCap) {
IntSet bitSet = initCap != 0 ? new BitSetIntSet(initCap) : new BitSetIntSet();
for (Integer ignored : bitSet)
fail("BitSet is empty, shouldn't be invoked.");
assertFalse(bitSet.iterator().hasNext());
try {
bitSet.iterator().next();
fail("NoSuchElement expected.");
}
catch (NoSuchElementException ignored) {
}
assertTrue(bitSet.add(0));
assertTrue(bitSet.add(1));
assertTrue(bitSet.add(10));
assertFalse(bitSet.add(10));
assertTrue(bitSet.add(11));
assertTrue(bitSet.add(1025));
Iterator<Integer> iterator = bitSet.iterator();
assertTrue(iterator.hasNext());
assertEquals(0, (int)iterator.next());
assertTrue(iterator.hasNext());
assertEquals(1, (int)iterator.next());
assertTrue(iterator.hasNext());
assertEquals(10, (int)iterator.next());
assertTrue(iterator.hasNext());
assertEquals(11, (int)iterator.next());
assertTrue(iterator.hasNext());
assertEquals(1025, (int)iterator.next());
assertFalse(iterator.hasNext());
List<Integer> list = new ArrayList<>();
for (Integer i : bitSet)
list.add(i);
assertEquals(5, list.size());
assertEquals(0, (int)list.get(0));
assertEquals(1, (int)list.get(1));
assertEquals(10, (int)list.get(2));
assertEquals(11, (int)list.get(3));
assertEquals(1025, (int)list.get(4));
assertFalse(bitSet.remove(2));
assertEquals(5, bitSet.size());
assertTrue(bitSet.remove(1));
assertFalse(bitSet.remove(1));
assertEquals(4, bitSet.size());
assertFalse(bitSet.isEmpty());
assertTrue(bitSet.remove(10));
assertFalse(bitSet.remove(10));
assertEquals(3, bitSet.size());
assertFalse(bitSet.isEmpty());
}
/** */
@Test
public void testContains() {
IntSet intSet = new BitSetIntSet();
intSet.add(Integer.valueOf(1));
intSet.add(10);
intSet.add(10);
intSet.add(11);
intSet.add(1025);
assertTrue(intSet.contains(1));
assertFalse(intSet.contains(2));
assertFalse(intSet.contains(3));
assertFalse(intSet.contains(4));
assertTrue(intSet.contains(10));
assertTrue(intSet.contains(11));
assertFalse(intSet.contains(1024));
assertTrue(intSet.contains(1025));
}
/**
*
*/
@Test
public void testContainsAll() {
IntSet intSet = new BitSetIntSet();
intSet.add(1);
intSet.add(10);
intSet.add(10);
intSet.add(11);
intSet.add(1025);
assertTrue(intSet.containsAll(new ArrayList<Integer>() {{
add(1);
add(10);
}}));
assertFalse(intSet.containsAll(new ArrayList<Integer>() {{
add(1);
add(10);
add(11);
add(1025);
add(1026);
}}));
assertFalse(intSet.containsAll(new ArrayList<Integer>() {{
add(1);
add(10);
add(12);
}}));
}
/**
*
*/
@Test
public void testAddAllRemoveAllRetainAll() {
IntSet intSet = new BitSetIntSet();
intSet.add(1);
intSet.add(10);
intSet.add(10);
intSet.add(11);
intSet.add(1025);
assertFalse(intSet.addAll(new ArrayList<Integer>() {{
add(1);
add(10);
}}));
assertEquals(4, intSet.size());
assertTrue(intSet.addAll(new ArrayList<Integer>() {{
add(1);
add(10);
add(11);
add(1025);
add(1026);
}}));
assertEquals(5, intSet.size());
try {
intSet.retainAll(new ArrayList<Integer>() {{
add(10);
add(1025);
}});
fail("retainAll is not supported");
}
catch (UnsupportedOperationException ignored) {
// Ignored.
}
}
/**
*
*/
@Test
public void testToArray() {
IntSet intSet = new BitSetIntSet();
assertEquals(0, intSet.toArray().length);
intSet.add(1);
intSet.add(10);
intSet.add(10);
intSet.add(11);
intSet.add(1025);
Object[] arr = intSet.toArray();
assertEquals(4, arr.length);
assertEquals(1, (int)arr[0]);
assertEquals(10, (int)arr[1]);
assertEquals(11, (int)arr[2]);
assertEquals(1025, (int)arr[3]);
Integer[] input = new Integer[1];
Integer[] output = intSet.toArray(input);
assertNotSame(input, output);
assertEquals(4, arr.length);
assertEquals(1, arr[0]);
assertEquals(10, arr[1]);
assertEquals(11, arr[2]);
assertEquals(1025, arr[3]);
input = new Integer[6];
output = intSet.toArray(input);
assertSame(input, output);
assertEquals(6, output.length);
assertEquals(1, (int)output[0]);
assertEquals(10, (int)output[1]);
assertEquals(11, (int)output[2]);
assertEquals(1025, (int)output[3]);
assertNull(output[4]);
assertNull(output[5]);
}
/**
*
*/
@Test
public void testInvalidValues() {
IntSet intSet = new BitSetIntSet();
try {
intSet.add(null);
fail("add should fail here");
}
catch (IllegalArgumentException ignored) {
// Ignored.
}
try {
intSet.add(-1);
fail("add should fail here");
}
catch (IllegalArgumentException ignored) {
// Ignored.
}
try {
intSet.contains(null);
fail("contains should fail here");
}
catch (NullPointerException ignored) {
// Ignored.
}
assertFalse(intSet.contains(-1));
assertFalse(intSet.remove(null));
assertFalse(intSet.remove(-1));
}
}