public void Hierarchy_WithHierarchy_Remove1By1_MaintainsConsistency()
        {
            var go = m_Objects.CreateGameObject("root");
            var c1 = m_Objects.CreateGameObject("c1");

            c1.transform.SetParent(go.transform);
            var c2 = m_Objects.CreateGameObject("c2");

            c2.transform.SetParent(go.transform);
            var c3 = m_Objects.CreateGameObject("c3");

            c3.transform.SetParent(go.transform);
            IncrementalHierarchyFunctions.Build(new [] { go }, out m_Hierarchy, Allocator.Temp);
            AssertSize(4);
            AssertConsistency(go);
            IncrementalHierarchyFunctions.Remove(m_Hierarchy, new NativeArray <int>(new [] { c2.GetInstanceID() }, Allocator.Temp));
            Object.DestroyImmediate(c2);
            AssertSize(3);
            AssertConsistency(go);
            IncrementalHierarchyFunctions.Remove(m_Hierarchy, new NativeArray <int>(new [] { c1.GetInstanceID() }, Allocator.Temp));
            Object.DestroyImmediate(c1);
            AssertSize(2);
            AssertConsistency(go);
            IncrementalHierarchyFunctions.Remove(m_Hierarchy, new NativeArray <int>(new [] { c3.GetInstanceID() }, Allocator.Temp));
            Object.DestroyImmediate(c3);
            AssertSize(1);
            AssertConsistency(go);
            IncrementalHierarchyFunctions.Remove(m_Hierarchy, new NativeArray <int>(new [] { go.GetInstanceID() }, Allocator.Temp));
            Object.DestroyImmediate(go);
            AssertSize(0);
        }
        public void Hierarchy_WithSingleGameObject_IsEmptyAfterDelete()
        {
            var go = m_Objects.CreateGameObject("root");

            IncrementalHierarchyFunctions.Build(new [] { go }, out m_Hierarchy, Allocator.Temp);
            AssertSize(1);
            AssertConsistency(go);
            IncrementalHierarchyFunctions.Remove(m_Hierarchy, new NativeArray <int>(new [] { go.GetInstanceID() }, Allocator.Temp));
            AssertSize(0);
        }
        public void Hierarchy_WithHierarchy_DeleteRemovesFullHierarchy()
        {
            var go = m_Objects.CreateGameObject("root");

            m_Objects.CreateGameObject("c1").transform.SetParent(go.transform);
            m_Objects.CreateGameObject("c2").transform.SetParent(go.transform);
            m_Objects.CreateGameObject("c3").transform.SetParent(go.transform);
            IncrementalHierarchyFunctions.Build(new [] { go }, out m_Hierarchy, Allocator.Temp);
            AssertSize(4);
            AssertConsistency(go);
            IncrementalHierarchyFunctions.Remove(m_Hierarchy, new NativeArray <int>(new [] { go.GetInstanceID() }, Allocator.Temp));
            AssertSize(0);
        }
        public void Hierarchy_WithHierarchy_DeleteOutOfOrder_MaintainsConsistency()
        {
            var root1 = m_Objects.CreateGameObject("root1");
            var c1    = m_Objects.CreateGameObject("c1");

            c1.transform.SetParent(root1.transform);
            var c2 = m_Objects.CreateGameObject("c2");

            c2.transform.SetParent(c1.transform);
            IncrementalHierarchyFunctions.Build(new [] { root1 }, out m_Hierarchy, Allocator.Temp);
            AssertSize(3);
            AssertConsistency(root1);
            IncrementalHierarchyFunctions.Remove(m_Hierarchy, new NativeArray <int>(new [] { c2.GetInstanceID(), c1.GetInstanceID() }, Allocator.Temp));
            Object.DestroyImmediate(c1);
            AssertSize(1);
            AssertConsistency(root1);
        }
        public void Hierarchy_WithHierarchy_DeleteSeparateHierarchy_MaintainsConsistency()
        {
            var root1 = m_Objects.CreateGameObject("root1");

            m_Objects.CreateGameObject("c1").transform.SetParent(root1.transform);
            var root2 = m_Objects.CreateGameObject("root2");

            m_Objects.CreateGameObject("c2").transform.SetParent(root2.transform);
            IncrementalHierarchyFunctions.Build(new [] { root1, root2 }, out m_Hierarchy, Allocator.Temp);
            AssertSize(4);
            AssertConsistency(root1);
            AssertConsistency(root2);
            IncrementalHierarchyFunctions.Remove(m_Hierarchy, new NativeArray <int>(new [] { root1.GetInstanceID() }, Allocator.Temp));
            Object.DestroyImmediate(root1);
            AssertSize(2);
            AssertConsistency(root2);
            IncrementalHierarchyFunctions.Remove(m_Hierarchy, new NativeArray <int>(new [] { root2.GetInstanceID() }, Allocator.Temp));
            AssertSize(0);
        }