/*
* Copyright 2014 Goldman Sachs.
*
* Licensed 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 com.gs.collections.impl.set.mutable;
import com.gs.collections.api.LazyIterable;
import com.gs.collections.api.block.function.Function;
import com.gs.collections.api.collection.MutableCollection;
import com.gs.collections.api.set.MutableSet;
import com.gs.collections.api.set.UnsortedSetIterable;
import com.gs.collections.api.tuple.Pair;
import com.gs.collections.impl.block.factory.Predicates;
import com.gs.collections.impl.collection.mutable.UnmodifiableMutableCollectionTestCase;
import com.gs.collections.impl.list.Interval;
import com.gs.collections.impl.test.Verify;
import org.junit.Assert;
import org.junit.Test;
public class MultiReaderUnifiedSetAsReadUntouchableTest extends UnmodifiableMutableCollectionTestCase<Integer>
{
@Override
protected MutableCollection<Integer> getCollection()
{
return MultiReaderUnifiedSet.newSetWith(1).asReadUntouchable();
}
@Test
public void union()
{
MutableSet<String> set = MultiReaderUnifiedSet.newSetWith("1", "2", "3", "4").asReadUntouchable();
MutableSet<String> union = set.union(UnifiedSet.newSetWith("a", "b", "c", "1"));
Verify.assertSize(set.size() + 3, union);
Assert.assertTrue(union.containsAllIterable(Interval.oneTo(set.size()).collect(String::valueOf)));
Verify.assertContainsAll(union, "a", "b", "c");
Assert.assertEquals(set, set.union(UnifiedSet.newSetWith("1")));
}
@Test
public void unionInto()
{
MutableSet<String> set = MultiReaderUnifiedSet.newSetWith("1", "2", "3", "4").asReadUntouchable();
MutableSet<String> union = set.unionInto(UnifiedSet.newSetWith("a", "b", "c", "1"), UnifiedSet.<String>newSet());
Verify.assertSize(set.size() + 3, union);
Assert.assertTrue(union.containsAllIterable(Interval.oneTo(set.size()).collect(String::valueOf)));
Verify.assertContainsAll(union, "a", "b", "c");
Assert.assertEquals(set, set.unionInto(UnifiedSet.newSetWith("1"), UnifiedSet.<String>newSet()));
}
@Test
public void intersect()
{
MutableSet<String> set = MultiReaderUnifiedSet.newSetWith("1", "2", "3", "4").asReadUntouchable();
MutableSet<String> intersect = set.intersect(UnifiedSet.newSetWith("a", "b", "c", "1"));
Verify.assertSize(1, intersect);
Assert.assertEquals(UnifiedSet.newSetWith("1"), intersect);
Verify.assertEmpty(set.intersect(UnifiedSet.newSetWith("not present")));
}
@Test
public void intersectInto()
{
MutableSet<String> set = MultiReaderUnifiedSet.newSetWith("1", "2", "3", "4").asReadUntouchable();
MutableSet<String> intersect = set.intersectInto(UnifiedSet.newSetWith("a", "b", "c", "1"), UnifiedSet.<String>newSet());
Verify.assertSize(1, intersect);
Assert.assertEquals(UnifiedSet.newSetWith("1"), intersect);
Verify.assertEmpty(set.intersectInto(UnifiedSet.newSetWith("not present"), UnifiedSet.<String>newSet()));
}
@Test
public void difference()
{
MutableSet<String> set = MultiReaderUnifiedSet.newSetWith("1", "2", "3", "4").asReadUntouchable();
MutableSet<String> difference = set.difference(UnifiedSet.newSetWith("2", "3", "4", "not present"));
Assert.assertEquals(UnifiedSet.newSetWith("1"), difference);
Assert.assertEquals(set, set.difference(UnifiedSet.newSetWith("not present")));
}
@Test
public void differenceInto()
{
MutableSet<String> set = MultiReaderUnifiedSet.newSetWith("1", "2", "3", "4").asReadUntouchable();
MutableSet<String> difference = set.differenceInto(UnifiedSet.newSetWith("2", "3", "4", "not present"), UnifiedSet.<String>newSet());
Assert.assertEquals(UnifiedSet.newSetWith("1"), difference);
Assert.assertEquals(set, set.differenceInto(UnifiedSet.newSetWith("not present"), UnifiedSet.<String>newSet()));
}
@Test
public void symmetricDifference()
{
MutableSet<String> set = MultiReaderUnifiedSet.newSetWith("1", "2", "3", "4").asReadUntouchable();
MutableSet<String> difference = set.symmetricDifference(UnifiedSet.newSetWith("2", "3", "4", "5", "not present"));
Verify.assertContains("1", difference);
Assert.assertTrue(difference.containsAllIterable(Interval.fromTo(set.size() + 1, 5).collect(String::valueOf)));
for (int i = 2; i <= set.size(); i++)
{
Verify.assertNotContains(String.valueOf(i), difference);
}
Verify.assertSize(set.size() + 1, set.symmetricDifference(UnifiedSet.newSetWith("not present")));
}
@Test
public void symmetricDifferenceInto()
{
MutableSet<String> set = MultiReaderUnifiedSet.newSetWith("1", "2", "3", "4").asReadUntouchable();
MutableSet<String> difference = set.symmetricDifferenceInto(
UnifiedSet.newSetWith("2", "3", "4", "5", "not present"),
UnifiedSet.<String>newSet());
Verify.assertContains("1", difference);
Assert.assertTrue(difference.containsAllIterable(Interval.fromTo(set.size() + 1, 5).collect(String::valueOf)));
for (int i = 2; i <= set.size(); i++)
{
Verify.assertNotContains(String.valueOf(i), difference);
}
Verify.assertSize(
set.size() + 1,
set.symmetricDifferenceInto(UnifiedSet.newSetWith("not present"), UnifiedSet.<String>newSet()));
}
@Test
public void isSubsetOf()
{
MutableSet<String> set = MultiReaderUnifiedSet.newSetWith("1", "2", "3", "4").asReadUntouchable();
Assert.assertTrue(set.isSubsetOf(UnifiedSet.newSetWith("1", "2", "3", "4", "5")));
}
@Test
public void isProperSubsetOf()
{
MutableSet<String> set = MultiReaderUnifiedSet.newSetWith("1", "2", "3", "4").asReadUntouchable();
Assert.assertTrue(set.isProperSubsetOf(UnifiedSet.newSetWith("1", "2", "3", "4", "5")));
Assert.assertFalse(set.isProperSubsetOf(set));
}
@Test
public void powerSet()
{
MutableSet<String> set = MultiReaderUnifiedSet.newSetWith("1", "2", "3", "4").asReadUntouchable();
MutableSet<UnsortedSetIterable<String>> powerSet = set.powerSet();
Verify.assertSize((int) StrictMath.pow(2, set.size()), powerSet);
Verify.assertContains(UnifiedSet.<String>newSet(), powerSet);
Verify.assertContains(set, powerSet);
}
@Test
public void cartesianProduct()
{
MutableSet<String> set = MultiReaderUnifiedSet.newSetWith("1", "2", "3", "4").asReadUntouchable();
LazyIterable<Pair<String, String>> cartesianProduct = set.cartesianProduct(UnifiedSet.newSetWith("One", "Two"));
Verify.assertIterableSize(set.size() * 2, cartesianProduct);
Assert.assertEquals(
set,
cartesianProduct
.select(Predicates.attributeEqual((Function<Pair<?, String>, String>) Pair::getTwo, "One"))
.collect((Function<Pair<String, ?>, String>) Pair::getOne).toSet());
}
}