|  | /* | 
|  | * Licensed to the Apache Software Foundation (ASF) under one or more | 
|  | * contributor license agreements.  See the NOTICE file distributed with | 
|  | * this work for additional information regarding copyright ownership. | 
|  | * The ASF licenses this file to You under the Apache License, Version 2.0 | 
|  | * (the "License"); you may not use this file except in compliance with | 
|  | * the License.  You may obtain a copy of the License at | 
|  | * | 
|  | *      http://www.apache.org/licenses/LICENSE-2.0 | 
|  | * | 
|  | * Unless required by applicable law or agreed to in writing, software | 
|  | * distributed under the License is distributed on an "AS IS" BASIS, | 
|  | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | * See the License for the specific language governing permissions and | 
|  | * limitations under the License. | 
|  | */ | 
|  |  | 
|  | using System; | 
|  | using System.IO; | 
|  | using Xunit; | 
|  | using PdxTests; | 
|  | using System.Collections; | 
|  | using System.Collections.Generic; | 
|  | using Xunit.Abstractions; | 
|  | using System.Reflection; | 
|  | using System.Linq; | 
|  |  | 
|  | namespace Apache.Geode.Client.IntegrationTests | 
|  | { | 
|  | public class ApartmentLocation | 
|  | { | 
|  | int _aptNumber; | 
|  | string _street; | 
|  | string _city; | 
|  |  | 
|  | public ApartmentLocation() | 
|  | { } | 
|  | public override string ToString() | 
|  | { | 
|  | return _aptNumber + " :" + _street + " : " + _city; | 
|  | } | 
|  | public ApartmentLocation(int aptN, string street, string city) | 
|  | { | 
|  | _aptNumber = aptN; | 
|  | _street = street; | 
|  | _city = city; | 
|  | } | 
|  |  | 
|  | public override bool Equals(object obj) | 
|  | { | 
|  | if (obj == null) | 
|  | return false; | 
|  | ApartmentLocation other = obj as ApartmentLocation; | 
|  | if (other == null) | 
|  | return false; | 
|  | if (_aptNumber == other._aptNumber | 
|  | && _street == other._street | 
|  | && _city == other._city) | 
|  | return true; | 
|  | return false; | 
|  | } | 
|  | public override int GetHashCode() | 
|  | { | 
|  | return base.GetHashCode(); | 
|  | } | 
|  | } | 
|  |  | 
|  | public class PdxTypesReflectionTest | 
|  | { | 
|  | char m_char; | 
|  | bool m_bool; | 
|  | sbyte m_byte; | 
|  | sbyte m_sbyte; | 
|  | short m_int16; | 
|  | short m_uint16; | 
|  | Int32 m_int32; | 
|  | Int32 m_uint32; | 
|  | long m_long; | 
|  | Int64 m_ulong; | 
|  | float m_float; | 
|  | double m_double; | 
|  |  | 
|  | string m_string; | 
|  |  | 
|  | bool[] m_boolArray; | 
|  | byte[] m_byteArray; | 
|  | byte[] m_sbyteArray; | 
|  |  | 
|  | char[] m_charArray; | 
|  |  | 
|  | DateTime m_dateTime; | 
|  |  | 
|  | Int16[] m_int16Array; | 
|  | Int16[] m_uint16Array; | 
|  |  | 
|  | Int32[] m_int32Array; | 
|  | Int32[] m_uint32Array; | 
|  |  | 
|  | long[] m_longArray; | 
|  | Int64[] m_ulongArray; | 
|  |  | 
|  | float[] m_floatArray; | 
|  | double[] m_doubleArray; | 
|  |  | 
|  | byte[][] m_byteByteArray; | 
|  |  | 
|  | string[] m_stringArray; | 
|  |  | 
|  | List<object> m_arraylist = new List<object>(); | 
|  | IDictionary<object, object> m_map = new Dictionary<object, object>(); | 
|  | Hashtable m_hashtable = new Hashtable(); | 
|  | ArrayList m_vector = new ArrayList(); | 
|  |  | 
|  | CacheableHashSet m_chs = CacheableHashSet.Create(); | 
|  | CacheableLinkedHashSet m_clhs = CacheableLinkedHashSet.Create(); | 
|  |  | 
|  | byte[] m_byte252 = new byte[252]; | 
|  | byte[] m_byte253 = new byte[253]; | 
|  | byte[] m_byte65535 = new byte[65535]; | 
|  | byte[] m_byte65536 = new byte[65536]; | 
|  |  | 
|  | pdxEnumTest m_pdxEnum = pdxEnumTest.pdx3; | 
|  | ApartmentLocation[] m_address = new ApartmentLocation[10]; | 
|  |  | 
|  | LinkedList<Object> m_LinkedList = new LinkedList<Object>(); | 
|  |  | 
|  | public void Init() | 
|  | { | 
|  | m_char = 'C'; | 
|  | m_bool = true; | 
|  | m_byte = 0x74; | 
|  | m_sbyte = 0x67; | 
|  | m_int16 = 0xab; | 
|  | m_uint16 = 0x2dd5; | 
|  | m_int32 = 0x2345abdc; | 
|  | m_uint32 = 0x2a65c434; | 
|  | m_long = 324897980; | 
|  | m_ulong = 238749898; | 
|  | m_float = 23324.324f; | 
|  | m_double = 3243298498d; | 
|  |  | 
|  | m_string = "gfestring"; | 
|  |  | 
|  | m_boolArray = new bool[] { true, false, true }; | 
|  | m_byteArray = new byte[] { 0x34, 0x64 }; | 
|  | m_sbyteArray = new byte[] { 0x34, 0x64 }; | 
|  |  | 
|  | m_charArray = new char[] { 'c', 'v' }; | 
|  |  | 
|  | long ticks = 634460644691540000L; | 
|  | m_dateTime = new DateTime(ticks); | 
|  |  | 
|  | m_int16Array = new short[] { 0x2332, 0x4545 }; | 
|  | m_uint16Array = new short[] { 0x3243, 0x3232 }; | 
|  |  | 
|  | m_int32Array = new int[] { 23, 676868, 34343, 2323 }; | 
|  | m_uint32Array = new int[] { 435, 234324, 324324, 23432432 }; | 
|  |  | 
|  | m_longArray = new long[] { 324324L, 23434545L }; | 
|  | m_ulongArray = new Int64[] { 3245435, 3425435 }; | 
|  |  | 
|  | m_floatArray = new float[] { 232.565f, 2343254.67f }; | 
|  | m_doubleArray = new double[] { 23423432d, 4324235435d }; | 
|  |  | 
|  | m_byteByteArray = new byte[][]{new byte[] {0x23}, | 
|  | new byte[]{0x34, 0x55} | 
|  | }; | 
|  |  | 
|  | m_stringArray = new string[] { "one", "two" }; | 
|  |  | 
|  | m_arraylist = new List<object>(); | 
|  | m_arraylist.Add(1); | 
|  | m_arraylist.Add(2); | 
|  |  | 
|  | m_LinkedList = new LinkedList<Object>(); | 
|  | m_LinkedList.AddFirst("Item1"); | 
|  | m_LinkedList.AddLast("Item2"); | 
|  | m_LinkedList.AddLast("Item3"); | 
|  |  | 
|  |  | 
|  | m_map = new Dictionary<object, object>(); | 
|  | m_map.Add(1, 1); | 
|  | m_map.Add(2, 2); | 
|  |  | 
|  | m_hashtable = new Hashtable(); | 
|  | m_hashtable.Add(1, "1111111111111111"); | 
|  | m_hashtable.Add(2, "2222222222221111111111111111"); | 
|  |  | 
|  | m_vector = new ArrayList(); | 
|  | m_vector.Add(1); | 
|  | m_vector.Add(2); | 
|  | m_vector.Add(3); | 
|  |  | 
|  | m_chs.Add(1); | 
|  | m_clhs.Add(1); | 
|  | m_clhs.Add(2); | 
|  | m_pdxEnum = pdxEnumTest.pdx3; | 
|  |  | 
|  | m_address = new ApartmentLocation[10]; | 
|  |  | 
|  | for (int i = 0; i < m_address.Length; i++) | 
|  | { | 
|  | m_address[i] = new ApartmentLocation(i, "street" + i, "city" + i); | 
|  | } | 
|  | } | 
|  |  | 
|  | public PdxTypesReflectionTest() | 
|  | { | 
|  |  | 
|  |  | 
|  | } | 
|  |  | 
|  | public PdxTypesReflectionTest(bool initialize) | 
|  | { | 
|  | if (initialize) | 
|  | Init(); | 
|  |  | 
|  | } | 
|  |  | 
|  | public override bool Equals(object obj) | 
|  | { | 
|  | if (obj == null) | 
|  | return false; | 
|  |  | 
|  | PdxTypesReflectionTest other = obj as PdxTypesReflectionTest; | 
|  |  | 
|  | if (other == null) | 
|  | return false; | 
|  |  | 
|  | this.checkEquality(other); | 
|  | return true; | 
|  | } | 
|  | public override int GetHashCode() | 
|  | { | 
|  | return base.GetHashCode(); | 
|  | } | 
|  | #region IPdxSerializable Members | 
|  | byte[][] compareByteByteArray(byte[][] baa, byte[][] baa2) | 
|  | { | 
|  | if (baa.Length == baa2.Length) | 
|  | { | 
|  | int i = 0; | 
|  | while (i < baa.Length) | 
|  | { | 
|  | compareByteArray(baa[i], baa2[i]); | 
|  | i++; | 
|  | } | 
|  | if (i == baa2.Length) | 
|  | return baa2; | 
|  | } | 
|  |  | 
|  | throw new IllegalStateException("Not got expected value for type: " + baa2.GetType().ToString()); | 
|  | } | 
|  | bool compareBool(bool b, bool b2) | 
|  | { | 
|  | if (b == b2) | 
|  | return b; | 
|  | throw new IllegalStateException("Not got expected value for type: " + b2.GetType().ToString()); | 
|  | } | 
|  | bool[] compareBoolArray(bool[] a, bool[] a2) | 
|  | { | 
|  | if (a.Length == a2.Length) | 
|  | { | 
|  | int i = 0; | 
|  | while (i < a.Length) | 
|  | { | 
|  | if (a[i] != a2[i]) | 
|  | break; | 
|  | else | 
|  | i++; | 
|  | } | 
|  | if (i == a2.Length) | 
|  | return a2; | 
|  | } | 
|  |  | 
|  | throw new IllegalStateException("Not got expected value for type: " + a2.GetType().ToString()); | 
|  | } | 
|  | byte compareByte(byte b, byte b2) | 
|  | { | 
|  | if (b == b2) | 
|  | return b; | 
|  | throw new IllegalStateException("Not got expected value for type: " + b2.GetType().ToString()); | 
|  | } | 
|  | byte[] compareByteArray(byte[] a, byte[] a2) | 
|  | { | 
|  | if (a.Length == a2.Length) | 
|  | { | 
|  | int i = 0; | 
|  | while (i < a.Length) | 
|  | { | 
|  | if (a[i] != a2[i]) | 
|  | break; | 
|  | else | 
|  | i++; | 
|  | } | 
|  | if (i == a2.Length) | 
|  | return a2; | 
|  | } | 
|  |  | 
|  | throw new IllegalStateException("Not got expected value for type: " + a2.GetType().ToString()); | 
|  | } | 
|  | char[] compareCharArray(char[] a, char[] a2) | 
|  | { | 
|  | if (a.Length == a2.Length) | 
|  | { | 
|  | int i = 0; | 
|  | while (i < a.Length) | 
|  | { | 
|  | if (a[i] != a2[i]) | 
|  | break; | 
|  | else | 
|  | i++; | 
|  | } | 
|  | if (i == a2.Length) | 
|  | return a2; | 
|  | } | 
|  |  | 
|  | throw new IllegalStateException("Not got expected value for type: " + a2.GetType().ToString()); | 
|  | } | 
|  | List<object> compareCompareCollection(List<object> a, List<object> a2) | 
|  | { | 
|  | if (a.Count == a2.Count) | 
|  | { | 
|  | int i = 0; | 
|  | while (i < a.Count) | 
|  | { | 
|  | if (!a[i].Equals(a2[i])) | 
|  | break; | 
|  | else | 
|  | i++; | 
|  | } | 
|  | if (i == a2.Count) | 
|  | return a2; | 
|  | } | 
|  |  | 
|  | throw new IllegalStateException("Not got expected value for type: " + a2.GetType().ToString()); | 
|  | } | 
|  |  | 
|  | LinkedList<object> compareCompareCollection(LinkedList<object> a, LinkedList<object> a2) | 
|  | { | 
|  | if (a.Count == a2.Count) | 
|  | { | 
|  | LinkedList<Object>.Enumerator e1 = a.GetEnumerator(); | 
|  | LinkedList<Object>.Enumerator e2 = a2.GetEnumerator(); | 
|  | while (e1.MoveNext() && e2.MoveNext()) | 
|  | { | 
|  | if (!e1.Current.Equals(e2.Current)) | 
|  | break; | 
|  | } | 
|  | return a2; | 
|  | } | 
|  | throw new IllegalStateException("Not got expected value for type: " + a2.GetType().ToString()); | 
|  | } | 
|  |  | 
|  | DateTime compareData(DateTime b, DateTime b2) | 
|  | { | 
|  | //TODO: | 
|  | // return b; | 
|  | if ((b.Ticks / 10000L) == (b2.Ticks / 10000L)) | 
|  | return b; | 
|  | throw new IllegalStateException("Not got expected value for type: " + b2.GetType().ToString()); | 
|  | } | 
|  | Double compareDouble(Double b, Double b2) | 
|  | { | 
|  | if (b == b2) | 
|  | return b; | 
|  | throw new IllegalStateException("Not got expected value for type: " + b2.GetType().ToString()); | 
|  | } | 
|  | double[] compareDoubleArray(double[] a, double[] a2) | 
|  | { | 
|  | if (a.Length == a2.Length) | 
|  | { | 
|  | int i = 0; | 
|  | while (i < a.Length) | 
|  | { | 
|  | if (a[i] != a2[i]) | 
|  | break; | 
|  | else | 
|  | i++; | 
|  | } | 
|  | if (i == a2.Length) | 
|  | return a2; | 
|  | } | 
|  |  | 
|  | throw new IllegalStateException("Not got expected value for type: " + a2.GetType().ToString()); | 
|  | } | 
|  | float compareFloat(float b, float b2) | 
|  | { | 
|  | if (b == b2) | 
|  | return b; | 
|  | throw new IllegalStateException("Not got expected value for type: " + b2.GetType().ToString()); | 
|  | } | 
|  | float[] compareFloatArray(float[] a, float[] a2) | 
|  | { | 
|  | if (a.Length == a2.Length) | 
|  | { | 
|  | int i = 0; | 
|  | while (i < a.Length) | 
|  | { | 
|  | if (a[i] != a2[i]) | 
|  | break; | 
|  | else | 
|  | i++; | 
|  | } | 
|  | if (i == a2.Length) | 
|  | return a2; | 
|  | } | 
|  |  | 
|  | throw new IllegalStateException("Not got expected value for type: " + a2.GetType().ToString()); | 
|  | } | 
|  | Int16 compareInt16(Int16 b, Int16 b2) | 
|  | { | 
|  | if (b == b2) | 
|  | return b; | 
|  | throw new IllegalStateException("Not got expected value for type: " + b2.GetType().ToString()); | 
|  | } | 
|  | Int32 compareInt32(Int32 b, Int32 b2) | 
|  | { | 
|  | if (b == b2) | 
|  | return b; | 
|  | throw new IllegalStateException("Not got expected value for type: " + b2.GetType().ToString()); | 
|  | } | 
|  | Int64 compareInt64(Int64 b, Int64 b2) | 
|  | { | 
|  | if (b == b2) | 
|  | return b; | 
|  | throw new IllegalStateException("Not got expected value for type: " + b2.GetType().ToString()); | 
|  | } | 
|  | Int32[] compareIntArray(Int32[] a, Int32[] a2) | 
|  | { | 
|  | if (a.Length == a2.Length) | 
|  | { | 
|  | int i = 0; | 
|  | while (i < a.Length) | 
|  | { | 
|  | if (a[i] != a2[i]) | 
|  | break; | 
|  | else | 
|  | i++; | 
|  | } | 
|  | if (i == a2.Length) | 
|  | return a2; | 
|  | } | 
|  |  | 
|  | throw new IllegalStateException("Not got expected value for type: " + a2.GetType().ToString()); | 
|  | } | 
|  | long[] compareLongArray(long[] a, long[] a2) | 
|  | { | 
|  | if (a.Length == a2.Length) | 
|  | { | 
|  | int i = 0; | 
|  | while (i < a.Length) | 
|  | { | 
|  | if (a[i] != a2[i]) | 
|  | break; | 
|  | else | 
|  | i++; | 
|  | } | 
|  | if (i == a2.Length) | 
|  | return a2; | 
|  | } | 
|  |  | 
|  | throw new IllegalStateException("Not got expected value for type: " + a2.GetType().ToString()); | 
|  | } | 
|  | Int16[] compareSHortArray(Int16[] a, Int16[] a2) | 
|  | { | 
|  | if (a.Length == a2.Length) | 
|  | { | 
|  | int i = 0; | 
|  | while (i < a.Length) | 
|  | { | 
|  | if (a[i] != a2[i]) | 
|  | break; | 
|  | else | 
|  | i++; | 
|  | } | 
|  | if (i == a2.Length) | 
|  | return a2; | 
|  | } | 
|  |  | 
|  | throw new IllegalStateException("Not got expected value for type: " + a2.GetType().ToString()); | 
|  | } | 
|  | sbyte compareSByte(sbyte b, sbyte b2) | 
|  | { | 
|  | if (b == b2) | 
|  | return b; | 
|  | throw new IllegalStateException("Not got expected value for type: " + b2.GetType().ToString()); | 
|  | } | 
|  | sbyte[] compareSByteArray(sbyte[] a, sbyte[] a2) | 
|  | { | 
|  | if (a.Length == a2.Length) | 
|  | { | 
|  | int i = 0; | 
|  | while (i < a.Length) | 
|  | { | 
|  | if (a[i] != a2[i]) | 
|  | break; | 
|  | else | 
|  | i++; | 
|  | } | 
|  | if (i == a2.Length) | 
|  | return a2; | 
|  | } | 
|  |  | 
|  | throw new IllegalStateException("Not got expected value for type: " + a2.GetType().ToString()); | 
|  | } | 
|  | string[] compareStringArray(string[] a, string[] a2) | 
|  | { | 
|  | if (a.Length == a2.Length) | 
|  | { | 
|  | int i = 0; | 
|  | while (i < a.Length) | 
|  | { | 
|  | if (a[i] != a2[i]) | 
|  | break; | 
|  | else | 
|  | i++; | 
|  | } | 
|  | if (i == a2.Length) | 
|  | return a2; | 
|  | } | 
|  |  | 
|  | throw new IllegalStateException("Not got expected value for type: " + a2.GetType().ToString()); | 
|  | } | 
|  | UInt16 compareUInt16(UInt16 b, UInt16 b2) | 
|  | { | 
|  | if (b == b2) | 
|  | return b; | 
|  | throw new IllegalStateException("Not got expected value for type: " + b2.GetType().ToString()); | 
|  | } | 
|  | UInt32 compareUInt32(UInt32 b, UInt32 b2) | 
|  | { | 
|  | if (b == b2) | 
|  | return b; | 
|  | throw new IllegalStateException("Not got expected value for type: " + b2.GetType().ToString()); | 
|  | } | 
|  | UInt64 compareUint64(UInt64 b, UInt64 b2) | 
|  | { | 
|  | if (b == b2) | 
|  | return b; | 
|  | throw new IllegalStateException("Not got expected value for type: " + b2.GetType().ToString()); | 
|  | } | 
|  | UInt32[] compareUnsignedIntArray(UInt32[] a, UInt32[] a2) | 
|  | { | 
|  | if (a.Length == a2.Length) | 
|  | { | 
|  | int i = 0; | 
|  | while (i < a.Length) | 
|  | { | 
|  | if (a[i] != a2[i]) | 
|  | break; | 
|  | else | 
|  | i++; | 
|  | } | 
|  | if (i == a2.Length) | 
|  | return a2; | 
|  | } | 
|  |  | 
|  | throw new IllegalStateException("Not got expected value for type: " + a2.GetType().ToString()); | 
|  | } | 
|  | UInt64[] compareUnsignedLongArray(UInt64[] a, UInt64[] a2) | 
|  | { | 
|  | if (a.Length == a2.Length) | 
|  | { | 
|  | int i = 0; | 
|  | while (i < a.Length) | 
|  | { | 
|  | if (a[i] != a2[i]) | 
|  | break; | 
|  | else | 
|  | i++; | 
|  | } | 
|  | if (i == a2.Length) | 
|  | return a2; | 
|  | } | 
|  |  | 
|  | throw new IllegalStateException("Not got expected value for type: " + a2.GetType().ToString()); | 
|  | } | 
|  | UInt16[] compareUnsignedShortArray(UInt16[] a, UInt16[] a2) | 
|  | { | 
|  | if (a.Length == a2.Length) | 
|  | { | 
|  | int i = 0; | 
|  | while (i < a.Length) | 
|  | { | 
|  | if (a[i] != a2[i]) | 
|  | break; | 
|  | else | 
|  | i++; | 
|  | } | 
|  | if (i == a2.Length) | 
|  | return a2; | 
|  | } | 
|  |  | 
|  | throw new IllegalStateException("Not got expected value for type: " + a2.GetType().ToString()); | 
|  | } | 
|  |  | 
|  | T[] GenericCompare<T>(T[] a, T[] a2) | 
|  | { | 
|  | if (a.Length == a2.Length) | 
|  | { | 
|  | int i = 0; | 
|  | while (i < a.Length) | 
|  | { | 
|  | if (!a[i].Equals(a2[i])) | 
|  | break; | 
|  | else | 
|  | i++; | 
|  | } | 
|  | if (i == a2.Length) | 
|  | return a2; | 
|  | } | 
|  |  | 
|  | throw new IllegalStateException("Not got expected value for type: " + a2.GetType().ToString()); | 
|  | } | 
|  |  | 
|  |  | 
|  | T GenericValCompare<T>(T b, T b2) | 
|  | { | 
|  | if (b.Equals(b2)) | 
|  | return b; | 
|  | throw new IllegalStateException("Not got expected value for type: " + b2.GetType().ToString()); | 
|  | } | 
|  | public void checkEquality(PdxTypesReflectionTest other) | 
|  | { | 
|  | byte[][] baa = other.m_byteByteArray; | 
|  | m_byteByteArray = compareByteByteArray(baa, m_byteByteArray); | 
|  | m_char = GenericValCompare(other.m_char, m_char); | 
|  |  | 
|  | m_bool = GenericValCompare(other.m_bool, m_bool); | 
|  | m_boolArray = GenericCompare(other.m_boolArray, m_boolArray); | 
|  |  | 
|  | m_byte = GenericValCompare(other.m_byte, m_byte); | 
|  | m_byteArray = GenericCompare(other.m_byteArray, m_byteArray); | 
|  | m_charArray = GenericCompare(other.m_charArray, m_charArray); | 
|  |  | 
|  | m_arraylist = compareCompareCollection(other.m_arraylist, m_arraylist); | 
|  |  | 
|  | m_LinkedList = compareCompareCollection(other.m_LinkedList, m_LinkedList); | 
|  |  | 
|  | IDictionary<object, object> tmpM = other.m_map; | 
|  | if (tmpM.Count != m_map.Count) | 
|  | throw new IllegalStateException("Not got expected value for type: " + m_map.GetType().ToString()); | 
|  |  | 
|  | Hashtable tmpH = other.m_hashtable; | 
|  |  | 
|  | if (tmpH.Count != m_hashtable.Count) | 
|  | throw new IllegalStateException("Not got expected value for type: " + m_hashtable.GetType().ToString()); | 
|  |  | 
|  | ArrayList arrAl = other.m_vector; | 
|  |  | 
|  | if (arrAl.Count != m_vector.Count) | 
|  | throw new IllegalStateException("Not got expected value for type: " + m_vector.GetType().ToString()); | 
|  |  | 
|  | CacheableHashSet rmpChs = other.m_chs; | 
|  |  | 
|  | if (rmpChs.Count != m_chs.Count) | 
|  | throw new IllegalStateException("Not got expected value for type: " + m_chs.GetType().ToString()); | 
|  |  | 
|  | CacheableLinkedHashSet rmpClhs = other.m_clhs; | 
|  |  | 
|  | if (rmpClhs.Count != m_clhs.Count) | 
|  | throw new IllegalStateException("Not got expected value for type: " + m_clhs.GetType().ToString()); | 
|  |  | 
|  |  | 
|  | m_string = GenericValCompare(other.m_string, m_string); | 
|  |  | 
|  | m_dateTime = compareData(other.m_dateTime, m_dateTime); | 
|  |  | 
|  | m_double = GenericValCompare(other.m_double, m_double); | 
|  |  | 
|  | m_doubleArray = GenericCompare(other.m_doubleArray, m_doubleArray); | 
|  | m_float = GenericValCompare(other.m_float, m_float); | 
|  | m_floatArray = GenericCompare(other.m_floatArray, m_floatArray); | 
|  | m_int16 = GenericValCompare(other.m_int16, m_int16); | 
|  | m_int32 = GenericValCompare(other.m_int32, m_int32); | 
|  | m_long = GenericValCompare(other.m_long, m_long); | 
|  | m_int32Array = GenericCompare(other.m_int32Array, m_int32Array); | 
|  | m_longArray = GenericCompare(other.m_longArray, m_longArray); | 
|  | m_int16Array = GenericCompare(other.m_int16Array, m_int16Array); | 
|  | m_sbyte = GenericValCompare(other.m_sbyte, m_sbyte); | 
|  | m_sbyteArray = GenericCompare(other.m_sbyteArray, m_sbyteArray); | 
|  | m_stringArray = GenericCompare(other.m_stringArray, m_stringArray); | 
|  | m_uint16 = GenericValCompare(other.m_uint16, m_uint16); | 
|  | m_uint32 = GenericValCompare(other.m_uint32, m_uint32); | 
|  | m_ulong = GenericValCompare(other.m_ulong, m_ulong); | 
|  | m_uint32Array = GenericCompare(other.m_uint32Array, m_uint32Array); | 
|  | m_ulongArray = GenericCompare(other.m_ulongArray, m_ulongArray); | 
|  | m_uint16Array = GenericCompare(other.m_uint16Array, m_uint16Array); | 
|  |  | 
|  | byte[] ret = other.m_byte252; | 
|  | if (ret.Length != 252) | 
|  | throw new Exception("Array len 252 not found"); | 
|  |  | 
|  | ret = other.m_byte253; | 
|  | if (ret.Length != 253) | 
|  | throw new Exception("Array len 253 not found"); | 
|  |  | 
|  | ret = other.m_byte65535; | 
|  | if (ret.Length != 65535) | 
|  | throw new Exception("Array len 65535 not found"); | 
|  |  | 
|  | ret = other.m_byte65536; | 
|  | if (ret.Length != 65536) | 
|  | throw new Exception("Array len 65536 not found"); | 
|  | if (other.m_pdxEnum != m_pdxEnum) | 
|  | throw new Exception("Pdx enum is not equal"); | 
|  |  | 
|  | ApartmentLocation[] otherA = other.m_address; | 
|  | for (int i = 0; i < m_address.Length; i++) | 
|  | { | 
|  | if (!m_address[i].Equals(otherA[i])) | 
|  | throw new Exception("ApartmentLocation array is not equal " + i); | 
|  | } | 
|  | } | 
|  | #endregion | 
|  | } | 
|  |  | 
|  | public class SerializePdx1 | 
|  | { | 
|  | [PdxIdentityField] public int i1; | 
|  | public int i2; | 
|  | public string s1; | 
|  | public string s2; | 
|  |  | 
|  | public SerializePdx1() | 
|  | { | 
|  | } | 
|  |  | 
|  | public SerializePdx1(bool init) | 
|  | { | 
|  | if (init) | 
|  | { | 
|  | i1 = 1; | 
|  | i2 = 2; | 
|  | s1 = "s1"; | 
|  | s2 = "s2"; | 
|  | } | 
|  | } | 
|  |  | 
|  | public override bool Equals(object obj) | 
|  | { | 
|  | if (obj == null) | 
|  | return false; | 
|  | if (obj == this) | 
|  | return true; | 
|  |  | 
|  | var other = obj as SerializePdx1; | 
|  |  | 
|  | if (other == null) | 
|  | return false; | 
|  |  | 
|  | if (i1 == other.i1 | 
|  | && i2 == other.i2 | 
|  | && s1 == other.s1 | 
|  | && s2 == other.s2) | 
|  | return true; | 
|  |  | 
|  | return false; | 
|  | } | 
|  |  | 
|  | public override int GetHashCode() | 
|  | { | 
|  | return base.GetHashCode(); | 
|  | } | 
|  | } | 
|  |  | 
|  | public class UnsupportedTypes | 
|  | { | 
|  | public struct Coords | 
|  | { | 
|  | public Coords(double x, double y) | 
|  | { | 
|  | X = x; | 
|  | Y = y; | 
|  | } | 
|  |  | 
|  | public double X { get; set; } | 
|  | public double Y { get; set; } | 
|  |  | 
|  | public override bool Equals(object ob) | 
|  | { | 
|  | if (ob is Coords) | 
|  | { | 
|  | Coords c = (Coords)ob; | 
|  | return X == c.X && Y == c.Y; | 
|  | } | 
|  | else | 
|  | { | 
|  | return false; | 
|  | } | 
|  | } | 
|  |  | 
|  | public override int GetHashCode() | 
|  | { | 
|  | return X.GetHashCode() ^ Y.GetHashCode(); | 
|  | } | 
|  | } | 
|  |  | 
|  | [PdxIdentityField] public int i1; | 
|  | public Coords coordsVal; | 
|  |  | 
|  | public UnsupportedTypes() | 
|  | { | 
|  | } | 
|  |  | 
|  | public UnsupportedTypes(bool init) | 
|  | { | 
|  | if (init) | 
|  | { | 
|  | i1 = 1; | 
|  | coordsVal = new Coords(1,2); | 
|  | } | 
|  | } | 
|  |  | 
|  | public override bool Equals(object obj) | 
|  | { | 
|  | if (obj == null) | 
|  | return false; | 
|  | if (obj == this) | 
|  | return true; | 
|  |  | 
|  | var other = obj as UnsupportedTypes; | 
|  |  | 
|  | if (other == null) | 
|  | return false; | 
|  |  | 
|  | if (i1 == other.i1 | 
|  | && coordsVal.Equals(coordsVal)) | 
|  | return true; | 
|  |  | 
|  | return false; | 
|  | } | 
|  |  | 
|  | public override int GetHashCode() | 
|  | { | 
|  | return base.GetHashCode(); | 
|  | } | 
|  | } | 
|  |  | 
|  | public class SerializePdx2 | 
|  | { | 
|  | public string s0; | 
|  | [PdxIdentityField] public int i1; | 
|  | public int i2; | 
|  | public string s1; | 
|  | public string s2; | 
|  |  | 
|  | public SerializePdx2() | 
|  | { | 
|  | } | 
|  |  | 
|  | public override string ToString() | 
|  | { | 
|  | return i1 + i2 + s1 + s2; | 
|  | } | 
|  |  | 
|  | public SerializePdx2(bool init) | 
|  | { | 
|  | if (init) | 
|  | { | 
|  | s0 = "s9999999999999999999999999999999999"; | 
|  | i1 = 1; | 
|  | i2 = 2; | 
|  | s1 = "s1"; | 
|  | s2 = "s2"; | 
|  | } | 
|  | } | 
|  |  | 
|  | public override bool Equals(object obj) | 
|  | { | 
|  | if (obj == null) | 
|  | return false; | 
|  | if (obj == this) | 
|  | return true; | 
|  |  | 
|  | var other = obj as SerializePdx2; | 
|  |  | 
|  | if (other == null) | 
|  | return false; | 
|  |  | 
|  | if (s0 == other.s0 | 
|  | && i1 == other.i1 | 
|  | && i2 == other.i2 | 
|  | && s1 == other.s1 | 
|  | && s2 == other.s2) | 
|  | return true; | 
|  |  | 
|  | return false; | 
|  | } | 
|  |  | 
|  | public override int GetHashCode() | 
|  | { | 
|  | return base.GetHashCode(); | 
|  | } | 
|  | } | 
|  |  | 
|  | public class BaseClass | 
|  | { | 
|  | [NonSerialized] | 
|  | private const int _const = 1003; | 
|  |  | 
|  | private int _baseclassmember; | 
|  |  | 
|  | public BaseClass() | 
|  | { | 
|  | } | 
|  |  | 
|  | public BaseClass(bool init) | 
|  | { | 
|  | if (init) | 
|  | { | 
|  | _baseclassmember = 101; | 
|  | } | 
|  | } | 
|  |  | 
|  | public override bool Equals(object obj) | 
|  | { | 
|  | if (obj == null) | 
|  | return false; | 
|  | var bc = obj as BaseClass; | 
|  | if (bc == null) | 
|  | return false; | 
|  |  | 
|  | if (bc == this) | 
|  | return true; | 
|  |  | 
|  | if (bc._baseclassmember == _baseclassmember) | 
|  | { | 
|  | return true; | 
|  | } | 
|  |  | 
|  | return false; | 
|  | } | 
|  |  | 
|  | public override int GetHashCode() | 
|  | { | 
|  | return base.GetHashCode(); | 
|  | } | 
|  |  | 
|  | public void ToData(IPdxWriter w) | 
|  | { | 
|  | w.WriteInt("_baseclassmember", _baseclassmember); | 
|  | } | 
|  |  | 
|  | public void FromData(IPdxReader r) | 
|  | { | 
|  | _baseclassmember = r.ReadInt("_baseclassmember"); | 
|  | } | 
|  | } | 
|  |  | 
|  | public class AddressWithGuid | 
|  | { | 
|  | private static Guid oddGuid = new Guid("924243B5-9C2A-41d7-86B1-E0B905C7EED3"); | 
|  | private static Guid evenGuid = new Guid("47AA8F17-FF6B-4a7d-B398-D83790977574"); | 
|  | private string _street; | 
|  | private string _aptName; | 
|  | private int _flatNumber; | 
|  | private Guid _guid; | 
|  |  | 
|  | public AddressWithGuid() | 
|  | { | 
|  | } | 
|  |  | 
|  | public AddressWithGuid(int id) | 
|  | { | 
|  | _flatNumber = id; | 
|  | _aptName = id.ToString(); | 
|  | _street = id.ToString() + "_street"; | 
|  | if (id % 2 == 0) | 
|  | _guid = evenGuid; | 
|  | else | 
|  | _guid = oddGuid; | 
|  | } | 
|  |  | 
|  | public override string ToString() | 
|  | { | 
|  | return _flatNumber + " " + _aptName + " " + _street + "  " + _guid.ToString(); | 
|  | } | 
|  |  | 
|  | public override bool Equals(object obj) | 
|  | { | 
|  | if (obj == null) | 
|  | return false; | 
|  | var other = obj as AddressWithGuid; | 
|  |  | 
|  | if (other == null) | 
|  | return false; | 
|  |  | 
|  | if (_street == other._street && | 
|  | _aptName == other._aptName && | 
|  | _flatNumber == other._flatNumber && | 
|  | _guid.Equals(other._guid)) | 
|  | return true; | 
|  |  | 
|  | return false; | 
|  | } | 
|  |  | 
|  | public override int GetHashCode() | 
|  | { | 
|  | return base.GetHashCode(); | 
|  | } | 
|  | } | 
|  |  | 
|  | public class SerializeAllTypes : BaseClass | 
|  | { | 
|  | public enum COLORS { RED, WHITE, BLUE }; | 
|  |  | 
|  | [PdxIdentityField] private int identity; | 
|  |  | 
|  | private string stringVal; | 
|  | private string[] stringArray; | 
|  |  | 
|  | public char charVal; | 
|  | public char[] charArray; | 
|  |  | 
|  | public bool boolVal; | 
|  | public bool[] boolArray; | 
|  |  | 
|  | public byte byteVal; | 
|  | public byte[] byteArray; | 
|  |  | 
|  | public sbyte sbyteVal; | 
|  | public sbyte[] sbyteArray; | 
|  |  | 
|  | public short shortVal; | 
|  | public ushort ushortVal; | 
|  | public short[] shortArray; | 
|  | public ushort[] ushortArray; | 
|  |  | 
|  | public int intVal; | 
|  | public uint uintVal; | 
|  | public int[] intArray; | 
|  | public uint[] uintArray; | 
|  |  | 
|  | public long longVal; | 
|  | public ulong ulongVal; | 
|  | public long[] longArray; | 
|  | public ulong[] ulongArray; | 
|  |  | 
|  | public float floatVal; | 
|  | public float[] floatArray; | 
|  |  | 
|  | public double doubleVal; | 
|  | public double[] doubleArray; | 
|  |  | 
|  | public DateTime dateTimeVal; | 
|  | public DateTime[] dateTimeArray; | 
|  |  | 
|  | public string s1; | 
|  | public string s2; | 
|  | private SerializePdx2 nestedObject; | 
|  | private ArrayList _addressList; | 
|  | private AddressWithGuid _address; | 
|  |  | 
|  | private Hashtable _hashTable; | 
|  | private Stack _stack; | 
|  | private Queue _queue; | 
|  |  | 
|  | public COLORS colorVal; | 
|  | public Guid guid; | 
|  | public Decimal decimalVal; | 
|  |  | 
|  | public SerializeAllTypes() | 
|  | : base() | 
|  | { | 
|  | } | 
|  |  | 
|  | public SerializeAllTypes(bool init, int nAddress) | 
|  | : base(init) | 
|  | { | 
|  | if (init) | 
|  | { | 
|  | stringVal = "Harry Potter is a gryffindor"; | 
|  | stringArray = new string[] { "Ron", "Hermeine", "Hagrid" }; | 
|  |  | 
|  | identity = 1; | 
|  |  | 
|  | charVal = 'z'; | 
|  | charArray = new char[] { 'a', 'b', 'c' }; | 
|  |  | 
|  | boolVal = true; | 
|  | boolArray = new bool[] { true, false, true }; | 
|  |  | 
|  | byteVal = 0xa0; | 
|  | byteArray = new byte[] { (byte)(Byte.MaxValue - 1), (byte)(Byte.MaxValue - 10), (byte)(Byte.MaxValue - 20) }; | 
|  |  | 
|  | sbyteVal = 0x10; | 
|  | sbyteArray = new sbyte[] { -5, 2, 0x70 }; | 
|  |  | 
|  | shortVal = -2; | 
|  | ushortVal = 2; | 
|  | shortArray = new short[] { 1, 11, 111 }; | 
|  | ushortArray = new ushort[] { (ushort)(UInt16.MaxValue - 1), (ushort)(UInt16.MaxValue - 11), (ushort)(UInt16.MaxValue - 111) }; | 
|  |  | 
|  | intVal = -22; | 
|  | uintVal = 22; | 
|  | intArray = new int[] { 10, 110, 1110 }; | 
|  | uintArray = new uint[] { (uint)(UInt32.MaxValue - 10), (uint)(UInt32.MaxValue - 110), (uint)(UInt32.MaxValue - 1110) }; | 
|  |  | 
|  | longVal = -222; | 
|  | ulongVal = 222; | 
|  | longArray = new long[] { 100, 1100, 11100 }; | 
|  | ulongArray = new ulong[] { (ulong)(UInt64.MaxValue - 100), (ulong)(UInt64.MaxValue - 1100), (ulong)(UInt64.MaxValue - 11100) }; | 
|  |  | 
|  | floatVal = 1.6f; | 
|  | floatArray = new float[] { 1.6f, 1600.1f, 1.2e7f }; | 
|  |  | 
|  | doubleVal = 1.6; | 
|  | doubleArray = new double[] { 2.6, 2600.1, 2.2e7 }; | 
|  |  | 
|  | dateTimeVal = new DateTime(2009, 8, 1, 0, 0, 0); | 
|  | dateTimeArray = new DateTime[] { dateTimeVal, dateTimeVal.AddDays(1), dateTimeVal.AddHours(1) }; | 
|  |  | 
|  | s1 = "s1"; | 
|  | s2 = "s2"; | 
|  | nestedObject = new SerializePdx2(true); | 
|  |  | 
|  | _addressList = new ArrayList(); | 
|  | _hashTable = new Hashtable(); | 
|  | _stack = new Stack(); | 
|  | _queue = new Queue(); | 
|  |  | 
|  | for (var i = 0; i < 10; i++) | 
|  | { | 
|  | _addressList.Add(new AddressWithGuid(i)); | 
|  | _hashTable.Add(i, new SerializePdx2(true)); | 
|  | _stack.Push(new SerializePdx2(true)); | 
|  | _queue.Enqueue(new SerializePdx2(true)); | 
|  | } | 
|  |  | 
|  | _address = new AddressWithGuid(nAddress); | 
|  | colorVal = COLORS.RED; | 
|  | guid = new Guid("924243B5-9C2A-41d7-86B1-E0B905C7EED3"); | 
|  | decimalVal = Decimal.MaxValue; | 
|  | } | 
|  | } | 
|  |  | 
|  | public override bool Equals(object obj) | 
|  | { | 
|  | if (obj == null) | 
|  | return false; | 
|  | if (obj == this) | 
|  | return true; | 
|  |  | 
|  | var other = obj as SerializeAllTypes; | 
|  |  | 
|  | if (other == null) | 
|  | return false; | 
|  |  | 
|  | if (stringVal == other.stringVal | 
|  | && stringArray.SequenceEqual(other.stringArray) | 
|  |  | 
|  | && identity == other.identity | 
|  |  | 
|  | && charVal == other.charVal | 
|  | && charArray.SequenceEqual(other.charArray) | 
|  |  | 
|  | && boolVal == other.boolVal | 
|  | && boolArray.SequenceEqual(other.boolArray) | 
|  |  | 
|  | && byteVal == other.byteVal | 
|  | && byteArray.SequenceEqual(other.byteArray) | 
|  |  | 
|  | && sbyteVal == other.sbyteVal | 
|  | && sbyteArray.SequenceEqual(other.sbyteArray) | 
|  |  | 
|  | && shortVal == other.shortVal | 
|  | && ushortVal == other.ushortVal | 
|  | && shortArray.SequenceEqual(other.shortArray) | 
|  | && ushortArray.SequenceEqual(other.ushortArray) | 
|  |  | 
|  | && intVal == other.intVal | 
|  | && uintVal == other.uintVal | 
|  | && intArray.SequenceEqual(other.intArray) | 
|  | && uintArray.SequenceEqual(other.uintArray) | 
|  |  | 
|  | && longVal == other.longVal | 
|  | && ulongVal == other.ulongVal | 
|  | && longArray.SequenceEqual(other.longArray) | 
|  | && ulongArray.SequenceEqual(other.ulongArray) | 
|  |  | 
|  | && floatVal == other.floatVal | 
|  | && floatArray.SequenceEqual(other.floatArray) | 
|  |  | 
|  | && doubleVal == other.doubleVal | 
|  | && doubleArray.SequenceEqual(other.doubleArray) | 
|  |  | 
|  | && dateTimeVal == other.dateTimeVal | 
|  | && dateTimeArray.SequenceEqual(other.dateTimeArray) | 
|  |  | 
|  | && s1 == other.s1 | 
|  | && s2 == other.s2 | 
|  | && colorVal == other.colorVal | 
|  | && guid == other.guid | 
|  | && decimalVal == other.decimalVal) | 
|  | { | 
|  | var ret = nestedObject.Equals(other.nestedObject); | 
|  |  | 
|  | if (ret) | 
|  | { | 
|  | if (_addressList.Count == 10 && | 
|  | _addressList.Count == other._addressList.Count | 
|  | ) | 
|  | { | 
|  | for (var i = 0; i < _addressList.Count; i++) | 
|  | { | 
|  | ret = _addressList[i].Equals(other._addressList[i]); | 
|  | if (!ret) | 
|  | return false; | 
|  | } | 
|  |  | 
|  | if (_hashTable.Count != other._hashTable.Count) | 
|  | return false; | 
|  |  | 
|  | foreach (DictionaryEntry de in _hashTable) | 
|  | { | 
|  | var otherHe = other._hashTable[de.Key]; | 
|  | ret = de.Value.Equals(otherHe); | 
|  | if (!ret) | 
|  | return false; | 
|  | } | 
|  |  | 
|  | if (_stack.Count != other._stack.Count) | 
|  | return false; | 
|  | foreach (Object o in _stack) | 
|  | { | 
|  | var otherO = other._stack.Pop(); | 
|  | ret = o.Equals(otherO); | 
|  | if (!ret) | 
|  | return false; | 
|  | } | 
|  |  | 
|  | if (_queue.Count != other._queue.Count) | 
|  | return false; | 
|  | foreach (Object o in _queue) | 
|  | { | 
|  | var otherO = other._queue.Dequeue(); | 
|  | ret = o.Equals(otherO); | 
|  | if (!ret) | 
|  | return false; | 
|  | } | 
|  |  | 
|  | if (!_address.Equals(other._address)) | 
|  | return false; | 
|  |  | 
|  | return base.Equals(other); | 
|  | } | 
|  | } | 
|  | } | 
|  | return false; | 
|  | } | 
|  |  | 
|  | public override int GetHashCode() | 
|  | { | 
|  | return base.GetHashCode(); | 
|  | } | 
|  | } | 
|  |  | 
|  | public class SerializePdx4 : BaseClass | 
|  | { | 
|  | private string s0; | 
|  | [PdxIdentityField] private int i1; | 
|  | public int i2; | 
|  | public string s1; | 
|  | public string s2; | 
|  | private SerializePdx2 nestedObject; | 
|  | private ArrayList _addressList; | 
|  |  | 
|  | private AddressWithGuid[] _addressArray; | 
|  |  | 
|  | //private int arrayCount = 10; | 
|  | public SerializePdx4() | 
|  | : base() | 
|  | { | 
|  | } | 
|  |  | 
|  | public override string ToString() | 
|  | { | 
|  | return i1 + ":" + i2 + ":" + s1 + ":" + s2 + nestedObject.ToString() + " add: " + _addressList[0].ToString(); | 
|  | } | 
|  |  | 
|  | public SerializePdx4(bool init) | 
|  | : base(init) | 
|  | { | 
|  | if (init) | 
|  | { | 
|  | s0 = "s9999999999999999999999999999999999"; | 
|  | i1 = 1; | 
|  | i2 = 2; | 
|  | s1 = "s1"; | 
|  | s2 = "s2"; | 
|  | nestedObject = new SerializePdx2(true); | 
|  |  | 
|  | _addressList = new ArrayList(); | 
|  | _addressArray = new AddressWithGuid[10]; | 
|  |  | 
|  | for (var i = 0; i < 10; i++) | 
|  | { | 
|  | _addressList.Add(new AddressWithGuid(i)); | 
|  | _addressArray[i] = new AddressWithGuid(i); | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | public override bool Equals(object obj) | 
|  | { | 
|  | if (obj == null) | 
|  | return false; | 
|  | if (obj == this) | 
|  | return true; | 
|  |  | 
|  | var other = obj as SerializePdx4; | 
|  |  | 
|  | if (other == null) | 
|  | return false; | 
|  |  | 
|  | if (s0 == other.s0 | 
|  | && i1 == other.i1 | 
|  | && i2 == other.i2 | 
|  | && s1 == other.s1 | 
|  | && s2 == other.s2) | 
|  | { | 
|  | var ret = nestedObject.Equals(other.nestedObject); | 
|  | if (ret) | 
|  | { | 
|  | if (_addressList.Count == other._addressList.Count && | 
|  | _addressList[0].Equals(other._addressList[0])) | 
|  | { | 
|  | for (var i = 0; i < _addressList.Count; i++) | 
|  | { | 
|  | ret = _addressList[i].Equals(other._addressList[i]); | 
|  | if (!ret) | 
|  | return false; | 
|  | } | 
|  |  | 
|  | for (var i = 0; i < _addressArray.Length; i++) | 
|  | { | 
|  | ret = _addressArray[i].Equals(other._addressArray[i]); | 
|  | if (!ret) | 
|  | return false; | 
|  | } | 
|  |  | 
|  | return base.Equals(other); | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | return false; | 
|  | } | 
|  |  | 
|  | public override int GetHashCode() | 
|  | { | 
|  | return base.GetHashCode(); | 
|  | } | 
|  | } | 
|  |  | 
|  | public class PdxFieldTest | 
|  | { | 
|  | private string _notInclude = "default_value"; | 
|  | private int _nameChange; | 
|  | private int _identityField; | 
|  |  | 
|  | public PdxFieldTest() | 
|  | { | 
|  | } | 
|  |  | 
|  | public string NotInclude | 
|  | { | 
|  | set { _notInclude = value; } | 
|  | } | 
|  |  | 
|  | public PdxFieldTest(bool init) | 
|  | { | 
|  | if (init) | 
|  | { | 
|  | _notInclude = "valuechange"; | 
|  | _nameChange = 11213; | 
|  | _identityField = 1038193; | 
|  | } | 
|  | } | 
|  |  | 
|  | public override bool Equals(object obj) | 
|  | { | 
|  | if (obj == null) | 
|  | return false; | 
|  |  | 
|  | var other = obj as PdxFieldTest; | 
|  |  | 
|  | if (other == null) | 
|  | return false; | 
|  |  | 
|  | if (_notInclude == other._notInclude | 
|  | && _nameChange == other._nameChange | 
|  | && _identityField == other._identityField) | 
|  | return true; | 
|  |  | 
|  |  | 
|  | return false; | 
|  | } | 
|  |  | 
|  | public override int GetHashCode() | 
|  | { | 
|  | return base.GetHashCode(); | 
|  | } | 
|  | } | 
|  |  | 
|  | public class SpecialAutoSerializer : ReflectionBasedAutoSerializer | 
|  | { | 
|  | public override bool IsIdentityField(FieldInfo fi, Type type) | 
|  | { | 
|  | if (fi.Name == "_identityField") | 
|  | return true; | 
|  | return base.IsIdentityField(fi, type); | 
|  | } | 
|  |  | 
|  | public override string GetFieldName(FieldInfo fi, Type type) | 
|  | { | 
|  | if (fi.Name == "_nameChange") | 
|  | return fi.Name + "NewName"; | 
|  |  | 
|  | return fi.Name; | 
|  | } | 
|  |  | 
|  | public override bool IsFieldIncluded(FieldInfo fi, Type type) | 
|  | { | 
|  | if (fi.Name == "_notInclude") | 
|  | return false; | 
|  | return base.IsFieldIncluded(fi, type); | 
|  | } | 
|  |  | 
|  | public override FieldType GetFieldType(FieldInfo fi, Type type) | 
|  | { | 
|  | //if (fi.FieldType.Equals(Type.GetType("System.Guid"))) | 
|  | //    return FieldType.STRING; | 
|  | return base.GetFieldType(fi, type); | 
|  | } | 
|  |  | 
|  | public override object WriteTransform(FieldInfo fi, Type type, object originalValue) | 
|  | { | 
|  | if (fi.FieldType.Equals(Type.GetType("System.Guid"))) | 
|  | { | 
|  | //writer.WriteField(fi.Name, fi.GetValue(o).ToString(), Type.GetType("System.String")); | 
|  | return originalValue.ToString(); | 
|  | } | 
|  | else | 
|  | return base.WriteTransform(fi, type, originalValue); | 
|  | } | 
|  |  | 
|  | public override object ReadTransform(FieldInfo fi, Type type, object serializeValue) | 
|  | { | 
|  | if (fi.FieldType.Equals(Type.GetType("System.Guid"))) | 
|  | { | 
|  | var g = new Guid((string)serializeValue); | 
|  |  | 
|  | //fi.SetValue(o, g); | 
|  | return g; | 
|  | } | 
|  | else | 
|  | return base.ReadTransform(fi, type, serializeValue); | 
|  | } | 
|  |  | 
|  | /*public override void SerializeField(object o, FieldInfo fi, IPdxWriter writer) | 
|  | { | 
|  | if (fi.FieldType.Equals(Type.GetType("System.Guid"))) | 
|  | { | 
|  | writer.WriteField(fi.Name, fi.GetValue(o).ToString(), Type.GetType("System.String")); | 
|  | } | 
|  | else | 
|  | base.SerializeField(o, fi, writer); | 
|  | }*/ | 
|  |  | 
|  | /* public override object DeserializeField(object o, FieldInfo fi, IPdxReader reader) | 
|  | { | 
|  | if (fi.FieldType.Equals(Type.GetType("System.Guid"))) | 
|  | { | 
|  | string gStr = (string)reader.ReadField(fi.Name, Type.GetType("System.String")); | 
|  | Guid g = new Guid(gStr); | 
|  |  | 
|  | //fi.SetValue(o, g); | 
|  | return g; | 
|  | } | 
|  | else | 
|  | return base.DeserializeField(o, fi, reader); | 
|  | }*/ | 
|  | } | 
|  |  | 
|  | [Trait("Category", "Integration")] | 
|  | public class AutoSerializationTests : TestBase | 
|  | { | 
|  | public AutoSerializationTests(ITestOutputHelper testOutputHelper) : base(testOutputHelper) | 
|  | { | 
|  | } | 
|  |  | 
|  | [Fact] | 
|  | public void AutoPutGet() | 
|  | { | 
|  | using (var cluster = new Cluster(output, CreateTestCaseDirectoryName(), 1, 1)) | 
|  | { | 
|  | Assert.True(cluster.Start()); | 
|  | Assert.Equal(0, cluster.Gfsh.create() | 
|  |  | 
|  | .region() | 
|  | .withName("testRegion") | 
|  | .withType("REPLICATE") | 
|  | .execute()); | 
|  |  | 
|  | var properties = new Dictionary<string, string>() | 
|  | { | 
|  | { "log-level", "debug" }, | 
|  | { "log-file", "c:/temp/autoserializertest.log" } | 
|  | }; | 
|  |  | 
|  | var cache = cluster.CreateCache(properties); | 
|  |  | 
|  | var region = cache.CreateRegionFactory(RegionShortcut.PROXY) | 
|  | .SetPoolName("default") | 
|  | .Create<object, object>("testRegion"); | 
|  | Assert.NotNull(region); | 
|  |  | 
|  | cache.TypeRegistry.PdxSerializer = new ReflectionBasedAutoSerializer(); | 
|  |  | 
|  | for (var i = 0; i < 10; i++) | 
|  | { | 
|  | object put; | 
|  | object ret; | 
|  |  | 
|  | Assert.ThrowsAny<Exception>(() => | 
|  | { | 
|  | put = new UnsupportedTypes(true); | 
|  | region[i] = put; | 
|  | var val = region[i]; | 
|  | Console.WriteLine("Shouldn't be able to retrieve an unsupported type"); | 
|  | }); | 
|  |  | 
|  | put = new SerializePdx1(true); | 
|  | region[i] = put; | 
|  | ret = region[i]; | 
|  | Assert.Equal(put, ret); | 
|  |  | 
|  | put = new SerializePdx2(true); | 
|  | region[i + 10] = put; | 
|  | ret = region[i + 10]; | 
|  | Assert.Equal(put, ret); | 
|  |  | 
|  | put = new PdxTypesReflectionTest(true); | 
|  | region[i + 20] = put; | 
|  | ret = region[i + 20]; | 
|  | Assert.Equal(put, ret); | 
|  |  | 
|  | put = new SerializeAllTypes(true, i % 2); | 
|  | region[i + 30] = put; | 
|  | ret = region[i + 30]; | 
|  | Assert.Equal(put, ret); | 
|  |  | 
|  | put = new SerializePdx4(true); | 
|  | region[i + 40] = put; | 
|  | ret = region[i + 40]; | 
|  | Assert.Equal(put, ret); | 
|  |  | 
|  | var p1 = region[i + 30]; | 
|  | var p2 = region[i + 40]; | 
|  | Assert.True(p1 != p2, "Should NOt be equal"); | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | [Fact] | 
|  | public void AutoPutAll() | 
|  | { | 
|  | using (var cluster = new Cluster(output, CreateTestCaseDirectoryName(), 1, 1)) | 
|  | { | 
|  | Assert.True(cluster.Start()); | 
|  | Assert.Equal(0, cluster.Gfsh.create() | 
|  | .region() | 
|  | .withName("testRegion") | 
|  | .withType("REPLICATE") | 
|  | .execute()); | 
|  |  | 
|  | var cache = cluster.CreateCache(); | 
|  |  | 
|  | var region = cache.CreateRegionFactory(RegionShortcut.PROXY) | 
|  | .SetPoolName("default") | 
|  | .Create<object, object>("testRegion"); | 
|  | Assert.NotNull(region); | 
|  |  | 
|  | // Register the reflectionbased serializer | 
|  | cache.TypeRegistry.PdxSerializer = new ReflectionBasedAutoSerializer(); | 
|  |  | 
|  | IDictionary<object, object> collection = new Dictionary<object, object>(); | 
|  | collection.Add(100, new SerializeAllTypes(true, 0)); | 
|  | collection.Add(200, new SerializeAllTypes(true, 1)); | 
|  | collection.Add(300, new SerializePdx4(true)); | 
|  | region.PutAll(collection); | 
|  | } | 
|  | } | 
|  |  | 
|  | [Fact] | 
|  | public void DerivedAutoSerializer() | 
|  | { | 
|  | using (var cluster = new Cluster(output, CreateTestCaseDirectoryName(), 1, 1)) | 
|  | { | 
|  | Assert.True(cluster.Start()); | 
|  | Assert.Equal(0, cluster.Gfsh.create() | 
|  | .region() | 
|  | .withName("testRegion") | 
|  | .withType("REPLICATE") | 
|  | .execute()); | 
|  |  | 
|  | var properties = new Dictionary<string, string>() | 
|  | { | 
|  | { "log-level", "debug" }, | 
|  | { "log-file", "c:/temp/autoserializertest.log" } | 
|  | }; | 
|  |  | 
|  | var cache = cluster.CreateCache(properties); | 
|  |  | 
|  | var region = cache.CreateRegionFactory(RegionShortcut.PROXY) | 
|  | .SetPoolName("default") | 
|  | .Create<object, object>("testRegion"); | 
|  | Assert.NotNull(region); | 
|  |  | 
|  | cache.TypeRegistry.PdxSerializer = new SpecialAutoSerializer(); | 
|  |  | 
|  | for (var i = 0; i < 1; i++) | 
|  | { | 
|  | var pft = new PdxFieldTest(true); | 
|  | region[i + 50] = pft; | 
|  | var ret = region[i + 50]; | 
|  |  | 
|  | Assert.NotEqual(pft, ret); | 
|  |  | 
|  | pft.NotInclude = "default_value"; | 
|  | Assert.Equal(pft, ret); | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  | } |