/* * 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.gossip.crdt; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.util.Arrays; import java.util.SortedSet; import java.util.TreeSet; import org.apache.gossip.GossipSettings; import org.apache.gossip.manager.GossipManager; import org.apache.gossip.manager.GossipManagerBuilder; import org.junit.Assert; import org.junit.Test; public class OrSetTest { @Test public void atest() { OrSet i = new OrSet<>(new OrSet.Builder().add(4).add(5).add(6).remove(5)); Assert.assertArrayEquals(Arrays.asList(4, 6).toArray(), i.value().toArray()); } @Test public void mergeTest(){ OrSet i = new OrSet<>(new OrSet.Builder().add(4).add(5).add(6).remove(5)); Assert.assertArrayEquals(Arrays.asList(4, 6).toArray(), i.value().toArray()); OrSet j = new OrSet<>(new OrSet.Builder().add(9).add(4).add(5).remove(6)); OrSet h = i.merge(j); Assert.assertEquals(new OrSet(4,6,9,5), h); } @Test public void mergeTest2(){ OrSet i = new OrSet<>(new OrSet.Builder().add(5).add(4).remove(4).add(6)); Assert.assertEquals(new OrSet(5,6), i); SortedSet tree = new TreeSet<>(); for (Integer in: i.value()){ tree.add(in); } TreeSet compare = new TreeSet<>(); compare.add(5); compare.add(6); Assert.assertEquals(tree, compare); } @Test public void mergeTest4() { Assert.assertArrayEquals(new Integer[] {}, new OrSet(new OrSet.Builder().add(1).remove(1)).toArray()); } @Test public void mergeTest3(){ OrSet i = new OrSet<>(1); OrSet j = new OrSet<>(2); OrSet k = new OrSet<>(i.merge(j), new OrSet.Builder().remove(1)); Assert.assertArrayEquals(new Integer[] { 2 }, i.merge(j).merge(k).toArray()); Assert.assertArrayEquals(new Integer[] { 2 }, j.merge(i).merge(k).toArray()); Assert.assertArrayEquals(new Integer[] { 2 }, k.merge(i).merge(j).toArray()); Assert.assertArrayEquals(new Integer[] { 2 }, k.merge(j).merge(i).toArray()); Assert.assertEquals(j , i.merge(j.merge(k))); } @Test public void mergeTest9(){ OrSet i = new OrSet<>(19); OrSet j = i.merge(i); Assert.assertEquals(i.value(), j.value()); } @Test public void serialTest() throws InterruptedException, URISyntaxException, IOException { GossipManager gossipService2 = GossipManagerBuilder.newBuilder() .cluster("a") .uri(new URI("udp://" + "127.0.0.1" + ":" + (29000 + 1))) .id("1") .gossipSettings(new GossipSettings()) .build(); OrSet i = new OrSet(new OrSet.Builder().add(1).remove(1)); String s = gossipService2.getObjectMapper().writeValueAsString(i); @SuppressWarnings("unchecked") OrSet back = gossipService2.getObjectMapper().readValue(s, OrSet.class); Assert.assertEquals(back, i); } @Test public void mergeTestSame() { OrSet i = new OrSet<>(19); OrSet j = new OrSet<>(19); OrSet k = i.merge(j); Assert.assertEquals(2, k.getElements().get(19).size()); OrSet y = new OrSet<>(k, new OrSet.Builder().remove(19)); Assert.assertEquals(2, y.getTombstones().get(19).size()); Assert.assertEquals(2, y.getElements().get(19).size()); Assert.assertEquals(new OrSet().value(), y.value()); } }