public DiffEngineValidator()
        {
            var standard = new DmitryBychenko();

            var engineTypes = Assembly.GetExecutingAssembly().GetTypes()
                              .Where(t => t.IsClass && typeof(ITextDiff).IsAssignableFrom(t) && t != typeof(DmitryBychenko))
                              .ToArray();

            EnginesToValidate = engineTypes.Select(t => Activator.CreateInstance(t) as ITextDiff).ToArray();
            EnginesToValidate = new ITextDiff[] { new DmitryBest() };
        }
        public void Validate()
        {
            var standard        = new DmitryBychenko();
            var baselineResults = GetTestResults(standard);

            foreach (var engine in EnginesToValidate)
            {
                var engineResult = GetTestResults(engine);
                for (int i = 0, l = engineResult.Count; i < l; i++)
                {
                    var errorMessage = AssertAreEqual(baselineResults[i], engineResult[i]);
                    if (errorMessage != null)
                    {
                        throw new InvalidOperationException($"{engine.GetType().Name} on test {i + 1} failed. {errorMessage}");
                    }
                }
            }
        }