Пример #1
0
        private static void PerformTest(InstructionTestSet set)
        {
            Log.WriteLine("Beginning test for " + set.TestNumber);
            int[] registers;
            int[] command;

            foreach (var kvp in _allOpCodes)
            {
                var opcode = kvp.Value;

                // Step 1, create a clean state as desired by the test
                registers = new int[4];
                Array.Copy(set.InitialRegisterState, registers, registers.Length);
                command = new int[4];                 // Hypothetically, this should not be required - but we track it for debug reasons
                Array.Copy(set.Command, command, command.Length);

                // Step 2, run the command and check that it could make sense i.e. doesn't attempt to address outside the register range
                if (opcode.Execute(command, registers))
                {
                    for (int i = 0; i < command.Length; i++)
                    {
                        if (set.Command[i] != command[i])
                        {
                            Log.WriteLine("Command arguments were mutated for command " + opcode.Name);
                        }
                    }

                    // Step 3, check the results of the commands
                    bool allMatch = true;
                    for (int i = 0; i < registers.Length; i++)
                    {
                        if (set.FinalRegisterState[i] != registers[i])
                        {
                            allMatch = false;
                            break;
                        }
                    }

                    if (allMatch)
                    {
                        Log.WriteLine("Test Number " + set.TestNumber + " - " + opcode.Name + " matches!");
                        set.MatchingOpCodes.Add(opcode.Name);
                        Log.WriteLine(set.DebugLog());
                        Log.WriteLine(DumpRegisters(registers));
                    }
                    else
                    {
                        Log.WriteLine("Test Number " + set.TestNumber + " - " + opcode.Name + " did not match");
                        Log.WriteLine(set.DebugLog());
                        Log.WriteLine(DumpRegisters(registers));
                    }
                }
                else
                {
                    Log.WriteLine("Test Number " + set.TestNumber + " - " + opcode.Name + " did not execute");
                }
            }
        }