コード例 #1
0
        public void ReceiveStructByValue()
        {
            var      c      = new STClass();
            var      s      = new STStruct(123, c);
            STStruct result = default(STStruct);

            using (var p = Pipeline.Create("ReceiveClassByRef", DeliveryPolicy.Unlimited, allowSchedulingOnExternalThreads: true))
            {
                var emitter  = p.CreateEmitter <STStruct>(this, "emitter");
                var receiver = p.CreateReceiver <STStruct>(
                    this,
                    msg =>
                {
                    result = msg.Data;
                },
                    "receiver");

                emitter.PipeTo(receiver, DeliveryPolicy.Unlimited);
                p.RunAsync();
                emitter.Post(s, DateTime.MinValue);
            }

            Assert.AreEqual(result.Value, 123);
            Assert.IsTrue(result.Reference.Same(c));
            Assert.AreNotEqual(result.Reference, c); // we expect a different instance
        }
コード例 #2
0
        public void SerializeClass()
        {
            var c     = new STClass();
            var clone = c.DeepClone();

            Assert.IsTrue(c.IsDeepClone(clone));

            var arr      = new[] { c, c, c };
            var arrClone = arr.DeepClone();

            for (int i = 0; i < arr.Length; i++)
            {
                Assert.IsTrue(arr[i].IsDeepClone(arrClone[i]));
            }

            var buf = new byte[256];

            clone = this.SerializationClone(c, buf);
            Assert.IsTrue(c.IsDeepClone(clone));

            arrClone = this.SerializationClone(arr, buf);
            for (int i = 0; i < arr.Length; i++)
            {
                Assert.IsTrue(arr[i].IsDeepClone(arrClone[i]));
            }
        }
コード例 #3
0
 public bool Same(STClass that)
 {
     return(this.count == that.count &&
            this.label == that.label &&
            this.foo == that.foo &&
            (this.buffer.Except(that.buffer).Count() == 0) &&
            (that.buffer.Except(this.buffer).Count() == 0));
 }
コード例 #4
0
ファイル: SerializationTester.cs プロジェクト: xiangzhi/psi
        public void ClearNotRequired()
        {
            // test various classes for which Clear() is a no-op
            var s1 = new STStructSimple(100);
            var s2 = new STStructSimple(100);

            Assert.IsTrue(s1.Equals(s2));
            Serializer.Clear(ref s1, new SerializationContext());
            Assert.IsTrue(s1.Equals(s2));

            var c1 = new STClass(FooEnum.One, 1, "one", new[] { 1.0 });
            var c2 = new STClass(FooEnum.One, 1, "one", new[] { 1.0 });

            Assert.IsTrue(c1.Same(c2));
            Serializer.Clear(ref c1, new SerializationContext());
            Assert.IsTrue(c1.Same(c2));

            var sc1 = new STStructComplex(100);
            var sc2 = new STStructComplex(100);

            Assert.IsTrue(sc1.Same(sc2));
            Serializer.Clear(ref sc1, new SerializationContext());
            Assert.IsTrue(sc1.Same(sc2));

            var arr = new STStructComplex[1];

            arr[0] = sc1;
            Assert.IsTrue(sc1.Same(sc2));
            Serializer.Clear(ref arr, new SerializationContext());
            Assert.IsTrue(sc1.Same(sc2));

            var list = new List <STStructComplex>();

            list.Add(sc1);
            Assert.IsTrue(sc1.Same(sc2));
            Serializer.Clear(ref list, new SerializationContext());
            Assert.IsTrue(sc1.Same(sc2));

            var dict = new Dictionary <int, STStructComplex>();

            dict.Add(1, sc1);
            Assert.IsTrue(sc1.Same(sc2));
            Serializer.Clear(ref dict, new SerializationContext());
            Assert.IsTrue(sc1.Same(sc2));
        }
