using AyCode.Core.Extensions; using AyCode.Core.Serializers; using AyCode.Core.Tests.TestModels; namespace AyCode.Core.Tests.Serialization; [TestClass] public class ChainReferenceDebugTest { [TestMethod] public void DebugChainReferences_DirectTest() { // Test ChainReferenceTracker directly var tracker = new AcSerializerCommon.ChainReferenceTracker(); var category = new SharedCategory { Id = 100, Name = "TestCategory" }; // Register using reflection (like ThenPopulate does) tracker.TryRegisterIIdObject(category); // Try to retrieve using boxed int (like MergeIIdCollection does) object id = 100; // Boxed int var found = tracker.TryGetObject(id, out var retrievedCategory); Console.WriteLine($"Found: {found}"); Console.WriteLine($"Same reference: {ReferenceEquals(category, retrievedCategory)}"); Assert.IsTrue(found, "Should find the category by ID"); Assert.AreSame(category, retrievedCategory, "Should be same object reference"); } [TestMethod] public void DebugSimpleChainPopulate() { var list1 = new List(); var list2 = new List(); var serverData = new List { new() { Id = 1, Name = "Cat1", SortOrder = 10 } }; var binary = serverData.ToBinary(); using var chain = binary.BinaryToChain>(); // First populate chain.ThenPopulate(list1); Console.WriteLine($"List1 count: {list1.Count}, ID: {list1[0].Id}, Name: {list1[0].Name}"); // Second populate chain.ThenPopulate(list2); Console.WriteLine($"List2 count: {list2.Count}, ID: {list2[0].Id}, Name: {list2[0].Name}"); // Check if same reference Console.WriteLine($"Same reference: {ReferenceEquals(list1[0], list2[0])}"); Console.WriteLine($"List1[0] hash: {list1[0].GetHashCode()}, List2[0] hash: {list2[0].GetHashCode()}"); Assert.AreSame(list1[0], list2[0], "Should be same object reference!"); } }