diff --git a/EonaCat.FastBin.Tester.Client/EonaCat.FastBin.Tester.Client.csproj b/EonaCat.FastBin.Tester.Client/EonaCat.FastBin.Tester.Client.csproj
new file mode 100644
index 0000000..6e93940
--- /dev/null
+++ b/EonaCat.FastBin.Tester.Client/EonaCat.FastBin.Tester.Client.csproj
@@ -0,0 +1,14 @@
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
+
+
+
+
diff --git a/EonaCat.FastBin.Tester.Client/Program.cs b/EonaCat.FastBin.Tester.Client/Program.cs
new file mode 100644
index 0000000..3c2a43b
--- /dev/null
+++ b/EonaCat.FastBin.Tester.Client/Program.cs
@@ -0,0 +1,260 @@
+namespace EonaCat.FastBin.Tester
+{
+ public class User
+ {
+ public int Id;
+ public string Name;
+ public string Email;
+ public DateTime CreatedAt;
+ public List Orders;
+ public User Manager; // Self-referencing for testing
+ }
+
+ public class Order
+ {
+ public Guid OrderId;
+ public decimal TotalAmount;
+ public List Items;
+ public OrderStatus Status;
+ }
+
+ public class OrderItem
+ {
+ public string ProductName;
+ public int Quantity;
+ public decimal Price;
+ }
+
+ public enum OrderStatus
+ {
+ Pending,
+ Processing,
+ Shipped,
+ Delivered
+ }
+
+ public class GetUserRequest
+ {
+ public int UserId;
+ }
+
+ public class CreateOrderRequest
+ {
+ public int UserId;
+ public List Items;
+ }
+
+ public class CreateOrderResponse
+ {
+ public Guid OrderId;
+ public string Message;
+ }
+
+ class Program
+ {
+ static async Task Main(string[] args)
+ {
+ Console.WriteLine("=== EonaCat.FastBin Tester ===\n");
+
+ // Test 1: Basic Serialization
+ Console.WriteLine("Test 1: Basic Serialization");
+ TestBasicSerialization();
+
+ // Test 2: Complex Objects with Nesting
+ Console.WriteLine("\nTest 2: Complex Objects with Nesting");
+ TestComplexObjects();
+
+ // Test 3: Self-Referencing Objects
+ Console.WriteLine("\nTest 3: Self-Referencing Objects");
+ TestSelfReferencing();
+
+ // Test 4: Polymorphism
+ Console.WriteLine("\nTest 4: Polymorphism");
+ TestPolymorphism();
+
+ // Test 5: Client-Server Communication
+ Console.WriteLine("\nTest 5: Client-Server Communication");
+ await TestClientServer();
+
+ Console.WriteLine("\n=== All EonaCat.FastBin Tests Complete ===");
+ Console.WriteLine("Press any key to exit...");
+ Console.ReadKey();
+ }
+
+ static void TestBasicSerialization()
+ {
+ var data = new Dictionary
+ {
+ ["string"] = "Someone is a brasser",
+ ["int"] = 42,
+ ["double"] = 3.14159,
+ ["bool"] = true,
+ ["guid"] = Guid.NewGuid(),
+ ["date"] = DateTime.Now
+ };
+
+ var bytes = FastBin.Serialize(data);
+ var restored = FastBin.Deserialize>(bytes);
+
+ Console.WriteLine($"Original count: {data.Count}");
+ Console.WriteLine($"Restored count: {restored.Count}");
+ Console.WriteLine($"Serialized size: {bytes.Length} bytes");
+ Console.WriteLine("Basic serialization works!");
+ }
+
+ static void TestComplexObjects()
+ {
+ var user = new User
+ {
+ Id = 1,
+ Name = "Brian Asser",
+ Email = "brasser@example.com",
+ CreatedAt = DateTime.Now,
+ Orders = new List
+ {
+ new Order
+ {
+ OrderId = Guid.NewGuid(),
+ TotalAmount = 299.99m,
+ Status = OrderStatus.Delivered,
+ Items = new List
+ {
+ new OrderItem { ProductName = "Laptop", Quantity = 1, Price = 299.99m }
+ }
+ }
+ }
+ };
+
+ var bytes = FastBin.Serialize(user);
+ var restored = FastBin.Deserialize(bytes);
+
+ Console.WriteLine($"User: {restored.Name}");
+ Console.WriteLine($"Orders: {restored.Orders.Count}");
+ Console.WriteLine($"First order total: ${restored.Orders[0].TotalAmount}");
+ Console.WriteLine($"Serialized size: {bytes.Length} bytes");
+ Console.WriteLine("Complex objects work!");
+ }
+
+ static void TestSelfReferencing()
+ {
+ var manager = new User
+ {
+ Id = 1,
+ Name = "Manager",
+ Email = "manager@example.com",
+ CreatedAt = DateTime.Now
+ };
+
+ var employee = new User
+ {
+ Id = 2,
+ Name = "Brasser",
+ Email = "brasser@example.com",
+ CreatedAt = DateTime.Now,
+ Manager = manager
+ };
+
+ manager.Manager = manager; // Self-reference
+
+ var bytes = FastBin.Serialize(employee);
+ var restored = FastBin.Deserialize(bytes);
+
+ Console.WriteLine($"Employee: {restored.Name}");
+ Console.WriteLine($"Manager: {restored.Manager.Name}");
+ Console.WriteLine($"Manager's manager: {restored.Manager.Manager.Name}");
+ Console.WriteLine($"Self-reference intact: {ReferenceEquals(restored.Manager, restored.Manager.Manager)}");
+ Console.WriteLine("Self-referencing works!");
+ }
+
+ static void TestPolymorphism()
+ {
+ object[] items = new object[]
+ {
+ "A string",
+ 42,
+ new User { Id = 1, Name = "ThisGuy", Email = "ThisGuy@test.com", CreatedAt = DateTime.Now },
+ new Order { OrderId = Guid.NewGuid(), TotalAmount = 99.99m, Status = OrderStatus.Pending }
+ };
+
+ var bytes = FastBin.Serialize(items);
+ var restored = FastBin.Deserialize