Esempio n. 1
0
        public static StringDiffResult Compare(string expected, string actual)
        {
            if (expected == null)
            {
                throw new ArgumentNullException(nameof(expected));
            }

            if (actual == null)
            {
                throw new ArgumentNullException(nameof(actual));
            }

            var length = Math.Min(expected.Length, actual.Length);

            var comparison = Enumerable
                             .Range(0, length)
                             .Zip(expected, (i, c) => new { I = i, Expected = c })
                             .Zip(actual, (z, c) => new { z.I, AreEqual = c.Equals(z.Expected) })
                             .ToArray();

            var areEqual = expected.Length == actual.Length && comparison.All(x => x.AreEqual);

            if (areEqual)
            {
                return(new StringDiffResult(true));
            }

            var firstDifference      = comparison.FirstOrDefault(x => !x.AreEqual);
            var firstDifferenceIndex = firstDifference == null ? length : firstDifference.I;

            return(StringDiff.CreateResult(expected, actual, firstDifferenceIndex));
        }
Esempio n. 2
0
        private static StringDiffResult CreateResult(string expected, string actual, int firstDifferenceIndex)
        {
            var details = $"Expected:\n{StringDiff.CreateAroundIndex(expected, firstDifferenceIndex)}\nActual:\n{StringDiff.CreateAroundIndex(actual, firstDifferenceIndex)}";

            return(new StringDiffResult(false, firstDifferenceIndex, details));
        }