Ejemplo n.º 1
0
    public void DeepCloneTest(DeepCloneMethod method)
    {
        Where();

        DeepClone_ConstructorCount = 0;

        RootClass a = new RootClass();

        a.Int1 = Util.RandSInt31();
        a.Str1 = a.Int1.ToString();

        a.Test1 = new ElementClass2("Hello");
        a.Test2 = new ElementClass2("Hello");
        a.Test3 = a.Test2;

        a.Test1.TestList = new List <ElementClass2>();
        a.Test1.TestList.Add(a.Test2);

        a.Test2.TestList = new List <ElementClass2>();
        a.Test2.TestList.Add(a.Test1);

        int tmp = Util.RandSInt31();

        a._GetFieldReaderWriter(true).SetValue(a, "Int2", tmp);
        a._GetFieldReaderWriter(true).SetValue(a, "Str2", tmp.ToString());

        a.Dict = new Dictionary <int, ElementClass>();

        a.Element = new ElementClass {
            Int1 = 1, Str1 = "Hello", Root = null
        };

        a.Element.Element2 = new ElementClass2("Neko");

        for (int i = 0; i < 1000; i++)
        {
            ElementClass e = new ElementClass();
            e.Int1 = Util.RandSInt31();
            e.Str1 = e.Int1.ToString();

            e._GetFieldReaderWriter(true).SetValue(e, "Int2", tmp);
            e._GetFieldReaderWriter(true).SetValue(e, "Str2", tmp.ToString());

            e.Root = a;

            a.Dict.Add(i, e);
        }

        DeepClone_ConstructorCount = 0;

        RootClass b = a._CloneDeep(method);

        Assert.False(object.ReferenceEquals(b.Test1, b.Test2));
        Assert.True(object.ReferenceEquals(b.Test2, b.Test3));
        Assert.True(object.ReferenceEquals(b.Test1 !.TestList ![0], b.Test2));