public void DeepFreeze()
        {
            var deep = new FreezeInside("root")
                           {
                               Single = new FreezeInside("single"),
                               Multiple = new[] {new FreezeInside("item1"), new FreezeInside("item2")}
                           };

            var frozen = deep.MakeFreezable<IFreezeInside>();
            frozen.Freeze();

            frozen.Single.IsFrozen().ShouldBeTrue();

            frozen.Multiple[0].IsFrozen().ShouldBeTrue();
            frozen.Multiple[1].IsFrozen().ShouldBeTrue();
        }
        public void DeepClone()
        {
            var deep = new FreezeInside("root")
                           {
                               Single = new FreezeInside("single"),
                               Multiple = new[] {new FreezeInside("item1"), new FreezeInside("item2")}
                           };

            var frozen = deep.MakeFreezable<IFreezeInside>();
            frozen.Freeze();

            IFreezeInside clone = frozen.CloneUnfrozen();

            clone.Single.IsFrozen().ShouldBeFalse();

            clone.Multiple[0].IsFrozen().ShouldBeFalse();
            clone.Multiple[1].IsFrozen().ShouldBeFalse();
        }