コード例 #5
0
ファイル: EmitterTester.cs プロジェクト: sandrist/psi
        public void ReceiveClassByRef()
        {
            var c = new STClass();
            STClass result = null;
            using (var p = Pipeline.Create("ReceiveClassByRef", DeliveryPolicy.Unlimited, allowSchedulingOnExternalThreads: true))
            {
                var receiver = p.CreateReceiver<STClass>(
                    this,
                    msg =>
                    {
                        result = msg.Data;
                    },
                    "receiver");

                Generators.Return(p, c).PipeTo(receiver, Immediate);
                p.Run();
            }

            Assert.IsTrue(result.Same(c));
            Assert.AreEqual(result, c); // we expect the same instance
        }
コード例 #6
0
ファイル: EmitterTester.cs プロジェクト: sandrist/psi
        public void ReceiveClassByValue()
        {
            var c = new STClass();
            STClass result = null;
            using (var p = Pipeline.Create())
            {
                var receiver = p.CreateReceiver<STClass>(
                    this,
                    msg =>
                    {
                        result = msg.Data;
                    },
                    "receiver");

                Generators.Return(p, c).PipeTo(receiver, DeliveryPolicy.Unlimited);
                p.Run();
            }

            Assert.IsTrue(result.Same(c));
            Assert.AreNotEqual(result, c); // we expect a different instance
        }
コード例 #7
0
        public void ReceiveStructByRef()
        {
            var      c      = new STClass();
            var      s      = new STStruct(123, c);
            STStruct result = default(STStruct);

            using (var p = Pipeline.Create("ReceiveStructByRef", DeliveryPolicy.Unlimited, allowSchedulingOnExternalThreads: true))
            {
                var receiver = p.CreateReceiver <STStruct>(
                    this,
                    msg =>
                {
                    result = msg.Data;
                },
                    "receiver");

                Generators.Return(p, s).PipeTo(receiver, immediate);
                p.Run();
            }

            Assert.AreEqual(result.Value, 123);
            Assert.AreEqual(result.Reference, c); // we expect the same instance
        }
コード例 #8
0
        public void ReceiveClassByRef()
        {
            var     c      = new STClass();
            STClass result = null;

            using (var p = Pipeline.Create("ReceiveClassByRef", DeliveryPolicy.Unlimited, allowSchedulingOnExternalThreads: true))
            {
                var emitter  = p.CreateEmitter <STClass>(this, "emitter");
                var receiver = p.CreateReceiver <STClass>(
                    this,
                    msg =>
                {
                    result = msg.Data;
                },
                    "receiver");

                emitter.PipeTo(receiver, immediate);
                p.RunAsync();
                emitter.Post(c, DateTime.MinValue);
            }

            Assert.IsTrue(result.Same(c));
            Assert.AreEqual(result, c); // we expect the same instance
        }
コード例 #9
0
        public void ReceiveClassByValue()
        {
            var     c      = new STClass();
            STClass result = null;

            using (var p = Pipeline.Create())
            {
                var emitter  = p.CreateEmitter <STClass>(this, "emitter");
                var receiver = p.CreateReceiver <STClass>(
                    this,
                    msg =>
                {
                    result = msg.Data;
                },
                    "receiver");

                emitter.PipeTo(receiver, DeliveryPolicy.Unlimited);
                p.RunAsync();
                emitter.Post(c, DateTime.MinValue);
            }

            Assert.IsTrue(result.Same(c));
            Assert.AreNotEqual(result, c); // we expect a different instance
        }
コード例 #10
0
 public bool IsDeepClone(STClass that)
 {
     return(this.Same(that) && !ReferenceEquals(this.buffer, that.buffer));
 }
コード例 #11
0
 public STStructComplex(long v)
 {
     this.internalValue = new STClass();
     this.Value         = v;
 }
コード例 #12
0
ファイル: EmitterTester.cs プロジェクト: microsoft/psi
 internal STStruct(int value, STClass reference)
 {
     this.Value     = value;
     this.Reference = reference;
 }