public void TestRandomSingleReplica() { var random = new Random(); var alice = new KSEQReplicatedList <int>("alice"); var bob = new KSEQReplicatedList <int>("bob"); var ops = Enumerable.Range(0, 1000).Select(i => { alice.Insert(random.Next(i), i); return(alice.lastOp); }).Concat(Enumerable.Range(0, 500) .Select(i => { alice.RemoveAt(random.Next(1000 - i)); return(alice.lastOp); })).ToArray(); Shuffle(ops, random); foreach (var op in ops) { if (op != null) { bob.Apply(op.Value); } } Assert.AreEqual(alice.Count, bob.Count); Assert.AreEqual(500, alice.Count); Assert.IsTrue(alice.ToArray().SequenceEqual(bob.ToArray())); }
public void TestRandomMultiReplica() { var random = new Random(); var alice = new KSEQReplicatedList <int>("alice"); var bob = new KSEQReplicatedList <int>("bob"); KSEQOperation <int>?[] GenerateOps(KSEQReplicatedList <int> replica) { return(Enumerable.Range(0, 1000).Select(i => { replica.Insert(random.Next(i), i); return replica.lastOp; }).Concat(Enumerable.Range(0, 500) .Select(i => { replica.RemoveAt(random.Next(1000 - i)); return replica.lastOp; })).ToArray()); } var aliceOps = GenerateOps(alice); var bobOps = GenerateOps(bob); Shuffle(aliceOps, random); Shuffle(bobOps, random); foreach (var op in aliceOps) { if (op != null) { bob.Apply(op.Value); } } foreach (var op in bobOps) { if (op != null) { alice.Apply(op.Value); } } Assert.AreEqual(alice.Count, bob.Count); Assert.IsTrue(alice.ToArray().SequenceEqual(bob.ToArray())); }