Add LWW Element Set (Last Write Wins Element Set) (#4979)

This commit is contained in:
Niklas Hoefflin
2023-12-08 19:57:07 +01:00
committed by GitHub
parent 92131de377
commit b8b1dea38d
3 changed files with 247 additions and 0 deletions

View File

@ -0,0 +1,107 @@
package com.thealgorithms.datastructures.crdt;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
class LWWElementSetTest {
private LWWElementSet set;
private final Bias bias = Bias.ADDS;
@BeforeEach
void setUp() {
set = new LWWElementSet();
}
@Test
void testAdd() {
Element element = new Element("key1", 1, bias);
set.add(element);
assertTrue(set.lookup(element));
}
@Test
void testRemove() {
Element element = new Element("key1", 1, bias);
set.add(element);
set.remove(element);
assertFalse(set.lookup(element));
}
@Test
void testRemoveNonexistentElement() {
Element element = new Element("key1", 1, bias);
set.remove(element);
assertFalse(set.lookup(element));
}
@Test
void testLookupNonexistentElement() {
Element element = new Element("key1", 1, bias);
assertFalse(set.lookup(element));
}
@Test
void testCompareEqualSets() {
LWWElementSet otherSet = new LWWElementSet();
Element element = new Element("key1", 1, bias);
set.add(element);
otherSet.add(element);
assertTrue(set.compare(otherSet));
otherSet.add(new Element("key2", 2, bias));
assertTrue(set.compare(otherSet));
}
@Test
void testCompareDifferentSets() {
LWWElementSet otherSet = new LWWElementSet();
Element element1 = new Element("key1", 1, bias);
Element element2 = new Element("key2", 2, bias);
set.add(element1);
otherSet.add(element2);
assertFalse(set.compare(otherSet));
}
@Test
void testMerge() {
LWWElementSet otherSet = new LWWElementSet();
Element element1 = new Element("key1", 1, bias);
Element element2 = new Element("key2", 2, bias);
set.add(element1);
otherSet.add(element2);
set.merge(otherSet);
assertTrue(set.lookup(element1));
assertTrue(set.lookup(element2));
}
@Test
void testCompareTimestampsEqualTimestamps() {
LWWElementSet lwwElementSet = new LWWElementSet();
Element e1 = new Element("key1", 10, Bias.REMOVALS);
Element e2 = new Element("key1", 10, Bias.REMOVALS);
assertTrue(lwwElementSet.compareTimestamps(e1, e2));
e1 = new Element("key1", 10, Bias.ADDS);
e2 = new Element("key1", 10, Bias.ADDS);
assertFalse(lwwElementSet.compareTimestamps(e1, e2));
}
}