Я разрабатываю симулятор для машины. Он считывает файл, сохраняет его в виде строки (в виде двоичного числа) в массив, который должен имитировать память компьютера. Затем он передается интерпретатору, который получает первый элемент массива, и на основе первых 4 символов он отправляется другому классу.
Пример одного из этих классов приведен ниже:
public class Add {
private String cell;
Add() {
cell = null;
}
/**
* Method that performs the operation add.
*/
public void addition() {
// TODO Figure out 2's complement.
Loader instance = Loader.Instance();
cell = instance.getCell();
Integer DR1num = Integer.parseInt(cell.substring(4, 6), 2);
Integer SR1num = Integer.parseInt(cell.substring(7, 9), 2);
if (cell.charAt(10) == '0') {
Integer SR2num = Integer.parseInt(cell.substring(13, 15), 2);
Integer addedval = instance.getRegister(SR1num)
+ instance.getRegister(SR2num);
instance.setCCR(addedval);
instance.setRegister(DR1num, addedval);
} else if (cell.charAt(10) == '1') {
Integer immediate = Integer.parseInt(cell.substring(11, 15), 2);
Integer addedval = instance.getRegister(SR1num) + immediate;
instance.setCCR(addedval);
instance.setRegister(DR1num, addedval);
} else {
System.err.println("Invalid Char at Position 10. Expected 0 or 1");
}
instance.incrementPC();
}
public String getcell() {
return cell;
}
}
Описание переменных: экземпляр — это одноэлементная ячейка — это двоичная строка, которая хранится в массиве памяти. DR1num — регистр назначения. (также известный как R0, R1, ... R7) SR1num — исходный регистр
Что делает эта операция, так это либо берет два исходных регистра и складывает их вместе (затем устанавливает регистр кода состояния, если он положительный, отрицательный или нулевой), либо берет исходный регистр и непосредственное значение и складывает их вместе. Результат сохраняется в регистре назначения.
Я решил использовать одноэлементный класс, потому что мне нужно, чтобы память, регистры общего назначения, регистр кода состояния и программный счетчик были синхронизированы во всей программе. Проблема, которую это представляет, заключается в том, что я понятия не имею, как тестировать свою программу (желательно с помощью jUnit).
Единственный способ протестировать программу, который я могу придумать, — написать набор отдельных файлов, чтобы программа могла их прочитать. За исключением того, что это означает, что вместо тестирования только одной части моей программы она тестирует как минимум три класса. Класс, который читает программу и содержит все методы для синглтона, класс, который определяет, какой класс вызывать, и, наконец, класс, который фактически выполняет эту часть (например, Add).
У кого-нибудь есть предложения по лучшему способу тестирования?