public static int WasSymbolic_BecameConcrete_RecursiveObject(int v) { var a = new RecursiveClass(v); a.SetValue(50); return(a.Multiply(2)); }
public void DeserializeComplex_TypedObject_RecursiveAntiparalell() { var objTyped1 = new RecursiveClass() { MyProp = 100, RecursiveProperty = null }; var objTyped2 = new RecursiveClass() { MyProp = 120, RecursiveProperty = objTyped1 }; objTyped1.RecursiveProperty = objTyped2; var expressionStr = objTyped1.AsExpression().DefaultSerializer.Serialize(); var deserializer = new ComplexEntityExpressionDeserializer(); var deserialized = (RecursiveClass)deserializer.Deserialize(expressionStr, objTyped1.GetType()); Assert.IsType <RecursiveClass>(deserialized); Assert.Equal(100, deserialized.MyProp); Assert.Equal(120, deserialized.RecursiveProperty.MyProp); Assert.Same(deserialized, deserialized.RecursiveProperty.RecursiveProperty); }
public void SelfAsProperty() { var instance = new RecursiveClass { Name = "Self" }; Expression <Func <RecursiveClass, RecursiveClass> > func = x => x; var data = PropertyMetadataHelper.GetPropertyMetadata(func); Assert.IsNotNull(data); Assert.AreEqual("Self", ((RecursiveClass)data.Getter(instance)).Name); }
[InlineData(70)] // default max depth is 64 public static void SerializeToNode_RespectsMaxDepth(int maxDepth) { var options = new JsonSerializerOptions { MaxDepth = maxDepth }; RecursiveClass value = RecursiveClass.FromInt(maxDepth); JsonNode dom = JsonSerializer.SerializeToNode(value, options); value = RecursiveClass.FromInt(maxDepth + 1); Assert.Throws <JsonException>(() => JsonSerializer.SerializeToNode(value, options)); }
public async Task AsyncValidation() { const int ParallelCount = 2; var list = new HashSet <int>(); var cts = new CancellationTokenSource(); var builder = new ValidatorBuilder <object>(); builder.AddKnownType <RecursiveClass>(); builder.AddPropertyFilter <RecursiveClass>(); builder.AddConstraint(_ => new DelegateConstraint(instanceValue => { lock (list) { if (Task.CurrentId.HasValue) { list.Add(Task.CurrentId.Value); } } return(true); })); var validator = builder.Build(); var instance = new RecursiveClass { Entry1 = new RecursiveClass { Entry1 = new RecursiveClass { }, Entry2 = new RecursiveClass { }, }, Entry2 = new RecursiveClass { Entry1 = new RecursiveClass { }, Entry2 = new RecursiveClass { }, }, }; var context = new TestValidationContext(); context.Context.MaxDegreeOfParallelism = ParallelCount; await validator.ValidateAsync(instance, context.Context).ConfigureAwait(false); Assert.Equal(ParallelCount, list.Count); }
public void ParentAsPropertyViaInterface() { IRecursiveClass instance = new RecursiveClass { Name = "Self", Parent = new RecursiveClass { Name = "Parent" } }; Expression <Func <IRecursiveClass, IRecursiveClass> > func = x => x.Parent; var data = PropertyMetadataHelper.GetPropertyMetadata(func); Assert.IsNotNull(data); Assert.AreEqual("Parent", ((RecursiveClass)data.Getter(instance)).Name); }
public void DeserializeComplex_TypedObject_MultiLevel() { var objTyped = new RecursiveClass() { MyProp = 1, RecursiveProperty = new RecursiveClass() { MyProp = 2, RecursiveProperty = new RecursiveClass() { MyProp = 3, RecursiveProperty = new RecursiveClass() { MyProp = 4, RecursiveProperty = null, ZProp = "D" }, ZProp = "C" }, ZProp = "B" }, ZProp = "A" }; var expressionStr = objTyped.AsExpression().DefaultSerializer.Serialize(); var deserializer = new ComplexEntityExpressionDeserializer(); var deserialized = (RecursiveClass)deserializer.Deserialize(expressionStr, objTyped.GetType()); Assert.IsType <RecursiveClass>(deserialized); Assert.Equal(1, deserialized.MyProp); Assert.Equal("A", deserialized.ZProp); Assert.Equal(2, deserialized.RecursiveProperty.MyProp); Assert.Equal("B", deserialized.RecursiveProperty.ZProp); Assert.Equal(3, deserialized.RecursiveProperty.RecursiveProperty.MyProp); Assert.Equal("C", deserialized.RecursiveProperty.RecursiveProperty.ZProp); Assert.Equal(4, deserialized.RecursiveProperty.RecursiveProperty.RecursiveProperty.MyProp); Assert.Equal("D", deserialized.RecursiveProperty.RecursiveProperty.RecursiveProperty.ZProp); }
public void DeserializeComplex_TypedObject_ShowType_None() { var obj = new RecursiveClass { MyProp = 10, RecursiveProperty = new RecursiveClass() { MyProp = 20 }, ZProp = "value" }; var serializer = obj.AsExpression().GetSerializer <ComplexEntityExpressionSerializer>(); serializer.ShowType = ShowTypeOptions.None; var expressionStr = serializer.Serialize(); var deserializer = new ComplexEntityExpressionDeserializer(); var deserialized = deserializer.Deserialize <RecursiveClass>(expressionStr); Assert.Equal(10, deserialized.MyProp); Assert.Equal("value", deserialized.ZProp); Assert.Equal(20, deserialized.RecursiveProperty.MyProp); }
public RecursiveClass(RecursiveClass c) { }
public RecursiveClass(int value) { _value = value; next = this; }
public static RecursiveClass CreateRecursiveObject() { var a = new RecursiveClass(42); return(a); }
public static int ToInt(RecursiveClass value) => value is null ? 0 : 1 + ToInt(value.Next);