public void TestRemoveAtomApply() { var seq1 = new KSEQReplicatedList <int>("alice"); var seq2 = new KSEQReplicatedList <int>("bob"); seq1.Add(42); var insertOp = seq1.lastOp; seq2.Apply(insertOp); Assert.AreEqual(seq1.Count, seq2.Count); Assert.AreEqual(seq1.Count, 1); Assert.AreEqual(seq1[0], seq2[0]); seq2.RemoveAt(0); var removeOp = seq2.lastOp; seq1.Apply(removeOp); Assert.AreEqual(seq1.Count, seq2.Count); Assert.AreEqual(seq1.Count, 0); Assert.Throws <ArgumentOutOfRangeException>(() => { var o = seq1[0]; }); Assert.Throws <ArgumentOutOfRangeException>(() => { var o = seq2[0]; }); }
public void TestCommutative() { var seq = new KSEQReplicatedList <string>("alice"); seq.Add("test"); Assert.AreEqual(1, seq.Count); var ident = new Ident(1, new[] { new Segment(0, "bob") }); var op1 = new KSEQOperation <string>() { id = ident, op = KSEQOperationTypes.Insert, realTime = DateTime.UtcNow.Ticks, replicaId = "bob", value = "hello" }; var op2 = new KSEQOperation <string>() { id = ident, op = KSEQOperationTypes.Remove, realTime = DateTime.UtcNow.Ticks, replicaId = "bob" }; seq.Apply(op2); Assert.AreEqual(1, seq.Count); seq.Apply(op1); Assert.AreEqual(1, seq.Count); }
public void TestAdd1000ItemsToEnd() { var seq = new KSEQReplicatedList <int>("test"); for (var i = 0; i < 1000; i++) { seq.Add(i); } Assert.AreEqual(1000, seq.Count); Assert.AreEqual(999, seq[seq.Count - 1]); }
public void TestRemoveIdentTwice() { var seq = new KSEQReplicatedList <int>("test"); seq.Add(42); var op1 = seq.lastOp; seq.Add(99); seq.RemoveAt(0); Assert.AreEqual(1, seq.Count); var op2 = new KSEQOperation <int>() { replicaId = "test", id = op1?.id, realTime = DateTime.UtcNow.Ticks, op = KSEQOperationTypes.Remove }; seq.Apply(op2); Assert.AreEqual(1, seq.Count); }
public void TestApplyInsertNoExistingAtom() { var seq1 = new KSEQReplicatedList <string>("alice"); var seq2 = new KSEQReplicatedList <string>("bob"); seq1.Add("a"); var op = seq1.lastOp; seq2.Apply(op); Assert.AreEqual(1, seq2.Count); Assert.AreEqual("a", seq2[0]); }
public void TestRemoveNonexistentAtomSilentlySucceeds() { var seq1 = new KSEQReplicatedList <string>("alice"); var seq2 = new KSEQReplicatedList <string>("bob"); seq1.Add("a"); seq2.Add("b"); seq1.RemoveAt(0); var op = seq1.lastOp; Assert.IsNotNull(op); seq2.Apply(op); Assert.AreEqual(1, seq2.Count); Assert.AreEqual("b", seq2[0]); }
public void TestRemoveAtom() { var seq = new KSEQReplicatedList <string>("test"); seq.Add("a"); Assert.AreEqual("a", seq[0]); seq.RemoveAt(0); Assert.AreEqual(KSEQOperationTypes.Remove, seq.lastOp?.op); seq = new KSEQReplicatedList <string>("test"); seq.Insert(0, "a"); seq.Insert(1, "b"); seq.Insert(2, "c"); Assert.AreEqual(3, seq.Count); seq.RemoveAt(1); Assert.AreEqual(seq.Count, 2); Assert.AreEqual(seq[1], "c"); }
public void TestApplyInsertAlreadyExists() { var seq = new KSEQReplicatedList <int>("test"); seq.Add(42); var op1 = seq.lastOp; Assert.AreEqual(1, seq.Count); Assert.AreEqual(42, seq[0]); var op2 = new KSEQOperation <int>() { id = op1?.id, op = KSEQOperationTypes.Insert, replicaId = "test", realTime = DateTime.UtcNow.Ticks, value = 99 }; seq.Apply(op2); Assert.AreEqual(1, seq.Count); }