Beispiel #1
0
        public void Rethrow()
        {
            var val = new TestRef();
            var con = new Dictionary <Type, IPacketConverter> {
                [typeof(TestRef)] = new TestConverter()
            };

            try
            {
                var buf = new PacketRawWriter(con).SetValue(val);
                Assert.Fail();
            }
            catch (PacketException ex) when(ex.ErrorCode == PacketError.ConvertError && ex.InnerException.Message == TestConverter._BytesErr)
            {
                // ignore
            }

            try
            {
                var res = new PacketRawReader(new byte[4], con).GetValue <TestRef>();
            }
            catch (Exception ex) when(ex.Message == TestConverter._ValueErr)
            {
                // ignore
            }
        }
        /// <summary>
        /// 测试的运行方法
        /// </summary>
        public static void testRun()
        {
            Console.WriteLine("test start");
            int       totalCount = 100000000;
            Stopwatch sw         = new Stopwatch();

            sw.Start();
            for (int i = 0; i < totalCount; i++)
            {
                TestRef temp = new TestRef()
                {
                    Id = i, Name = "test"
                };
            }
            sw.Stop();
            Console.WriteLine($"引用类型实例化测试消耗:{sw.ElapsedMilliseconds}");
            sw.Reset();
            sw.Start();

            for (int i = 0; i < totalCount; i++)
            {
                TestVal temp = new TestVal()
                {
                    Id = i, Name = "test"
                };
            }
            sw.Stop();
            Console.WriteLine($"值类型实例化测试消耗:{sw.ElapsedMilliseconds}");
            Console.Read();
        }
    static void Main(string[] args)
    {
        TestRef t = new TestRef();

        t.Something = "Foo";

        DoSomething(t);
        Console.WriteLine(t.Something);
    }
Beispiel #4
0
        public void TestOrDefaultReferenceType()
        {
            var value    = new TestRef(1);
            var instance = Maybe.Just(value);
            var result   = instance.GetValueOrDefault();

            Assert.IsNotNull(result);
            Assert.AreEqual(value, result);
        }
Beispiel #5
0
        public void TestCreateReferenceValue()
        {
            var value    = new TestRef();
            var instance = Maybe.Create(value);

            instance.AssertJust(value);

            value    = null;
            instance = Maybe.Create(value);
            instance.AssertNothing();
        }
Beispiel #6
0
        public void TestRightNull()
        {
            TestRef value = null;

            Assert.Throws <ArgumentNullException>(() =>
            {
                var instance = new Either <string, TestRef>(value);
            });

            Assert.Throws <ArgumentNullException>(() =>
            {
                var instance = new Either <string, string>(right: null);
            });
        }
Beispiel #7
0
        public void TestEqualsJustReference()
        {
            var value = new TestRef();

            var instance1 = Maybe.Just(value);
            var instance2 = Maybe.Just(value);

            Assert.AreEqual(instance1, instance2);

            var value2 = new TestRef();

            instance1 = Maybe.Just(value2);

            Assert.AreNotEqual(instance1, instance2);
        }
Beispiel #8
0
    static void Main(string[] args)
    {
        TestRef t1 = new TestRef();

        t1.FirstName = "vinay";
        t1.Something = "Foo";
        DoSomething1(t1);
        Console.WriteLine(t1.FirstName + ":" + t1.Something);   //vinay:Not just a changed t, but a completely different TestRef object

        TestRef t2 = new TestRef();

        t2.FirstName = "vinay";
        t2.Something = "Foo";
        DoSomething2(t2);
        Console.WriteLine(t2.FirstName + ":" + t2.Something);    //vinay:Foo

        TestRef t3 = new TestRef();

        t3.FirstName = "vinay";
        t3.Something = "Foo";
        DoSomething3(ref t3);
        Console.WriteLine(t3.FirstName + ":" + t3.Something);    //vinay:Not just a changed t, but a completely different TestRef object

        TestRef t4 = new TestRef();

        t4.FirstName = "vinay";
        t4.Something = "Foo";
        DoSomething4(ref t4);
        Console.WriteLine(t4.FirstName + ":" + t4.Something);    //vijay:Not just a changed t, but a completely different TestRef object

        //TestRef t5 = new TestRef();
        //t5.FirstName = "vinay";
        //t5.Something = "Foo";
        //DoSomething5(out t5);
        //Console.WriteLine(t5.FirstName + ":" + t5.Something);
        //compile error at method DoSomething5: The out parameter 't' must be assigned to before control leaves the current method  delete;Use of unassigned out parameter 't' delete

        TestRef t6 = new TestRef();

        t6.FirstName = "vinay";
        t6.Something = "Foo";
        DoSomething6(out t6);
        Console.WriteLine(t6.FirstName + ":" + t6.Something);    //vijay:Not just a changed t, but a completely different TestRef object

        Console.ReadKey();
    }
