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); }
public void StructBase() { Redirect.ValueTypeCounter vtc = new Redirect.ValueTypeCounter(); int c = vtc.Val; vtc.Inc(); Assert.AreEqual(vtc.Val, c + 1); }
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)); }
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); }
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); }
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); } }
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; }