Esempio n. 1
0
 public static T RestrictToRange <T>(T value, NullableWrapper <T> lower, NullableWrapper <T> higher) where T : IComparable <T>
 {
     if (lower != null && value.CompareTo(lower.Stored) < 0)
     {
         return(lower.Stored);
     }
     if (higher != null && value.CompareTo(higher.Stored) > 0)
     {
         return(higher.Stored);
     }
     return(value);
 }
		public void Repro64_v2_ReadonlyStructs_Direct()
		{
			var config = new SerializerConfig { DefaultTargets = TargetMember.AllFields, PreserveReferences = false };
			config.Advanced.ReadonlyFieldHandling = ReadonlyFieldHandling.ForcedOverwrite;
			config.Advanced.SkipCompilerGeneratedFields = false;
			config.OnConfigNewType = tc =>
			{
				tc.TypeConstruction = TypeConstruction.ByUninitialized();
			};


			var ceras = new CerasSerializer(config);

			var obj = new NullableWrapper(new Test { Value = 2.34M, SubStruct = new SubStruct(new NameAge("riki", 5), 6, 7) });


			var objClone = ceras.Advanced.Clone(obj);
			Assert.Equal(obj.TestStruct, objClone.TestStruct);

			var subStruct = new SubStruct(new NameAge("riki", 5), 6, 7);
			var ssClone = ceras.Advanced.Clone(subStruct);
			Assert.True(DeepComparer.Instance.CheckEquality(subStruct, ssClone));
		}
		public void Repro64_v2_ReadonlyStructs_Ctor()
		{
			var config = new SerializerConfig { DefaultTargets = TargetMember.AllFields, PreserveReferences = false };
			config.Advanced.ReadonlyFieldHandling = ReadonlyFieldHandling.ForcedOverwrite;
			config.Advanced.SkipCompilerGeneratedFields = false;
			int nCtor=0;
			int nUninit=0;
			config.OnConfigNewType = tc =>
			{
				var ctor = tc.Type.GetConstructors(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).FirstOrDefault();
				if (ctor != null)
				{
					tc.TypeConstruction = TypeConstruction.ByConstructor(ctor);
					nCtor++;
				}
				else
				{
					tc.TypeConstruction = TypeConstruction.ByUninitialized();
					nUninit++;
				}
			};
			

			var ceras = new CerasSerializer(config);

			var obj = new NullableWrapper(new Test { Value = 2.34M, SubStruct = new SubStruct(new NameAge("riki", 5), 6, 7) });
			var clone = ceras.Advanced.Clone(obj);

			Assert.Equal(7, nCtor);
			Assert.Equal(1, nUninit);

			Assert.Equal(obj.TestStruct.Value.Value, clone.TestStruct.Value.Value);
			Assert.Equal(obj.TestStruct.Value.SubStruct.Num, clone.TestStruct.Value.SubStruct.Num);
			Assert.Equal(obj.TestStruct.Value.SubStruct.NameAge.Age, clone.TestStruct.Value.SubStruct.NameAge.Age);
			Assert.Equal(obj.TestStruct.Value.SubStruct.NameAge.Name, clone.TestStruct.Value.SubStruct.NameAge.Name);
		}