Example #1
0
        public void Initialize(MainForm mainFormRef)
        {
            _initialized = true;
            MainFormRef  = mainFormRef;
            Progress     = new ProgressMonitor();
            Logger       = new Logger(MainFormRef.GetOutputConsole());
            TilingEngine = new TilingEngine();
            MergeEngine  = new MergeEngine();

            // Update settings
            ReloadConfig();
        }
Example #2
0
        public void TestAutomerge()
        {
            var source  = new StringSource("ABCABBA");
            var target1 = new StringSource("CBABAC");
            var target2 = new StringSource("ABCABBAD");

            var finalControl = new List <Operation>
            {
                new Operation(OperationKind.Delete, 0, source),
                new Operation(OperationKind.Delete, 1, source),
                new Operation(OperationKind.Equal, 2, source),
                new Operation(OperationKind.Insert, 1, target1),
                new Operation(OperationKind.Equal, 3, source),
                new Operation(OperationKind.Equal, 4, source),
                new Operation(OperationKind.Delete, 5, source),
                new Operation(OperationKind.Insert, 7, target2),
                new Operation(OperationKind.Insert, 5, target1)
            };

            var sourceTarget1 = this.m_diffEngine.GetDiff(source, target1);
            var sourceTarget2 = this.m_diffEngine.GetDiff(source, target2);

            Assert.IsNotNull(sourceTarget1);
            Assert.IsNotNull(sourceTarget2);

            var merge = new MergeEngine(ResolveStrategyAction.AcceptFirst, false);
            var final = merge.GetMergeOperations(sourceTarget1.ToList(), sourceTarget2.ToList()).ToList();

            Assert.IsNotNull(final);

            var equal = finalControl.Count == final.Count;

            Assert.IsTrue(equal);

            for (var i = 0; i < finalControl.Count; i++)
            {
                var op = final[i];
                Assert.IsTrue(op != null && Equals(op, finalControl[i]));
            }
        }
Example #3
0
        public void TestAutomergeAcceptFirstConflict()
        {
            var source  = new StringSource("ABC");
            var target1 = new StringSource("ABD");
            var target2 = new StringSource("ABR");

            var finalControl = new List <Operation>
            {
                new Operation(OperationKind.Equal, 0, source),
                new Operation(OperationKind.Equal, 1, source),
                new Operation(OperationKind.Delete, 2, source),
                new Operation(OperationKind.Insert, 2, target1, true),
            };

            var sourceTarget1 = this.m_diffEngine.GetDiff(source, target1);
            var sourceTarget2 = this.m_diffEngine.GetDiff(source, target2);

            Assert.IsNotNull(sourceTarget1);
            Assert.IsNotNull(sourceTarget2);

            var merge = new MergeEngine(ResolveStrategyAction.AcceptFirst, true);

            merge.ConflictOperationsResolveStrategies.Add(OperationKind.Equal, new ResolveStrategy(ResolveStrategyAction.AcceptFirst, false));
            merge.ConflictOperationsResolveStrategies.Add(OperationKind.Delete, new ResolveStrategy(ResolveStrategyAction.AcceptFirst, false));

            var final = merge.GetMergeOperations(sourceTarget1.ToList(), sourceTarget2.ToList()).ToList();

            Assert.IsNotNull(final);

            var equal = finalControl.Count == final.Count;

            Assert.IsTrue(equal);

            for (var i = 0; i < finalControl.Count; i++)
            {
                var op = final[i];
                Assert.IsTrue(op != null && Equals(op, finalControl[i]));
            }
        }
