/// <summary> /// Check object clone immutability and independency: /// Ensures the data in object clone equial to original. /// Ensures no shared references between original and cloned objects (each object is a fully independent). /// </summary> /// <param name="original"></param> /// <returns></returns> public static async Task AssertCloneIndependency(this ICloneable original) { await Task.Run(() => { var clone = original.Clone(); var sOriginal = JsonSerializer.Serialize((object)original, new JsonSerializerOptions() { WriteIndented = true }); var sClone = JsonSerializer.Serialize(clone, new JsonSerializerOptions() { WriteIndented = true }); if (!sOriginal.Equals(sClone)) // Ensure data in objects is equal { throw new PlatformException(@$ "Clone check failed: object and clone not equal."); } original.AssertNoSharedRefsWith(clone); // Ensure no shared references between objects (each object is a fully independent) }); }