Beispiel #9
0
        public void TestEqualsReference()
        {
            var value     = new TestRef();
            var instance1 = new Either <int, TestRef>(value);
            var instance2 = new Either <int, TestRef>(value);

            Assert.AreEqual(instance1, instance2);

            var value2 = new TestRef();

            instance1 = new Either <int, TestRef>(value2);
            Assert.AreNotEqual(instance1, instance2);

            var instance3 = new Either <TestRef, TestRef>(left: value);
            var instance4 = new Either <TestRef, TestRef>(right: value);

            Assert.AreNotEqual(instance3, instance4);
        }
    public static void Main()
    {
        //构造引用类型实例,其内存空间 在托管堆上 分配
        //tr的值是对TestRef类的实例的引用
        TestRef tr = new TestRef(1, 2);

        //构造值类型实例,其内存空间 在线程栈上 分配
        //tv的值就是TestVal结构的实例化本身
        TestVal tv = new TestVal(1, 2);

        //输出tr,tv的值
        System.Console.WriteLine("tr.a 的值是 " + tr.a);
        System.Console.WriteLine("tr.b 的值是 " + tr.b);
        System.Console.WriteLine("tv.a 的值是 " + tv.a);
        System.Console.WriteLine("tv.b 的值是 " + tv.b);

        //引用类型的赋值:将tr的值所指向的对象地址复制给tr2
        //此时tr和tr2 指向同一个对象,并不需要在托管堆上重新分配空间
        TestRef tr2 = tr;

        //值类型的赋值:在线程上重新分配空间,并将tv的值复制给tv2
        //此后tv和tv2相互独立
        TestVal tv2 = tv;

        //tr2所指对象的字段赋值,会改变tr
        tr2.a = 3;

        //tv2字段的修改不影响tv
        tv2.a = 3;

        System.Console.WriteLine("---------------------");
        System.Console.WriteLine("进行 tr2.a=3  tv2.a=3 后:");
        System.Console.WriteLine("tr.a 的值是 " + tr.a);
        System.Console.WriteLine("tr.b 的值是 " + tr.b);
        System.Console.WriteLine("tr2.a 的值是 " + tr2.a);
        System.Console.WriteLine("tr2.b 的值是 " + tr2.b);
        System.Console.WriteLine("tv.a 的值是 " + tv.a);
        System.Console.WriteLine("tv.b 的值是 " + tv.b);
        System.Console.WriteLine("tv2.a 的值是 " + tv2.a);
        System.Console.WriteLine("tv2.b 的值是 " + tv2.b);

        Console.ReadLine();
    }
Beispiel #11
0
    public void Test()
    {
        // 测试用例
        // 测试正常使用
        Console.WriteLine("测试正常使用");
        m_eventMgr.SyncAdd(1, Callback1);
        m_eventMgr.Dispather(1, null);
        m_eventMgr.SyncRemove(1, Callback1);
        m_eventMgr.Dispather(1, null);
        Console.WriteLine("测试正常使用end");
        // 测试用例
        // 同步删除
        // 即在callbacklist调用中也能删除自己在list中的callback
        Console.WriteLine("测试同步删除自己");
        m_eventMgr.SyncAdd(2, Callback2);
        m_eventMgr.Dispather(2, null);
        m_eventMgr.Dispather(2, null);
        Console.WriteLine("测试同步删除自己end");

        // 测试用例
        // 同步删除
        // 测试删除当前信号队列后面的callback


        // 测试用例
        // 弱引用
        // 即在调用时检查gc情况,不调用已经被gc的对象
        Console.WriteLine("测试弱引用");
        TestRef tmp = new TestRef();

        m_eventMgr.SyncAdd(4, tmp.Callback4);
        m_eventMgr.Dispather(4, null);
        tmp = null;
        GC.Collect();
        m_eventMgr.Dispather(4, null);
        Console.WriteLine("测试弱引用end");

        Console.Read();
    }
 static public void DoSomething(TestRef t)
 {
     t           = new TestRef();
     t.Something = "Bar";
 }
 public void Done(TestRef id)
 {
 }
Beispiel #14
0
 //static void DoSomething5(out TestRef t)
 //{
 //    t.Something = "Not just a changed t, but a completely different TestRef object";
 //}
 static void DoSomething6(out TestRef t)
 {
     t           = new TestRef();
     t.FirstName = "vijay";
     t.Something = "Not just a changed t, but a completely different TestRef object";
 }
Beispiel #15
0
 static void DoSomething3(ref TestRef t)
 {
     t.Something = "Not just a changed t, but a completely different TestRef object";
 }
 public void Done(TestRef id)
 {
 }