/// <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)
     });
 }