package com.jcwhatever.nucleus.collections;
import com.jcwhatever.nucleus.collections.ElementCounter.RemovalPolicy;
import com.jcwhatever.nucleus.utils.ArrayUtils;
import org.junit.Assert;
import org.junit.Test;
import java.util.Set;
public class ElementCounterTest {
@Test
public void testAddAll() throws Exception {
ElementCounter<String> counter = new ElementCounter<String>(RemovalPolicy.REMOVE);
counter.addAll(ArrayUtils.asList("1", "2", "3"));
Assert.assertEquals(1, counter.count("1"));
Assert.assertEquals(1, counter.count("2"));
Assert.assertEquals(1, counter.count("3"));
Assert.assertEquals(0, counter.count("4"));
Assert.assertEquals(3, counter.size());
}
@Test
public void testAdd() throws Exception {
ElementCounter<String> counter = new ElementCounter<String>(RemovalPolicy.REMOVE);
counter.add("1");
counter.add("2");
Assert.assertEquals(2, counter.size());
}
@Test
public void testSubtractAll() throws Exception {
ElementCounter<String> counter = new ElementCounter<String>(RemovalPolicy.REMOVE);
counter.add("1");
counter.add("2");
counter.add("2");
counter.subtractAll(ArrayUtils.asList("1", "2"));
Assert.assertEquals(1, counter.size());
Assert.assertEquals(true, counter.contains("2"));
}
@Test
public void testSubtractAll1() throws Exception {
ElementCounter<String> counter = new ElementCounter<String>(RemovalPolicy.BOTTOM_OUT);
counter.add("1");
counter.add("2");
counter.add("2");
counter.subtractAll(ArrayUtils.asList("1", "2"));
Assert.assertEquals(2, counter.size());
Assert.assertEquals(true, counter.contains("2"));
Assert.assertEquals(true, counter.contains("1"));
Assert.assertEquals(0, counter.count("1"));
}
@Test
public void testSubtractAll2() throws Exception {
ElementCounter<String> counter = new ElementCounter<String>(RemovalPolicy.KEEP_COUNTING);
counter.add("1");
counter.add("2");
counter.add("2");
counter.subtractAll(ArrayUtils.asList("1", "2"));
Assert.assertEquals(2, counter.size());
Assert.assertEquals(true, counter.contains("2"));
Assert.assertEquals(true, counter.contains("1"));
Assert.assertEquals(0, counter.count("1"));
}
@Test
public void testSubtract() throws Exception {
ElementCounter<String> counter = new ElementCounter<String>(RemovalPolicy.REMOVE);
counter.add("1");
counter.add("2");
counter.add("2");
counter.subtract("2");
Assert.assertEquals(2, counter.size());
Assert.assertEquals(true, counter.contains("1"));
Assert.assertEquals(true, counter.contains("2"));
Assert.assertEquals(1, counter.count("2"));
}
@Test
public void testSubtract1() throws Exception {
ElementCounter<String> counter = new ElementCounter<String>(RemovalPolicy.BOTTOM_OUT);
counter.add("1");
counter.add("2");
counter.add("2");
counter.subtract("1");
Assert.assertEquals(2, counter.size());
Assert.assertEquals(true, counter.contains("1"));
Assert.assertEquals(true, counter.contains("2"));
Assert.assertEquals(0, counter.count("1"));
counter.subtract("1");
Assert.assertEquals(0, counter.count("1"));
}
@Test
public void testSubtract2() throws Exception {
ElementCounter<String> counter = new ElementCounter<String>(RemovalPolicy.KEEP_COUNTING);
counter.add("1");
counter.add("2");
counter.add("2");
counter.subtract("1");
Assert.assertEquals(2, counter.size());
Assert.assertEquals(true, counter.contains("1"));
Assert.assertEquals(true, counter.contains("2"));
Assert.assertEquals(0, counter.count("1"));
counter.subtract("1");
Assert.assertEquals(-1, counter.count("1"));
}
@Test
public void testGetCount() throws Exception {
ElementCounter<String> counter = new ElementCounter<String>(RemovalPolicy.REMOVE);
counter.add("1");
counter.add("2");
counter.add("2");
counter.add("3");
counter.add("3");
counter.add("3");
Assert.assertEquals(1, counter.count("1"));
Assert.assertEquals(2, counter.count("2"));
Assert.assertEquals(3, counter.count("3"));
}
@Test
public void testSize() throws Exception {
ElementCounter<String> counter = new ElementCounter<String>(RemovalPolicy.REMOVE);
counter.add("1");
counter.add("2");
counter.add("2");
counter.add("3");
counter.add("3");
counter.add("3");
Assert.assertEquals(3, counter.size());
}
@Test
public void testContains() throws Exception {
ElementCounter<String> counter = new ElementCounter<String>(RemovalPolicy.REMOVE);
counter.add("1");
counter.add("2");
counter.add("2");
counter.add("3");
counter.add("3");
counter.add("3");
Assert.assertEquals(true, counter.contains("2"));
Assert.assertEquals(false, counter.contains("4"));
}
@Test
public void testGetElements() throws Exception {
ElementCounter<String> counter = new ElementCounter<String>(RemovalPolicy.REMOVE);
counter.add("1");
counter.add("2");
counter.add("2");
counter.add("3");
counter.add("3");
counter.add("3");
Set<String> result = counter.getElements();
Assert.assertEquals(3, result.size());
Assert.assertEquals(true, result.containsAll(ArrayUtils.asList("1", "2", "3")));
}
@Test
public void testReset() throws Exception {
ElementCounter<String> counter = new ElementCounter<String>(RemovalPolicy.REMOVE);
counter.add("1");
counter.add("2");
counter.add("2");
counter.add("3");
counter.add("3");
counter.add("3");
counter.reset();
Assert.assertEquals(0, counter.size());
}
}