mirror of
https://github.com/simon987/Much-Assembly-Required.git
synced 2025-12-13 22:59:02 +00:00
Moved tests to appropriate directory
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
package net.simon987.server.assembly;
|
||||
|
||||
import net.simon987.server.ServerConfiguration;
|
||||
import net.simon987.server.assembly.exception.CancelledException;
|
||||
import net.simon987.server.user.User;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
public class CPUTest {
|
||||
|
||||
@Test
|
||||
public void executeInstruction() throws CancelledException {
|
||||
|
||||
ServerConfiguration config = new ServerConfiguration("config.properties");
|
||||
User user = new User();
|
||||
CPU cpu = new CPU(config, user);
|
||||
|
||||
|
||||
for(int i = 0 ; i < 3 ; i++){
|
||||
//Execute every possible instruction with random values in memory
|
||||
cpu.reset();
|
||||
cpu.getMemory().clear();
|
||||
Random random = new Random();
|
||||
byte[] randomBytes = new byte[cpu.getMemory().getWords().length * 2];
|
||||
random.nextBytes(randomBytes);
|
||||
|
||||
for (int machineCode = Character.MIN_VALUE; machineCode < Character.MAX_VALUE; machineCode++) {
|
||||
Instruction instruction = cpu.getInstructionSet().get(machineCode & 0x03F); // 0000 0000 00XX XXXX
|
||||
|
||||
int source = (machineCode >> 11) & 0x001F; // XXXX X000 0000 0000
|
||||
int destination = (machineCode >> 6) & 0x001F; // 0000 0XXX XX00 0000
|
||||
|
||||
cpu.executeInstruction(instruction, source, destination);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package net.simon987.server.assembly;
|
||||
|
||||
import net.simon987.server.ServerConfiguration;
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
|
||||
public class MemoryTest {
|
||||
@Test
|
||||
public void getSet() {
|
||||
ServerConfiguration config = new ServerConfiguration("config.properties");
|
||||
int memorySize = config.getInt("memory_size");
|
||||
Memory memory = new Memory(memorySize);
|
||||
|
||||
memory.set(1, 1);
|
||||
assertEquals(1, memory.get(1));
|
||||
|
||||
memory.set(memorySize / 2 - 1, 1);
|
||||
assertEquals(1, memory.get(memorySize / 2 - 1));
|
||||
|
||||
memory.get(memorySize / 2);
|
||||
memory.get(-1);
|
||||
|
||||
memory.set(memorySize / 2, 1);
|
||||
memory.set(-1, 1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void write() {
|
||||
|
||||
ServerConfiguration config = new ServerConfiguration("config.properties");
|
||||
int memorySize = config.getInt("memory_size");
|
||||
Memory memory = new Memory(memorySize);
|
||||
|
||||
|
||||
assertTrue(memory.write(0, new char[memorySize], 0, memorySize));
|
||||
assertFalse(memory.write(0, new char[memorySize], 0, memorySize + 1));
|
||||
assertFalse(memory.write(0, new char[memorySize], 0, -1));
|
||||
assertFalse(memory.write(-1, new char[memorySize], 0, 10));
|
||||
|
||||
assertFalse(memory.write(memorySize, new char[15], 0, 1));
|
||||
assertFalse(memory.write((memorySize) - 5, new char[11], 0, 6));
|
||||
assertTrue(memory.write((memorySize) - 5, new char[11], 0, 5));
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,151 @@
|
||||
package net.simon987.server.assembly;
|
||||
|
||||
import net.simon987.server.assembly.exception.InvalidOperandException;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
|
||||
|
||||
public class OperandTest {
|
||||
|
||||
|
||||
@Test
|
||||
public void Operand() {
|
||||
|
||||
RegisterSet registerSet = new DefaultRegisterSet();
|
||||
HashMap<String, Character> labels = new HashMap<>(10);
|
||||
labels.put("label1", (char) 10);
|
||||
labels.put("label2", (char) 20);
|
||||
labels.put("label3", (char) 30);
|
||||
labels.put("label4", (char) 40);
|
||||
|
||||
|
||||
//Valid operands
|
||||
try {
|
||||
//Register
|
||||
Operand reg1 = new Operand("a", labels, registerSet, 0);
|
||||
assertEquals(OperandType.REGISTER16, reg1.getType());
|
||||
assertEquals(1, reg1.getValue());
|
||||
assertEquals(0, reg1.getData());
|
||||
|
||||
Operand reg2 = new Operand("a ", labels, registerSet, 0);
|
||||
assertEquals(OperandType.REGISTER16, reg2.getType());
|
||||
assertEquals(1, reg2.getValue());
|
||||
assertEquals(0, reg2.getData());
|
||||
|
||||
Operand reg3 = new Operand(" A ", labels, registerSet, 0);
|
||||
assertEquals(OperandType.REGISTER16, reg3.getType());
|
||||
assertEquals(1, reg3.getValue());
|
||||
assertEquals(0, reg3.getData());
|
||||
|
||||
Operand reg4 = new Operand("B", labels, registerSet, 0);
|
||||
assertEquals(OperandType.REGISTER16, reg4.getType());
|
||||
assertEquals(2, reg4.getValue());
|
||||
assertEquals(0, reg4.getData());
|
||||
|
||||
//Immediate
|
||||
Operand imm1 = new Operand(" +12", labels, registerSet, 0);
|
||||
assertEquals(OperandType.IMMEDIATE16, imm1.getType());
|
||||
assertEquals(Operand.IMMEDIATE_VALUE, imm1.getValue());
|
||||
assertEquals(12, imm1.getData());
|
||||
|
||||
Operand imm2 = new Operand(" -12", labels, registerSet, 0);
|
||||
assertEquals(OperandType.IMMEDIATE16, imm2.getType());
|
||||
assertEquals(Operand.IMMEDIATE_VALUE, imm2.getValue());
|
||||
assertEquals(-12, imm2.getData());
|
||||
|
||||
Operand imm3 = new Operand(" 0xABCD", labels, registerSet, 0);
|
||||
assertEquals(OperandType.IMMEDIATE16, imm3.getType());
|
||||
assertEquals(Operand.IMMEDIATE_VALUE, imm3.getValue());
|
||||
assertEquals(0xABCD, imm3.getData());
|
||||
|
||||
Operand imm4 = new Operand(" label1", labels, registerSet, 0);
|
||||
assertEquals(OperandType.IMMEDIATE16, imm4.getType());
|
||||
assertEquals(Operand.IMMEDIATE_VALUE, imm4.getValue());
|
||||
assertEquals(10, imm4.getData());
|
||||
|
||||
//Memory Immediate
|
||||
Operand mem1 = new Operand("[+12]", labels, registerSet, 0);
|
||||
assertEquals(OperandType.MEMORY_IMM16, mem1.getType());
|
||||
assertEquals(Operand.IMMEDIATE_VALUE_MEM, mem1.getValue());
|
||||
assertEquals(12, mem1.getData());
|
||||
|
||||
Operand mem2 = new Operand("[-12 ]", labels, registerSet, 0);
|
||||
assertEquals(OperandType.MEMORY_IMM16, mem2.getType());
|
||||
assertEquals(Operand.IMMEDIATE_VALUE_MEM, mem2.getValue());
|
||||
assertEquals(-12, mem2.getData());
|
||||
|
||||
Operand mem3 = new Operand(" [ 0xABCD]", labels, registerSet, 0);
|
||||
assertEquals(OperandType.MEMORY_IMM16, mem3.getType());
|
||||
assertEquals(Operand.IMMEDIATE_VALUE_MEM, mem3.getValue());
|
||||
assertEquals(0xABCD, mem3.getData());
|
||||
|
||||
Operand mem4 = new Operand("[ label1 ]", labels, registerSet, 0);
|
||||
assertEquals(OperandType.MEMORY_IMM16, mem4.getType());
|
||||
assertEquals(Operand.IMMEDIATE_VALUE_MEM, mem4.getValue());
|
||||
assertEquals(10, mem4.getData());
|
||||
|
||||
//Memory Reg
|
||||
Operand mem5 = new Operand("[ A ]", labels, registerSet, 0);
|
||||
assertEquals(OperandType.MEMORY_REG16, mem5.getType());
|
||||
assertEquals(1 + registerSet.size(), mem5.getValue());
|
||||
assertEquals(0, mem5.getData());
|
||||
|
||||
Operand mem6 = new Operand("[ B ]", labels, registerSet, 0);
|
||||
assertEquals(OperandType.MEMORY_REG16, mem6.getType());
|
||||
assertEquals(2 + registerSet.size(), mem6.getValue());
|
||||
assertEquals(0, mem6.getData());
|
||||
|
||||
//Memory Reg + displacement
|
||||
Operand mem7 = new Operand("[ A + 1 ]", labels, registerSet, 0);
|
||||
assertEquals(OperandType.MEMORY_REG_DISP16, mem7.getType());
|
||||
assertEquals(1 + 2 * registerSet.size(), mem7.getValue());
|
||||
assertEquals(1, mem7.getData());
|
||||
|
||||
Operand mem8 = new Operand("[ B + label1 ]", labels, registerSet, 0);
|
||||
assertEquals(OperandType.MEMORY_REG_DISP16, mem8.getType());
|
||||
assertEquals(2 + 2 * registerSet.size(), mem8.getValue());
|
||||
assertEquals(10, mem8.getData());
|
||||
|
||||
Operand mem9 = new Operand("[ BP + 1 ]", labels, registerSet, 0);
|
||||
assertEquals(OperandType.MEMORY_REG_DISP16, mem9.getType());
|
||||
assertEquals(8 + 2 * registerSet.size(), mem9.getValue());
|
||||
assertEquals(1, mem9.getData());
|
||||
|
||||
|
||||
} catch (InvalidOperandException e) {
|
||||
fail("Failed trying to parse a valid operand");
|
||||
}
|
||||
|
||||
//Invalid operands
|
||||
try{ new Operand("aa", labels, registerSet, 0); } catch (InvalidOperandException e){}
|
||||
try{ new Operand("a1", labels, registerSet, 0); } catch (InvalidOperandException e){}
|
||||
try{ new Operand("a_", labels, registerSet, 0); } catch (InvalidOperandException e){}
|
||||
try{ new Operand("_a", labels, registerSet, 0); } catch (InvalidOperandException e){}
|
||||
try{ new Operand("_1", labels, registerSet, 0); } catch (InvalidOperandException e){}
|
||||
try{ new Operand("S", labels, registerSet, 0); } catch (InvalidOperandException e){}
|
||||
try{ new Operand("label1_", labels, registerSet, 0); } catch (InvalidOperandException e){}
|
||||
try{ new Operand("+label1", labels, registerSet, 0); } catch (InvalidOperandException e){}
|
||||
try{ new Operand("[- 12]", labels, registerSet, 0); } catch (InvalidOperandException e){}
|
||||
try{ new Operand("[12+1]", labels, registerSet, 0); } catch (InvalidOperandException e){}
|
||||
try{ new Operand("[+label1", labels, registerSet, 0); } catch (InvalidOperandException e){}
|
||||
try{ new Operand("[*12]", labels, registerSet, 0); } catch (InvalidOperandException e){}
|
||||
try{ new Operand("[-A]", labels, registerSet, 0); } catch (InvalidOperandException e){}
|
||||
try{ new Operand("[A B]", labels, registerSet, 0); } catch (InvalidOperandException e){}
|
||||
try{ new Operand("[A + B]", labels, registerSet, 0); } catch (InvalidOperandException e){}
|
||||
try{ new Operand("[A + -1]", labels, registerSet, 0); } catch (InvalidOperandException e){}
|
||||
try{ new Operand("[A + ]", labels, registerSet, 0); } catch (InvalidOperandException e){}
|
||||
try{ new Operand("[]", labels, registerSet, 0); } catch (InvalidOperandException e){}
|
||||
try{ new Operand("[A+A+]", labels, registerSet, 0); } catch (InvalidOperandException e){}
|
||||
try{ new Operand("[A+[1]]", labels, registerSet, 0); } catch (InvalidOperandException e){}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
package net.simon987.server.assembly;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
public class RegisterSetTest {
|
||||
@Test
|
||||
public void getIndex() {
|
||||
|
||||
RegisterSet registerSet = new RegisterSet();
|
||||
|
||||
Register r1 = new Register("R1");
|
||||
Register r2 = new Register("R2");
|
||||
|
||||
registerSet.put(1, r1);
|
||||
registerSet.put(2, r2);
|
||||
|
||||
assertEquals(1, registerSet.getIndex("R1"));
|
||||
assertEquals(2, registerSet.getIndex("R2"));
|
||||
|
||||
assertEquals(-1, registerSet.getIndex("Unknown register name"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getRegister() {
|
||||
|
||||
RegisterSet registerSet = new RegisterSet();
|
||||
|
||||
Register r1 = new Register("R1");
|
||||
Register r2 = new Register("R2");
|
||||
|
||||
registerSet.put(1, r1);
|
||||
registerSet.put(2, r2);
|
||||
|
||||
assertEquals(r1, registerSet.getRegister("R1"));
|
||||
assertEquals(r1, registerSet.getRegister(1));
|
||||
|
||||
assertEquals(r2, registerSet.getRegister("R2"));
|
||||
assertEquals(r2, registerSet.getRegister(2));
|
||||
|
||||
//Test unknown registers
|
||||
assertEquals(null, registerSet.getRegister("Unknown"));
|
||||
assertEquals(null, registerSet.getRegister(3));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void get() {
|
||||
RegisterSet registerSet = new RegisterSet();
|
||||
|
||||
Register r1 = new Register("R1");
|
||||
|
||||
registerSet.put(1, r1);
|
||||
|
||||
r1.setValue(10);
|
||||
assertEquals(10, registerSet.get(1));
|
||||
|
||||
//Test unknown indexes
|
||||
assertEquals(0, registerSet.get(2));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void set() {
|
||||
|
||||
RegisterSet registerSet = new RegisterSet();
|
||||
|
||||
Register r1 = new Register("R1");
|
||||
|
||||
registerSet.put(1, r1);
|
||||
registerSet.set(1, 10);
|
||||
|
||||
assertEquals(10, r1.getValue());
|
||||
|
||||
//Test unknown indexes
|
||||
registerSet.set(3, 10);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,161 @@
|
||||
package net.simon987.server.assembly.instruction;
|
||||
|
||||
import net.simon987.server.ServerConfiguration;
|
||||
import net.simon987.server.assembly.Memory;
|
||||
import net.simon987.server.assembly.Register;
|
||||
import net.simon987.server.assembly.RegisterSet;
|
||||
import net.simon987.server.assembly.Status;
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
|
||||
public class AddInstructionTest {
|
||||
|
||||
|
||||
/**
|
||||
* ADD mem/reg, mem/reg
|
||||
*/
|
||||
@Test
|
||||
public void addTargetTarget() {
|
||||
ServerConfiguration config = new ServerConfiguration("config.properties");
|
||||
int memorySize = config.getInt("memory_size");
|
||||
|
||||
//Memory
|
||||
Memory memory = new Memory(memorySize);
|
||||
memory.clear();
|
||||
|
||||
//RegisterSet
|
||||
RegisterSet registerSet = new RegisterSet();
|
||||
registerSet.put(1, new Register("T1"));
|
||||
registerSet.put(2, new Register("T2"));
|
||||
registerSet.clear();
|
||||
|
||||
//Status
|
||||
Status status = new Status();
|
||||
status.clear();
|
||||
|
||||
AddInstruction addInstruction = new AddInstruction();
|
||||
|
||||
//ADD mem, mem
|
||||
//Positive numbers
|
||||
memory.set(0, 10);
|
||||
memory.set(1, 10);
|
||||
addInstruction.execute(memory, 0, memory, 1, status);
|
||||
assertEquals(20, memory.get(0));
|
||||
assertEquals(10, memory.get(1));
|
||||
assertEquals(10, memory.get(1));
|
||||
//FLAGS Should be CF=0 ZF=0 SF=0 OF=0
|
||||
assertFalse(status.isSignFlag());
|
||||
assertFalse(status.isZeroFlag());
|
||||
assertFalse(status.isCarryFlag());
|
||||
assertFalse(status.isOverflowFlag());
|
||||
assertFalse(status.isBreakFlag());
|
||||
|
||||
memory.clear();
|
||||
memory.set(memorySize - 1, 10);
|
||||
memory.set(1, 10);
|
||||
addInstruction.execute(memory, memorySize - 1, memory, 1, status);
|
||||
assertEquals(20, memory.get(memorySize - 1));
|
||||
assertEquals(10, memory.get(1));
|
||||
//FLAGS Should be CF=0 ZF=0 SF=0 OF=0
|
||||
assertFalse(status.isSignFlag());
|
||||
assertFalse(status.isZeroFlag());
|
||||
assertFalse(status.isCarryFlag());
|
||||
assertFalse(status.isOverflowFlag());
|
||||
assertFalse(status.isBreakFlag());
|
||||
|
||||
//Large positive numbers
|
||||
memory.clear();
|
||||
memory.set(0, 2);
|
||||
memory.set(1, 0xFFFF);
|
||||
addInstruction.execute(memory, memorySize, memory, 1, status);
|
||||
assertEquals(1, memory.get(0));
|
||||
assertEquals(0xFFFF, memory.get(1));
|
||||
//FLAGS Should be CF=1 ZF=0 SF=0 OF=0
|
||||
assertFalse(status.isSignFlag());
|
||||
assertFalse(status.isZeroFlag());
|
||||
assertTrue(status.isCarryFlag());
|
||||
assertFalse(status.isOverflowFlag());
|
||||
assertFalse(status.isBreakFlag());
|
||||
|
||||
//Zero result
|
||||
memory.clear();
|
||||
memory.set(0, 1);
|
||||
memory.set(1, 0xFFFF);
|
||||
addInstruction.execute(memory, memorySize, memory, 1, status);
|
||||
assertEquals(0, memory.get(0));
|
||||
assertEquals(0xFFFF, memory.get(1));
|
||||
//FLAGS Should be CF=1 ZF=1 SF=0 OF=0
|
||||
assertTrue(status.isCarryFlag());
|
||||
assertTrue(status.isZeroFlag());
|
||||
assertFalse(status.isSignFlag());
|
||||
assertFalse(status.isOverflowFlag());
|
||||
assertFalse(status.isBreakFlag());
|
||||
|
||||
//Overflow
|
||||
memory.clear();
|
||||
memory.set(0, 0x8000);
|
||||
memory.set(1, 0xFFFF);
|
||||
addInstruction.execute(memory, 0, memory, 1, status);
|
||||
assertEquals(0x7FFF, memory.get(0));
|
||||
assertEquals(0xFFFF, memory.get(1));
|
||||
//FLAGS Should be CF=1 ZF=0 SF=0 OF=1
|
||||
assertTrue(status.isCarryFlag());
|
||||
assertFalse(status.isZeroFlag());
|
||||
assertFalse(status.isSignFlag());
|
||||
assertTrue(status.isOverflowFlag());
|
||||
assertFalse(status.isBreakFlag());
|
||||
|
||||
//ADD reg, reg
|
||||
//Positive numbers
|
||||
registerSet.set(1, 10);
|
||||
registerSet.set(2, 10);
|
||||
addInstruction.execute(registerSet, 1, registerSet, 2, status);
|
||||
assertEquals(20, registerSet.get(1));
|
||||
assertEquals(10, registerSet.get(2));
|
||||
//FLAGS Should be CF=0 ZF=0 SF=0 OF=0
|
||||
assertFalse(status.isSignFlag());
|
||||
assertFalse(status.isZeroFlag());
|
||||
assertFalse(status.isCarryFlag());
|
||||
assertFalse(status.isOverflowFlag());
|
||||
assertFalse(status.isBreakFlag());
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* ADD mem/reg, imm
|
||||
*/
|
||||
@Test
|
||||
public void addTargetImm() {
|
||||
ServerConfiguration config = new ServerConfiguration("config.properties");
|
||||
int memorySize = config.getInt("memory_size");
|
||||
|
||||
//Memory
|
||||
Memory memory = new Memory(memorySize);
|
||||
memory.clear();
|
||||
|
||||
//Status
|
||||
Status status = new Status();
|
||||
status.clear();
|
||||
|
||||
AddInstruction addInstruction = new AddInstruction();
|
||||
|
||||
//Positive number
|
||||
memory.clear();
|
||||
memory.set(0, 10);
|
||||
addInstruction.execute(memory, 0, 10, status);
|
||||
assertEquals(20, memory.get(0));
|
||||
//FLAGS Should be CF=0 ZF=0 SF=0 OF=0
|
||||
assertFalse(status.isSignFlag());
|
||||
assertFalse(status.isZeroFlag());
|
||||
assertFalse(status.isCarryFlag());
|
||||
assertFalse(status.isOverflowFlag());
|
||||
assertFalse(status.isBreakFlag());
|
||||
|
||||
//The rest is assumed to work since it is tested with addTargetTarget() and behavior shouldn't be different;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,82 @@
|
||||
package net.simon987.server.assembly.instruction;
|
||||
|
||||
import net.simon987.server.ServerConfiguration;
|
||||
import net.simon987.server.assembly.Memory;
|
||||
import net.simon987.server.assembly.Status;
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
|
||||
public class AndInstructionTest {
|
||||
@Test
|
||||
public void executeTargetTarget() {
|
||||
|
||||
ServerConfiguration config = new ServerConfiguration("config.properties");
|
||||
int memorySize = config.getInt("memory_size");
|
||||
|
||||
//Memory
|
||||
Memory memory = new Memory(memorySize);
|
||||
memory.clear();
|
||||
|
||||
//Status
|
||||
Status status = new Status();
|
||||
status.clear();
|
||||
|
||||
AndInstruction andInstruction = new AndInstruction();
|
||||
|
||||
//mem mem
|
||||
memory.clear();
|
||||
memory.set(0, 0xF010);
|
||||
memory.set(1, 0xF111);
|
||||
andInstruction.execute(memory, 0, memory, 1, status);
|
||||
|
||||
assertEquals(0xF010, memory.get(0));
|
||||
assertEquals(true, status.isSignFlag());
|
||||
assertEquals(false, status.isZeroFlag());
|
||||
assertEquals(false, status.isOverflowFlag());
|
||||
assertEquals(false, status.isCarryFlag());
|
||||
|
||||
//mem mem
|
||||
memory.clear();
|
||||
memory.set(0, 0x1010);
|
||||
memory.set(1, 0x0101);
|
||||
andInstruction.execute(memory, 0, memory, 1, status);
|
||||
|
||||
assertEquals(0, memory.get(0));
|
||||
assertEquals(false, status.isSignFlag());
|
||||
assertEquals(true, status.isZeroFlag());
|
||||
assertEquals(false, status.isOverflowFlag());
|
||||
assertEquals(false, status.isCarryFlag());
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void executeTargetImm() {
|
||||
|
||||
ServerConfiguration config = new ServerConfiguration("config.properties");
|
||||
int memorySize = config.getInt("memory_size");
|
||||
|
||||
//Memory
|
||||
Memory memory = new Memory(memorySize);
|
||||
memory.clear();
|
||||
|
||||
//Status
|
||||
Status status = new Status();
|
||||
status.clear();
|
||||
|
||||
AndInstruction andInstruction = new AndInstruction();
|
||||
|
||||
//mem imm
|
||||
memory.clear();
|
||||
memory.set(0, 0x1010);
|
||||
andInstruction.execute(memory, 0, 0x0101, status);
|
||||
|
||||
assertEquals(0, memory.get(0));
|
||||
assertEquals(false, status.isSignFlag());
|
||||
assertEquals(true, status.isZeroFlag());
|
||||
assertEquals(false, status.isOverflowFlag());
|
||||
assertEquals(false, status.isCarryFlag());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
package net.simon987.server.assembly.instruction;
|
||||
|
||||
import net.simon987.server.assembly.Status;
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
public class BrkInstructionTest {
|
||||
@Test
|
||||
public void execute() throws Exception {
|
||||
|
||||
//Status
|
||||
Status status = new Status();
|
||||
status.clear();
|
||||
|
||||
BrkInstruction brkInstruction = new BrkInstruction();
|
||||
|
||||
brkInstruction.execute(status);
|
||||
|
||||
assertEquals(true, status.isBreakFlag());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package net.simon987.server.assembly.instruction;
|
||||
|
||||
import net.simon987.server.ServerConfiguration;
|
||||
import net.simon987.server.assembly.*;
|
||||
import net.simon987.server.user.User;
|
||||
import org.junit.Test;
|
||||
|
||||
public class CallInstructionTest {
|
||||
|
||||
|
||||
@Test
|
||||
public void execute() throws Exception {
|
||||
|
||||
ServerConfiguration config = new ServerConfiguration("config.properties");
|
||||
int memorySize = config.getInt("memory_size");
|
||||
|
||||
//Memory
|
||||
Memory memory = new Memory(memorySize);
|
||||
memory.clear();
|
||||
|
||||
//RegisterSet
|
||||
RegisterSet registerSet = new RegisterSet();
|
||||
registerSet.put(1, new Register("T1"));
|
||||
registerSet.put(2, new Register("T2"));
|
||||
registerSet.clear();
|
||||
|
||||
//Status
|
||||
Status status = new Status();
|
||||
status.clear();
|
||||
|
||||
CPU cpu = new CPU(config, new User());
|
||||
|
||||
CallInstruction callInstruction = new CallInstruction(cpu);
|
||||
|
||||
//We have to check if IP is 'pushed' correctly (try to pop it), the
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void execute1() throws Exception {
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user