Add OR-Set (Observed-Remove Set) (#4980)

This commit is contained in:
Niklas Hoefflin
2023-12-11 22:05:43 +01:00
committed by GitHub
parent 4aa8e6a0eb
commit e26fd9da71
3 changed files with 279 additions and 0 deletions

View File

@ -0,0 +1,86 @@
package com.thealgorithms.datastructures.crdt;
import static org.junit.jupiter.api.Assertions.*;
import java.util.Set;
import org.junit.jupiter.api.Test;
class ORSetTest {
@Test
void testContains() {
ORSet<String> orSet = new ORSet<>();
orSet.add("A");
assertTrue(orSet.contains("A"));
}
@Test
void testAdd() {
ORSet<String> orSet = new ORSet<>();
orSet.add("A");
assertTrue(orSet.contains("A"));
}
@Test
void testRemove() {
ORSet<String> orSet = new ORSet<>();
orSet.add("A");
orSet.add("A");
orSet.remove("A");
assertFalse(orSet.contains("A"));
}
@Test
void testElements() {
ORSet<String> orSet = new ORSet<>();
orSet.add("A");
orSet.add("B");
assertEquals(Set.of("A", "B"), orSet.elements());
}
@Test
void testCompareEqualSets() {
ORSet<String> orSet1 = new ORSet<>();
ORSet<String> orSet2 = new ORSet<>();
orSet1.add("A");
orSet2.add("A");
orSet2.add("B");
orSet2.add("C");
orSet2.remove("C");
orSet1.merge(orSet2);
orSet2.merge(orSet1);
orSet2.remove("B");
assertTrue(orSet1.compare(orSet2));
}
@Test
void testCompareDifferentSets() {
ORSet<String> orSet1 = new ORSet<>();
ORSet<String> orSet2 = new ORSet<>();
orSet1.add("A");
orSet2.add("B");
assertFalse(orSet1.compare(orSet2));
}
@Test
void testMerge() {
ORSet<String> orSet1 = new ORSet<>();
ORSet<String> orSet2 = new ORSet<>();
orSet1.add("A");
orSet1.add("A");
orSet1.add("B");
orSet1.remove("B");
orSet2.add("B");
orSet2.add("C");
orSet2.remove("C");
orSet1.merge(orSet2);
assertTrue(orSet1.contains("A"));
assertTrue(orSet1.contains("B"));
}
}