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); }