Я занимаюсь разработкой симулятора для машины. Он считывает файл, сохраняет его в виде строки (в виде двоичного числа) в массиве, который должен имитировать память компьютера. Затем он передается интерпретатору, который получает первый элемент массива и на основе первых 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).
У кого-нибудь есть предложения по улучшению способа тестирования?