コード例 #1
0
        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()));
        }
コード例 #2
0
        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()));
        }