public static void EqualsArray(string message, object oar1, object oar2)
        {
            if (oar1 == null || oar2 == null || !(oar1 is Array) || !(oar2 is Array))
            {
                Assert.AreEqual(oar1, oar2, message);
                return;
            }

            Array ar1 = (Array)oar1;
            Array ar2 = (Array)oar2;

            Assert.AreEqual(ar1.Length, ar2.Length, message + ".Length");

            for (int n = 0; n < ar1.Length; n++)
            {
                object av1 = ar1.GetValue(n);
                object av2 = ar2.GetValue(n);
                SerializationTest.AssertEquals(message + "[" + n + "]", av1, av2);
            }
        }
        public void CheckEquals(SomeValues obj, string context)
        {
            Assert.AreEqual(_type, obj._type, context + "._type");
            Assert.AreEqual(_type2, obj._type2, context + "._type2");
            Assert.AreEqual(_dbnull, obj._dbnull, context + "._dbnull");
            Assert.AreEqual(_assembly, obj._assembly, context + "._assembly");

            Assert.AreEqual(_intEnum, obj._intEnum, context + "._intEnum");
            Assert.AreEqual(_byteEnum, obj._byteEnum, context + "._byteEnum");
            Assert.AreEqual(_bool, obj._bool, context + "._bool");
            Assert.AreEqual(_bool2, obj._bool2, context + "._bool2");
            Assert.AreEqual(_byte, obj._byte, context + "._byte");
            Assert.AreEqual(_char, obj._char, context + "._char");
            Assert.AreEqual(_dateTime, obj._dateTime, context + "._dateTime");
            Assert.AreEqual(_decimal, obj._decimal, context + "._decimal");
            Assert.AreEqual(_double, obj._double, context + "._double");
            Assert.AreEqual(_short, obj._short, context = "._short");
            Assert.AreEqual(_int, obj._int, context + "._int");
            Assert.AreEqual(_long, obj._long, context + "._long");
            Assert.AreEqual(_sbyte, obj._sbyte, context + "._sbyte");
            Assert.AreEqual(_float, obj._float, context + "._float");
            Assert.AreEqual(_ushort, obj._ushort, context + "._ushort");
            Assert.AreEqual(_uint, obj._uint, context + "._uint");
            Assert.AreEqual(_ulong, obj._ulong, context + "._ulong");

            SerializationTest.EqualsArray(context + "._objects", _objects, obj._objects);
            SerializationTest.EqualsArray(context + "._strings", _strings, obj._strings);
            SerializationTest.EqualsArray(context + "._doubles", _doubles, obj._doubles);
            SerializationTest.EqualsArray(context + "._ints", _ints, obj._ints);
            SerializationTest.EqualsArray(context + "._simples", _simples, obj._simples);
            SerializationTest.EqualsArray(context + "._almostEmpty", _almostEmpty, obj._almostEmpty);

            SerializationTest.EqualsArray(context + "._emptyObjectArray", _emptyObjectArray, obj._emptyObjectArray);
            SerializationTest.EqualsArray(context + "._emptyTypeArray", _emptyTypeArray, obj._emptyTypeArray);
            SerializationTest.EqualsArray(context + "._emptySimpleArray", _emptySimpleArray, obj._emptySimpleArray);
            SerializationTest.EqualsArray(context + "._emptyIntArray", _emptyIntArray, obj._emptyIntArray);
            SerializationTest.EqualsArray(context + "._emptyStringArray", _emptyStringArray, obj._emptyStringArray);
            SerializationTest.EqualsArray(context + "._emptyPointArray", _emptyPointArray, obj._emptyPointArray);

            for (int i = 0; i < 2; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    for (int k = 0; k < 4; k++)
                    {
                        SerializationTest.AssertEquals("SomeValues._intsMulti[" + i + "," + j + "," + k + "]", _intsMulti[i, j, k], obj._intsMulti[i, j, k]);
                    }
                }
            }

            for (int i = 0; i < _intsJagged.Length; i++)
            {
                for (int j = 0; j < _intsJagged[i].Length; j++)
                {
                    SerializationTest.AssertEquals("SomeValues._intsJagged[" + i + "][" + j + "]", _intsJagged[i][j], obj._intsJagged[i][j]);
                }
            }

            for (int i = 0; i < 2; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    SerializationTest.AssertEquals("SomeValues._simplesMulti[" + i + "," + j + "]", _simplesMulti[i, j], obj._simplesMulti[i, j]);
                }
            }

            for (int i = 0; i < _simplesJagged.Length; i++)
            {
                SerializationTest.EqualsArray("SomeValues._simplesJagged", _simplesJagged[i], obj._simplesJagged[i]);
            }

            int acum = 0;

            SerializationTest.AssertEquals("SomeValues._sampleDelegate", _sampleDelegate("hi", this, ref acum), _int);
            SerializationTest.AssertEquals("SomeValues._sampleDelegate_bis", _sampleDelegate("hi", this, ref acum), obj._sampleDelegate("hi", this, ref acum));

            SerializationTest.AssertEquals("SomeValues._sampleDelegate2", _sampleDelegate2("hi", this, ref acum), (int)_simples[0].val);
            SerializationTest.AssertEquals("SomeValues._sampleDelegate2_bis", _sampleDelegate2("hi", this, ref acum), obj._sampleDelegate2("hi", this, ref acum));

            SerializationTest.AssertEquals("SomeValues._sampleDelegate3", _sampleDelegate3("hi", this, ref acum), (int)'x');
            SerializationTest.AssertEquals("SomeValues._sampleDelegate3_bis", _sampleDelegate3("hi", this, ref acum), obj._sampleDelegate3("hi", this, ref acum));

            SerializationTest.AssertEquals("SomeValues._sampleDelegateStatic", _sampleDelegateStatic("hi", this, ref acum), 99);
            SerializationTest.AssertEquals("SomeValues._sampleDelegateStatic_bis", _sampleDelegateStatic("hi", this, ref acum), obj._sampleDelegateStatic("hi", this, ref acum));

            int acum1 = 0;
            int acum2 = 0;

            _sampleDelegateCombined("hi", this, ref acum1);
            obj._sampleDelegateCombined("hi", this, ref acum2);

            SerializationTest.AssertEquals("_sampleDelegateCombined", acum1, _int + (int)_simples[0].val + (int)'x' + 99);
            SerializationTest.AssertEquals("_sampleDelegateCombined_bis", acum1, acum2);

            SerializationTest.AssertEquals("SomeValues._shared1", _shared1, _shared2);
            SerializationTest.AssertEquals("SomeValues._shared1_bis", _shared1, _shared3);

            _shared1.val = 'B';
            SerializationTest.AssertEquals("SomeValues._shared2", _shared2.val, 'A');
            SerializationTest.AssertEquals("SomeValues._shared3", _shared3.val, 'B');

            SerializationTest.AssertEquals("SomeValues._falseSerializable", _falseSerializable.field, 2);
        }