Example #4
0
        private static void Main(string[] args)
        {
            if (args == null ||
                args.Length == 0 ||
                (args.Length != 4 && args.Length != 5) ||
                args.Any(string.IsNullOrEmpty))
            {
                PrintUsage();
                return;
            }

            var operation = args[0]?.Replace("-", string.Empty).ToUpperInvariant();

            if (string.IsNullOrEmpty(operation))
            {
                PrintUsage();
                return;
            }
            var     outToConsole = args.Length == 4;
            ISource source       = null,
                    target1      = null,
                    target2      = null;

            switch (Array.IndexOf(m_operations, operation))
            {
            case 0:
                source  = new StringSource(args[1]);
                target1 = new StringSource(args[2]);
                target2 = new StringSource(args[3]);
                break;

            case 1:
                try
                {
                    source  = new TextFileSource(args[1]);
                    target1 = new TextFileSource(args[2]);
                    target2 = new TextFileSource(args[3]);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Во время загрузки файлов произошла ошибка:");
                    Console.WriteLine(ex.Message);
                    PrintUsage();
                    return;
                }

                break;

            default:
                PrintUsage();
                break;
            }
            var diffEngine  = new MyersDiffEngine();
            var operations1 = diffEngine.GetDiff(source, target1);
            var operations2 = diffEngine.GetDiff(source, target2);

            var mergeEngine = new MergeEngine(ResolveStrategyAction.AcceptFirst, false);

            mergeEngine.ConflictOperationsResolveStrategies.Add(OperationKind.Insert, new ResolveStrategy(ResolveStrategyAction.AcceptAll, true));
            var final = mergeEngine.GetMergeOperations(operations1.ToList(), operations2.ToList());

            Console.WriteLine("Эталон: {0}", source);
            Console.WriteLine("Первый элемент: {0}", target1);
            Console.WriteLine("Второй элемент: {0}", target2);
            var sb = new StringBuilder();

            foreach (var op in final)
            {
                switch (op.Kind)
                {
                case OperationKind.Equal:
                case OperationKind.Insert:
                default:

                    sb.AppendFormat("{0}{1}", op.IsConflict ? " Конфликт! >" : string.Empty, op.Source[op.Index]);
                    break;

                case OperationKind.Unknown:
                case OperationKind.Delete:
                    break;
                }
            }
            Console.WriteLine();
            Console.WriteLine("---РЕЗУЛЬТАТ---");
            if (outToConsole)
            {
                Console.WriteLine(sb.ToString());
            }
            else
            {
                try
                {
                    using (var wrtr = new StreamWriter(args[4]))
                    {
                        wrtr.Write(sb.ToString());
                        wrtr.Close();
                    }
                    Console.WriteLine("Изменения записаны в файл {0}", args[4]);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Во время записи результата в файл произошла ошибка:");
                    Console.WriteLine(ex.Message);
                    PrintUsage();
                    return;
                }
            }
            Console.WriteLine();
            Console.WriteLine("Нажмите <Enter> для завершения работы...");
            Console.ReadLine();
        }
Example #5
0
        public byte[] StartCorruption(byte[] ROM)
        {
            switch (CorruptionEngineComboBox.Text)
            {
            case "Nightmare Engine":
                if (CorruptnthbyteCheckbox.Checked)
                {
                    //CorruptNTH selected
                    int i1 = StartByte;
                    while (i1 <= EndByte)
                    {
                        Enum.TryParse(objForm2.ComboBox1.Text, out CorruptionOptions corruptiontype);
                        NightmareEngine.CorruptByte(ROM, corruptiontype, i1);
                        i1 += (int)EveryNthByte.Value;
                    }
                }
                else     //Intensity Mode
                {
                    for (int i1 = 0; i1 <= Intensity.Value - 1; i1++)
                    {
                        Enum.TryParse(objForm2.ComboBox1.Text, out CorruptionOptions corruptiontype);
                        //MessageBox.Show(StartByte.ToString() + EndByte.ToString());
                        NightmareEngine.CorruptByte(ROM, corruptiontype, rnd.Next(StartByte, EndByte));
                    }
                }
                break;

            case "Lerp Engine":
                if (CorruptnthbyteCheckbox.Checked)
                {
                    //CorruptNTH selected
                    int i1 = StartByte;
                    while (i1 <= EndByte)
                    {
                        LerpEngine.CorruptByte(ROM, i1);
                        i1 += (int)EveryNthByte.Value;
                    }
                }
                else     //Intensity Mode
                {
                    for (int i1 = 0; i1 <= Intensity.Value - 1; i1++)
                    {
                        LerpEngine.CorruptByte(ROM, rnd.Next(StartByte, EndByte));
                    }
                }
                break;

            case "Merge Engine":
                if (CorruptnthbyteCheckbox.Checked)
                {
                    //CorruptNTH selected
                    int i1 = StartByte;
                    while (i1 <= EndByte)
                    {
                        byte[] ROMmerge = File.ReadAllBytes(objForm2.TextBox5.Text);
                        Enum.TryParse(objForm2.CorrTypeMerge.Text, out CorruptionOptions corruptiontype);
                        MergeEngine.CorruptByte(ROM, ROMmerge, corruptiontype, i1);
                    }
                }
                else     //Intensity Mode
                {
                    for (int i1 = 0; i1 <= Intensity.Value - 1; i1++)
                    {
                        byte[] ROMmerge = File.ReadAllBytes(objForm2.TextBox5.Text);
                        Enum.TryParse(objForm2.CorrTypeMerge.Text, out CorruptionOptions corruptiontype);
                        MergeEngine.CorruptByte(ROM, ROMmerge, corruptiontype, rnd.Next(StartByte, EndByte));
                    }
                }
                break;

            case "Manual":
                if (CorruptnthbyteCheckbox.Checked)     //CorruptNTH mode
                {
                    int i = StartByte;
                    while (i <= EndByte)
                    {
                        ManualEngine.CorruptByte(ROM, i, StartByte, EndByte);
                        i += (int)EveryNthByte.Value;
                    }
                }
                else     //Intense mode
                {
                    for (int i1 = 0; i1 <= Intensity.Value - 1; i1++)
                    {
                        long i = rnd.Next(StartByte, EndByte);
                        ManualEngine.CorruptByte(ROM, i, StartByte, EndByte);
                    }
                }
                break;

            default:
                MessageBox.Show("Default case was hit in the StartCorruption function!");
                break;
            }
            return(ROM);
        }