public static void Ref(ref ValueTypeCounter l, ref ValueTypeCounter r)
        {
            ValueTypeCounter t = l;

            l = r;
            r = t;
        }
 public static void PassByValue(ref ValueTypeCounter c1, RefTypeCounter c2)
 {
     c1.Inc();
     c2.Inc();
     CallInc(c1);
     CallInc(c2);
 }
Exemplo n.º 3
0
        public void StructBase()
        {
            Redirect.ValueTypeCounter vtc = new Redirect.ValueTypeCounter();
            int c = vtc.Val;

            vtc.Inc();
            Assert.AreEqual(vtc.Val, c + 1);
        }
Exemplo n.º 4
0
        public void VirtualFuncOfStruct()
        {
            Redirect.ValueTypeCounter c1 = new Redirect.ValueTypeCounter();
            c1.Inc();
            c1.Inc();
            Assert.AreEqual("ValueTypeCounter { 2 }", c1.ToString());

            Assert.AreEqual(c1.ToString() + ",hashcode:" + c1.GetHashCode(), Redirect.BaseTest.VirtualFuncOfStruct(c1));
        }
Exemplo n.º 5
0
 public void PassByValue()
 {
     Redirect.ValueTypeCounter c1 = new Redirect.ValueTypeCounter();
     Redirect.RefTypeCounter   c2 = new Redirect.RefTypeCounter();
     Redirect.BaseTest.PassByValue(ref c1, c2);
     //Console.WriteLine("c1.v:" + c1.Val + ",c2.v:" + c2.Val);
     Assert.AreEqual(2, c2.Val);
     Assert.AreEqual(1, c1.Val);
 }
        public static int Initobj(int a)
        {
            ValueTypeCounter c1 = new ValueTypeCounter();

            c1.Inc();
            ValueTypeCounter          c2 = new ValueTypeCounter(a);
            ValueTypeCounterContainer cc = new ValueTypeCounterContainer();

            cc.Init(a);
            return(c1.Val + c2.Val + cc.c.Val);
        }
Exemplo n.º 7
0
        public void UnboxBase()
        {
            Redirect.ValueTypeCounter c1 = new Redirect.ValueTypeCounter();
            Redirect.ValueTypeCounter c2 = new Redirect.ValueTypeCounter();
            c1.Inc();
            Assert.AreEqual(1, c1.CompareTo(c2));
            c2.Inc();
            Assert.AreEqual(0, c1.CompareTo(c2));
            c2.Inc();
            Assert.AreEqual(-1, c1.CompareTo(c2));

            Assert.That(() => c1.CompareTo(1), Throws.ArgumentException);
        }
Exemplo n.º 8
0
        public void RefBase()
        {
            //几个典型基础值类型的引用类型测试
            int  a1 = 2;
            long b1 = 5;
            int  c1 = 1;
            long r1 = BaseTest.Ref(ref a1, a1, ref b1, b1, out c1);

            int  a2 = 2;
            long b2 = 5;
            int  c2 = 1;
            long r2 = Redirect.BaseTest.Ref(ref a2, a2, ref b2, b2, out c2);

            Assert.AreEqual(a1, a2);
            Assert.AreEqual(b1, b2);
            Assert.AreEqual(c1, c2);
            Assert.AreEqual(r1, r2);

            //对象的引用测试
            object o1 = new object();
            object o2 = new object();

            object p1 = o1;
            object p2 = o2;

            Redirect.BaseTest.Ref(ref p1, ref p2);
            Assert.True(ReferenceEquals(o1, p2));
            Assert.True(ReferenceEquals(o2, p1));

            //结构体的引用测试
            Redirect.ValueTypeCounter v1 = new Redirect.ValueTypeCounter(1);
            Redirect.ValueTypeCounter v2 = new Redirect.ValueTypeCounter(2);

            Redirect.BaseTest.Ref(ref v1, ref v2);
            Assert.AreEqual(1, v2.Val);
            Assert.AreEqual(2, v1.Val);

            for (int i = 0; i < VirtualMachine.MAX_EVALUATION_STACK_SIZE; i++)
            {
                int  a = 2;
                long b = 5;
                int  c = 1;
                Redirect.BaseTest.Ref(ref a, a, ref b, b, out c);
            }
        }
Exemplo n.º 9
0
        public void Ldflda()
        {
            Redirect.ValueTypeCounter c = new Redirect.ValueTypeCounter();
            Redirect.BaseTest.Ldflda(ref c);
            Assert.AreEqual(10, c.Val);
            Redirect.BaseTest.Ldflda(ref c);
            c.Inc();
            Assert.AreEqual(21, c.Val);

            c = new Redirect.ValueTypeCounter();
            Redirect.ValueTypeCounterContainer cc = new Redirect.ValueTypeCounterContainer();
            cc.c = c;
            Redirect.BaseTest.Ldflda(ref cc);
            Assert.AreEqual(10, cc.c.i);
            Redirect.BaseTest.Ldflda(ref cc);
            cc.c.Inc();
            Assert.AreEqual(21, cc.c.Val);

            Redirect.W1 w1 = new Redirect.W1()
            {
                F = new Redirect.ValueTypeCounter()
            };

            Redirect.W2 w2 = new Redirect.W2()
            {
                F = w1
            };

            Redirect.W3 w3 = new Redirect.W3()
            {
                F = w2
            };

            Redirect.BaseTest.Ldflda(ref w1);
            Assert.AreEqual(10, w1.F.i);

            Redirect.BaseTest.Ldflda(ref w2);
            Assert.AreEqual(10, w2.F.F.i);

            Redirect.BaseTest.Ldflda(ref w3);
            Assert.AreEqual(10, w3.F.F.F.i);

            Assert.AreEqual(10, Redirect.BaseTest.Ldflda_m(ref w3));
        }
 public static int Ldflda(ref ValueTypeCounter c)
 {
     intref(ref c.i);
     return(c.i);
 }
 public static string VirtualFuncOfStruct(ValueTypeCounter vtc)
 {
     return(vtc.ToString() + ",hashcode:" + vtc.GetHashCode());
 }
 static void CallInc(ValueTypeCounter counter)
 {
     counter.Inc();
 }
 public void Init(int a)
 {
     c   = new ValueTypeCounter();
     c.i = a;
 }