File: Differencing\TestTreeComparer.cs
Web Access
Project: src\src\Workspaces\CoreTest\Microsoft.CodeAnalysis.Workspaces.UnitTests.csproj (Microsoft.CodeAnalysis.Workspaces.UnitTests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
 
#nullable disable
 
using System;
using System.Collections.Generic;
using Microsoft.CodeAnalysis.Text;
 
namespace Microsoft.CodeAnalysis.Differencing.UnitTests
{
    public class TestTreeComparer : TreeComparer<TestNode>
    {
        public static readonly TestTreeComparer Instance = new TestTreeComparer();
 
        private TestTreeComparer()
        {
        }
 
        protected internal override int LabelCount
        {
            get
            {
                return TestNode.MaxLabel + 1;
            }
        }
 
        public override double GetDistance(TestNode left, TestNode right)
            => Math.Abs((double)left.Value - right.Value) / TestNode.MaxValue;
 
        public override bool ValuesEqual(TestNode oldNode, TestNode newNode)
            => oldNode.Value == newNode.Value;
 
        protected internal override IEnumerable<TestNode> GetChildren(TestNode node)
            => node.Children;
 
        protected internal override IEnumerable<TestNode> GetDescendants(TestNode node)
        {
            yield return node;
 
            foreach (var child in node.Children)
            {
                foreach (var descendant in GetDescendants(child))
                {
                    yield return descendant;
                }
            }
        }
 
        protected internal override int GetLabel(TestNode node)
            => node.Label;
 
        protected internal override TextSpan GetSpan(TestNode node)
            => new TextSpan(0, 10);
 
        protected internal override int TiedToAncestor(int label)
            => 0;
 
        protected internal override bool TreesEqual(TestNode left, TestNode right)
            => left.Root == right.Root;
 
        protected internal override bool TryGetParent(TestNode node, out TestNode parent)
        {
            parent = node.Parent;
            return parent != null;
        }
    }
}