| /*========================================================================= |
| * Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved. |
| * This product is protected by U.S. and international copyright |
| * and intellectual property laws. Pivotal products are covered by |
| * one or more patents listed at http://www.pivotal.io/patents. |
| *========================================================================= |
| */ |
| package com.gemstone.gemfire.cache.query.internal; |
| |
| import java.io.ByteArrayInputStream; |
| import java.io.ByteArrayOutputStream; |
| import java.io.DataInputStream; |
| import java.io.DataOutputStream; |
| import java.util.HashSet; |
| import java.util.Iterator; |
| import java.util.List; |
| import java.util.NoSuchElementException; |
| import java.util.Set; |
| |
| import junit.framework.TestCase; |
| |
| import org.junit.experimental.categories.Category; |
| |
| import com.gemstone.gemfire.cache.query.Struct; |
| import com.gemstone.gemfire.cache.query.internal.types.ObjectTypeImpl; |
| import com.gemstone.gemfire.cache.query.types.ObjectType; |
| import com.gemstone.gemfire.cache.query.types.StructType; |
| import com.gemstone.gemfire.test.junit.categories.UnitTest; |
| |
| // TODO:Asif: Test for null behaviour in various functions |
| |
| /** |
| * Test ResultsBag Limit behaviour |
| * |
| * @author Asif |
| */ |
| @Category(UnitTest.class) |
| public class ResultsBagLimitBehaviourJUnitTest extends TestCase { |
| |
| public ResultsBagLimitBehaviourJUnitTest(String testName) { |
| super(testName); |
| } |
| |
| public void testAsListAndAsSetMethod() { |
| ResultsBag bag = getBagObject(String.class); |
| bag.add(wrap("one", bag.getCollectionType().getElementType())); |
| bag.add(wrap("two", bag.getCollectionType().getElementType())); |
| bag.add(wrap("three", bag.getCollectionType().getElementType())); |
| bag.add(wrap("four", bag.getCollectionType().getElementType())); |
| assertEquals(4, bag.size()); |
| bag.applyLimit(2); |
| List list = bag.asList(); |
| assertEquals(2, list.size()); |
| Set set = bag.asSet(); |
| assertEquals(2, set.size()); |
| } |
| |
| public void testOccurence() { |
| ResultsBag bag = getBagObject(String.class); |
| bag.add(wrap(null, bag.getCollectionType().getElementType())); |
| bag.add(wrap(null, bag.getCollectionType().getElementType())); |
| bag.add(wrap("one", bag.getCollectionType().getElementType())); |
| bag.add(wrap("two", bag.getCollectionType().getElementType())); |
| bag.add(wrap("two", bag.getCollectionType().getElementType())); |
| bag.add(wrap("three", bag.getCollectionType().getElementType())); |
| bag.add(wrap("three", bag.getCollectionType().getElementType())); |
| bag.add(wrap("three", bag.getCollectionType().getElementType())); |
| bag.add(wrap("four", bag.getCollectionType().getElementType())); |
| bag.add(wrap("four", bag.getCollectionType().getElementType())); |
| bag.add(wrap("four", bag.getCollectionType().getElementType())); |
| bag.add(wrap("four", bag.getCollectionType().getElementType())); |
| assertEquals(12, bag.size()); |
| bag.applyLimit(6); |
| int total = bag.occurrences(wrap(null, bag.getCollectionType().getElementType())); |
| total += bag.occurrences(wrap("one", bag.getCollectionType().getElementType())); |
| total += bag.occurrences(wrap("two", bag.getCollectionType().getElementType())); |
| total += bag.occurrences(wrap("three", bag.getCollectionType().getElementType())); |
| total += bag.occurrences(wrap("four", bag.getCollectionType().getElementType())); |
| assertEquals(6, total); |
| } |
| |
| public void testIteratorType() { |
| ResultsBag bag = getBagObject(String.class); |
| bag.add(wrap("one", bag.getCollectionType().getElementType())); |
| bag.add(wrap("two", bag.getCollectionType().getElementType())); |
| bag.add(wrap("two", bag.getCollectionType().getElementType())); |
| bag.add(wrap("three", bag.getCollectionType().getElementType())); |
| bag.add(wrap("three", bag.getCollectionType().getElementType())); |
| assertTrue(bag.iterator() instanceof Bag.BagIterator); |
| bag.applyLimit(6); |
| assertTrue(bag.iterator() instanceof Bag.BagIterator); |
| bag = getBagObject(String.class); |
| bag.add(wrap("one", bag.getCollectionType().getElementType())); |
| bag.add(wrap("two", bag.getCollectionType().getElementType())); |
| bag.add(wrap("two", bag.getCollectionType().getElementType())); |
| bag.add(wrap("three", bag.getCollectionType().getElementType())); |
| bag.add(wrap("three", bag.getCollectionType().getElementType())); |
| bag.add(wrap("three", bag.getCollectionType().getElementType())); |
| bag.add(wrap("four", bag.getCollectionType().getElementType())); |
| bag.add(wrap("four", bag.getCollectionType().getElementType())); |
| bag.add(wrap("four", bag.getCollectionType().getElementType())); |
| bag.add(wrap("four", bag.getCollectionType().getElementType())); |
| bag.applyLimit(6); |
| if (!(bag instanceof StructBag)) { |
| assertTrue(bag.iterator() instanceof Bag.LimitBagIterator); |
| } |
| } |
| |
| public void testContains() { |
| ResultsBag bag = getBagObject(Integer.class); |
| bag.add(wrap(new Integer(1), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(2), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(3), bag.getCollectionType().getElementType())); |
| bag.add(wrap(null, bag.getCollectionType().getElementType())); |
| bag.add(wrap(null, bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(4), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(5), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(6), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(7), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(8), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(9), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(10), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(11), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(12), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(13), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(14), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(15), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(16), bag.getCollectionType().getElementType())); |
| bag.applyLimit(6); |
| List temp = bag.asList(); |
| assertEquals(6, bag.size()); |
| for (int i = 1; i < 17; ++i) { |
| Integer intg = new Integer(i); |
| assertTrue(temp.contains(wrap(intg, bag.getCollectionType().getElementType())) == bag.contains(wrap(intg, bag.getCollectionType().getElementType()))); |
| } |
| assertTrue(temp.contains(wrap(null, bag.getCollectionType().getElementType())) == bag.contains(wrap(null, bag.getCollectionType().getElementType()))); |
| } |
| |
| public void testAddExceptionIfLimitApplied() { |
| ResultsBag bag = getBagObject(String.class); |
| bag.add(wrap("one", bag.getCollectionType().getElementType())); |
| bag.add(wrap("two", bag.getCollectionType().getElementType())); |
| bag.add(wrap("two", bag.getCollectionType().getElementType())); |
| bag.applyLimit(6); |
| try { |
| bag.add(wrap("four", bag.getCollectionType().getElementType())); |
| fail("Addition to bag with limit applied should have failed"); |
| } |
| catch (UnsupportedOperationException soe) { |
| // Expected exception |
| } |
| } |
| |
| // Internal method AddAndGetOccurence used for iter evaluating |
| // only up till the limit |
| public void testAddAndGetOccurence() { |
| ResultsBag bag = getBagObject(String.class); |
| bag = getBagObject(String.class); |
| ObjectType elementType = bag.getCollectionType().getElementType(); |
| assertEquals(1, bag.addAndGetOccurence(elementType instanceof StructType ? ((Struct)wrap("one", elementType)).getFieldValues() : wrap("one", elementType))); |
| bag.add(wrap("two", elementType)); |
| assertEquals(2, bag.addAndGetOccurence(elementType instanceof StructType ? ((Struct)wrap("two", elementType)).getFieldValues() : wrap("two", bag.getCollectionType().getElementType()))); |
| bag.add(wrap("three", bag.getCollectionType().getElementType())); |
| bag.add(wrap("three", bag.getCollectionType().getElementType())); |
| assertEquals(3, bag.addAndGetOccurence(elementType instanceof StructType ? ((Struct)wrap("three", elementType)).getFieldValues() : wrap("three", elementType))); |
| bag.add(wrap(null, bag.getCollectionType().getElementType())); |
| bag.add(wrap(null, bag.getCollectionType().getElementType())); |
| assertEquals(3, bag.addAndGetOccurence(elementType instanceof StructType ? ((Struct)wrap(null, elementType)).getFieldValues() : wrap(null, elementType))); |
| } |
| |
| public void testSizeWithLimitApplied() { |
| ResultsBag bag = getBagObject(String.class); |
| bag.add(wrap("two", bag.getCollectionType().getElementType())); |
| bag.add(wrap("three", bag.getCollectionType().getElementType())); |
| bag.add(wrap("three", bag.getCollectionType().getElementType())); |
| bag.add(wrap("three", bag.getCollectionType().getElementType())); |
| bag.add(wrap("three", bag.getCollectionType().getElementType())); |
| assertEquals(5, bag.size()); |
| // Limit less than actual size |
| bag.applyLimit(3); |
| assertEquals(3, bag.size()); |
| bag = getBagObject(String.class); |
| bag.add(wrap("two", bag.getCollectionType().getElementType())); |
| bag.add(wrap("three", bag.getCollectionType().getElementType())); |
| bag.applyLimit(7); |
| assertEquals(2, bag.size()); |
| } |
| |
| public void testRemove() { |
| // Test when actual size in resultset is less than the limit |
| ResultsBag bag = getBagObject(String.class); |
| bag.add(wrap(null, bag.getCollectionType().getElementType())); |
| bag.add(wrap(null, bag.getCollectionType().getElementType())); |
| bag.add(wrap("one", bag.getCollectionType().getElementType())); |
| bag.add(wrap("two", bag.getCollectionType().getElementType())); |
| bag.add(wrap("two", bag.getCollectionType().getElementType())); |
| bag.add(wrap("three", bag.getCollectionType().getElementType())); |
| bag.add(wrap("three", bag.getCollectionType().getElementType())); |
| bag.add(wrap("three", bag.getCollectionType().getElementType())); |
| bag.add(wrap("four", bag.getCollectionType().getElementType())); |
| bag.add(wrap("four", bag.getCollectionType().getElementType())); |
| bag.add(wrap("four", bag.getCollectionType().getElementType())); |
| bag.add(wrap("four", bag.getCollectionType().getElementType())); |
| bag.applyLimit(15); |
| assertEquals(12, bag.size()); |
| bag.remove(wrap(null, bag.getCollectionType().getElementType())); |
| assertEquals(11, bag.size()); |
| assertEquals(1, bag.occurrences(wrap(null, bag.getCollectionType().getElementType()))); |
| bag.remove(wrap("three", bag.getCollectionType().getElementType())); |
| assertEquals(10, bag.size()); |
| assertEquals(2, bag.occurrences(wrap("three", bag.getCollectionType().getElementType()))); |
| // Test when the actual size is more than the limit |
| bag = getBagObject(Integer.class); |
| bag.add(wrap(null, bag.getCollectionType().getElementType())); |
| bag.add(wrap(null, bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(1), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(2), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(2), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(3), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(3), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(3), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(4), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(4), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(4), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(4), bag.getCollectionType().getElementType())); |
| bag.applyLimit(8); |
| List temp = bag.asList(); |
| int currSize = 8; |
| assertEquals(currSize, 8); |
| for (int i = 1; i < 5; ++i) { |
| Integer intg = new Integer(i); |
| if (temp.contains(wrap(intg, bag.getCollectionType().getElementType()))) { |
| int occurence = bag.occurrences(wrap(intg, bag.getCollectionType().getElementType())); |
| assertTrue(bag.remove(wrap(intg, bag.getCollectionType().getElementType()))); |
| assertEquals(--occurence, bag.occurrences(wrap(intg, bag.getCollectionType().getElementType()))); |
| --currSize; |
| assertEquals(currSize, bag.size()); |
| } |
| else { |
| assertEquals(0, bag.occurrences(wrap(intg, bag.getCollectionType().getElementType()))); |
| } |
| } |
| if (temp.contains(wrap(null, bag.getCollectionType().getElementType()))) { |
| int occurence = bag.occurrences(wrap(null, bag.getCollectionType().getElementType())); |
| assertTrue(bag.remove(wrap(null, bag.getCollectionType().getElementType()))); |
| assertEquals(--occurence, bag.occurrences(wrap(null, bag.getCollectionType().getElementType()))); |
| --currSize; |
| assertEquals(currSize, bag.size()); |
| } |
| |
| // Test null removal |
| bag = getBagObject(Object.class); |
| for (int i = 0; i < 20; ++i) { |
| bag.add(wrap(null, bag.getCollectionType().getElementType())); |
| } |
| bag.applyLimit(4); |
| |
| for (int i = 0; i < 3; ++i) { |
| bag.remove(wrap(null, bag.getCollectionType().getElementType())); |
| } |
| |
| assertEquals(1, bag.size()); |
| assertTrue(bag.contains(wrap(null, bag.getCollectionType().getElementType()))); |
| Iterator itr = bag.iterator(); |
| assertEquals(wrap(null, bag.getCollectionType().getElementType()), itr.next()); |
| assertFalse(itr.hasNext()); |
| bag.remove(wrap(null, bag.getCollectionType().getElementType())); |
| assertEquals(0, bag.size()); |
| assertFalse(bag.contains(wrap(null, bag.getCollectionType().getElementType()))); |
| itr = bag.iterator(); |
| assertFalse(itr.hasNext()); |
| |
| } |
| |
| public void testAddAllExceptionIfLimitApplied() { |
| ResultsBag bag = getBagObject(Object.class); |
| bag.applyLimit(6); |
| try { |
| bag.addAll(new HashSet()); |
| fail("addAll invocation to bag with limit applied should have failed"); |
| } |
| catch (UnsupportedOperationException soe) { |
| // Expected exception |
| } |
| } |
| |
| public void testToDataFromData() throws Exception { |
| // Test with limit specified & limit less than internal size |
| ResultsBag toBag = getBagObject(String.class); |
| toBag.add(wrap(null, toBag.getCollectionType().getElementType())); |
| toBag.add(wrap(null, toBag.getCollectionType().getElementType())); |
| toBag.add(wrap(null, toBag.getCollectionType().getElementType())); |
| toBag.add(wrap("one", toBag.getCollectionType().getElementType())); |
| toBag.add(wrap("two", toBag.getCollectionType().getElementType())); |
| toBag.add(wrap("two", toBag.getCollectionType().getElementType())); |
| toBag.add(wrap("three", toBag.getCollectionType().getElementType())); |
| toBag.add(wrap("three", toBag.getCollectionType().getElementType())); |
| toBag.add(wrap("three", toBag.getCollectionType().getElementType())); |
| toBag.add(wrap("four", toBag.getCollectionType().getElementType())); |
| toBag.add(wrap("four", toBag.getCollectionType().getElementType())); |
| toBag.add(wrap("four", toBag.getCollectionType().getElementType())); |
| toBag.add(wrap("four", toBag.getCollectionType().getElementType())); |
| toBag.applyLimit(9); |
| assertEquals(9, toBag.size()); |
| ByteArrayOutputStream baos = new ByteArrayOutputStream(10240); |
| DataOutputStream dos = new DataOutputStream(baos); |
| toBag.toData(dos); |
| byte[] data = baos.toByteArray(); |
| ByteArrayInputStream bis = new ByteArrayInputStream(data); |
| DataInputStream dis = new DataInputStream(bis); |
| // Create a From ResultBag |
| ResultsBag fromBag = getBagObject(String.class); |
| fromBag.fromData(dis); |
| assertEquals(toBag.size(), fromBag.size()); |
| assertEquals(toBag.occurrences(wrap(null, toBag.getCollectionType().getElementType())), fromBag.occurrences(wrap(null, fromBag.getCollectionType().getElementType()))); |
| assertEquals(toBag.occurrences(wrap("one", toBag.getCollectionType().getElementType())), fromBag.occurrences(wrap("one", fromBag.getCollectionType().getElementType()))); |
| assertEquals(toBag.occurrences(wrap("two", toBag.getCollectionType().getElementType())), fromBag.occurrences(wrap("two", fromBag.getCollectionType().getElementType()))); |
| assertEquals(toBag.occurrences(wrap("three", toBag.getCollectionType().getElementType())), fromBag.occurrences(wrap("three", fromBag.getCollectionType().getElementType()))); |
| assertEquals(toBag.occurrences(wrap("four", toBag.getCollectionType().getElementType())), fromBag.occurrences(wrap("four", fromBag.getCollectionType().getElementType()))); |
| assertEquals(toBag.occurrences(wrap(null, toBag.getCollectionType().getElementType())), fromBag.occurrences(wrap(null, fromBag.getCollectionType().getElementType()))); |
| assertFalse(toBag.asList().retainAll(fromBag.asList())); |
| } |
| |
| public void testLimitResultsBagIterator_1() { |
| ResultsBag bag = getBagObject(Integer.class); |
| bag.add(wrap(null, bag.getCollectionType().getElementType())); |
| bag.add(wrap(null, bag.getCollectionType().getElementType())); |
| bag.add(wrap(null, bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(1), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(2), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(2), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(3), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(3), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(3), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(4), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(4), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(4), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(4), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(5), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(5), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(5), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(5), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(5), bag.getCollectionType().getElementType())); |
| bag.applyLimit(8); |
| Iterator itr = bag.iterator(); |
| if (!(bag instanceof StructBag)) { |
| assertTrue(bag.iterator() instanceof Bag.LimitBagIterator); |
| } |
| List asList = bag.asList(); |
| |
| // Check repetition |
| int i = 0; |
| while (itr.hasNext()) { |
| assertEquals(itr.next(), asList.get(i++)); |
| } |
| // Remvove first 5. This means after the completion of iteration the |
| // size should be 3 |
| i = 0; |
| itr = bag.iterator(); |
| while (i < 5) { |
| itr.next(); |
| itr.remove(); |
| ++i; |
| } |
| |
| assertEquals(3, bag.size()); |
| i = 0; |
| itr = bag.iterator(); |
| while (i < 3) { |
| assertEquals(asList.get(i + 5), itr.next()); |
| ++i; |
| } |
| } |
| |
| public void testLimitResultsBagIterator_2() { |
| ResultsBag bag = getBagObject(Object.class); |
| for (int i = 0; i < 20; ++i) { |
| bag.add(wrap(null, bag.getCollectionType().getElementType())); |
| } |
| bag.applyLimit(8); |
| Iterator itr = bag.iterator(); |
| if (!(bag instanceof StructBag)) { |
| assertTrue(bag.iterator() instanceof Bag.LimitBagIterator); |
| } |
| List asList = bag.asList(); |
| |
| // Check repetition |
| int i = 0; |
| while (itr.hasNext()) { |
| assertEquals(itr.next(), asList.get(i++)); |
| } |
| // Remvove first 5. This means after the completion of iteration the |
| // size should be 3 |
| i = 0; |
| itr = bag.iterator(); |
| while (i < 5) { |
| itr.next(); |
| itr.remove(); |
| ++i; |
| } |
| |
| assertEquals(3, bag.size()); |
| i = 0; |
| itr = bag.iterator(); |
| if (!(bag instanceof StructBag)) { |
| assertTrue(bag.iterator() instanceof Bag.LimitBagIterator); |
| } |
| while (itr.hasNext()) { |
| assertEquals(asList.get(i + 5), itr.next()); |
| ++i; |
| } |
| assertEquals(i, 3); |
| } |
| |
| public void testValidExceptionThrown() { |
| ResultsBag bag = getBagObject(Integer.class); |
| bag.add(wrap(new Integer(1), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(2), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(2), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(3), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(3), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(4), bag.getCollectionType().getElementType())); |
| bag.applyLimit(3); |
| assertEquals(3, bag.size()); |
| |
| Iterator itr = bag.iterator(); |
| try { |
| itr.remove(); |
| fail("should have thrown a IllegalStateException"); |
| } |
| catch (IllegalStateException e) { |
| // pass |
| } |
| for (int i = 0; i < 3; i++) { |
| Object n = itr.next(); |
| } |
| try { |
| itr.next(); |
| fail("should have thrown a NoSuchElementException"); |
| } |
| catch (NoSuchElementException e) { |
| // pass |
| } |
| |
| // test with removes |
| itr = bag.iterator(); |
| for (int i = 0; i < 3; i++) { |
| Object n = itr.next(); |
| itr.remove(); |
| } |
| assertEquals(0, bag.size()); |
| try { |
| itr.next(); |
| fail("should have thrown a NoSuchElementException"); |
| } |
| catch (NoSuchElementException e) { |
| // pass |
| } |
| } |
| |
| public void testRemoveAll() { |
| ResultsBag bag = getBagObject(Integer.class); |
| // Add Integer & null Objects |
| bag.add(wrap(new Integer(1), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(2), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(2), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(3), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(3), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(4), bag.getCollectionType().getElementType())); |
| bag.add(wrap(null, bag.getCollectionType().getElementType())); |
| bag.add(wrap(null, bag.getCollectionType().getElementType())); |
| bag.applyLimit(4); |
| List asList = bag.asList(); |
| asList.add(wrap(new Integer(13), bag.getCollectionType().getElementType())); |
| assertEquals(4, bag.size()); |
| assertEquals(5, asList.size()); |
| // Remove all the elements from the list which match the |
| // first element pf the list and also |
| // Get the number of occurnce of first element of List, in the bag |
| int occurence = bag.occurrences(asList.get(0)); |
| // Now remove the this element from the list totally |
| Object toRemove = asList.get(0); |
| for (int i = 0; i < occurence; ++i) { |
| asList.remove(toRemove); |
| } |
| // So we have added one element in thje list which does not exist in the bag |
| // and removeed one element from list which exists in teh bag. |
| bag.removeAll(asList); |
| assertEquals(occurence, bag.size()); |
| Iterator itr = bag.iterator(); |
| for (int i = 0; i < occurence; ++i) { |
| itr.next(); |
| } |
| assertFalse(itr.hasNext()); |
| } |
| |
| public void testRetainAll() { |
| ResultsBag bag = getBagObject(Integer.class); |
| // Add Integer & null Objects |
| bag.add(wrap(new Integer(1), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(2), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(2), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(3), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(3), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(4), bag.getCollectionType().getElementType())); |
| bag.add(wrap(null, bag.getCollectionType().getElementType())); |
| bag.add(wrap(null, bag.getCollectionType().getElementType())); |
| bag.applyLimit(4); |
| List asList = bag.asList(); |
| // Asif :Just add an arbit data which is not contained in the bag |
| asList.add(wrap(new Integer(13), bag.getCollectionType().getElementType())); |
| bag.retainAll(asList); |
| assertEquals(4, bag.size()); |
| assertEquals(5, asList.size()); |
| // Remove all the elements from the list which match the |
| // first element pf the list and also |
| // Get the number of occurnce of first element of List, in the bag |
| int occurence = bag.occurrences(asList.get(0)); |
| // Now remove the this element from the list totally |
| Object toRemove = asList.get(0); |
| for (int i = 0; i < occurence; ++i) { |
| asList.remove(toRemove); |
| } |
| // So we have added one element in thje list which does not exist in the bag |
| // and removeed one element from list which exists in teh bag. |
| bag.retainAll(asList); |
| assertEquals((4 - occurence), bag.size()); |
| Iterator itr = bag.iterator(); |
| for (int i = 0; i < (4 - occurence); ++i) { |
| itr.next(); |
| } |
| assertFalse(itr.hasNext()); |
| } |
| |
| public void testContainAll() { |
| ResultsBag bag = getBagObject(Integer.class); |
| // Add Integer & null Objects |
| bag.add(wrap(new Integer(1), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(2), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(2), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(3), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(3), bag.getCollectionType().getElementType())); |
| bag.add(wrap(new Integer(4), bag.getCollectionType().getElementType())); |
| bag.add(wrap(null, bag.getCollectionType().getElementType())); |
| bag.add(wrap(null, bag.getCollectionType().getElementType())); |
| bag.applyLimit(4); |
| List asList = bag.asList(); |
| // Asif :Just add an arbit data which is not contained in the bag |
| // asList.add(wrap(new |
| // Integer(13),bag.getCollectionType().getElementType())); |
| assertEquals(4, bag.size()); |
| // assertEquals(5,asList.size()); |
| // Remove all the elements from the list which match the |
| // first element pf the list |
| int occurence = bag.occurrences(asList.get(0)); |
| // Now remove the this element from the list totally |
| Object toRemove = asList.get(0); |
| for (int i = 0; i < occurence; ++i) { |
| asList.remove(toRemove); |
| } |
| assertTrue(bag.containsAll(asList)); |
| //Asif :Just add an arbit data which is not contained in the bag |
| asList.add(wrap(new Integer(13), bag.getCollectionType().getElementType())); |
| assertFalse(bag.containsAll(asList)); |
| } |
| |
| public ResultsBag getBagObject(Class clazz) { |
| ObjectType type = new ObjectTypeImpl(clazz); |
| return new ResultsBag(type, null); |
| } |
| |
| public Object wrap(Object obj, ObjectType elementType) { |
| return obj; |
| } |
| |
| } |