namespace ChickenGameTest; using System.Diagnostics; using Godot; using SJK.Functional; public class TestStructural { public static void Test() { var a = new StructuralBuilder() .Add(new Vector3(0,0,0)) .Add(new Vector2(0,5)) .Add(new Vector4(0,0,0,0)) .Add(new Aabb()) .Add(new int()) .Add(new float()) .Add(new Node()) .Add(new Node()) .Add(new Node2D()) .Add("") .Add(new test(){a = 5, b = "gg"}) .Build(); var registy = new StructuralInstanceManger(); var b = registy.Add(a,new Vector2(1,2)); var c = registy.Add(a,new Vector2(1,2)); var d = registy.Canonicalize(new StructuralBuilder(a).Add(new Vector2(1,2)).Build()); var g = new StructuralBuilder(a).Add(Option.Some(5)).Build(); var h = new StructuralBuilder(a).Add(Option.Some(5)).BuildMutable(); GD.Print(g.Equals(h)); GD.Print(ReferenceEquals(b,c)); GD.Print(ReferenceEquals(b,d)); GD.Print(ComponentType.Id); GD.Print(ComponentType.Id); var help = new StructuralBuilder(a) .CombineWith(b, static configure => configure .Bind(static (a, b) => a + b) .Ignore()) .Add(Vector2I.Zero) .Build(); GD.Print(help.Get().Map(i=>$"{i}").OrDefault("none")); var timer = new Stopwatch(); timer.Start(); for (int i = 0; i < 100000; i++) { var e = registy.AddOrReplaceAttribute(a,new test()); } timer.Stop(); GD.Print(timer.Elapsed); timer.Reset(); timer.Start(); for (int i = 0; i < 100000; i++) { var e = registy.Canonicalize(new StructuralBuilder(a).Add(new test()).Build()); } timer.Stop(); GD.Print(timer.Elapsed); } } [ComponentOptions(CacheTransitions = true)] record test { public int a; public string b; }