Completely changed the structure and switched to Eclipse Plugin.
[Mograsim.git] / net.mograsim.logic.ui.am2900 / test / net / mograsim / logic / ui / am2900 / Am2901Test.java
1 package net.mograsim.logic.ui.am2900;\r
2 \r
3 import static net.mograsim.logic.ui.am2900.TestableAm2901.Am2901_Dest.*;\r
4 import static net.mograsim.logic.ui.am2900.TestableAm2901.Am2901_Func.*;\r
5 import static net.mograsim.logic.ui.am2900.TestableAm2901.Am2901_Src.*;\r
6 import static org.junit.jupiter.api.Assertions.assertEquals;\r
7 \r
8 import org.junit.jupiter.api.BeforeEach;\r
9 import org.junit.jupiter.api.Test;\r
10 \r
11 import net.mograsim.logic.ui.am2900.TestableAm2901.Result;\r
12 \r
13 public class Am2901Test\r
14 {\r
15         private TestableAm2901 am2901;\r
16 \r
17         @BeforeEach\r
18         void initialize()\r
19         {\r
20                 createAndSetup();\r
21                 setRegistersToZero();\r
22         }\r
23 \r
24         @Test\r
25         void testInit()\r
26         {\r
27                 assertEquals("0", am2901.getCarryOut());\r
28                 assertEquals("0", am2901.getOverflow());\r
29                 assertEquals("0", am2901.getSign());\r
30                 assertEquals("1", am2901.getZero());\r
31                 assertEquals("0000", am2901.getY());\r
32                 assertEquals("0", am2901.getQ_0());\r
33                 assertEquals("0", am2901.getQ_3());\r
34                 assertEquals("0", am2901.getRAM_0());\r
35                 assertEquals("0", am2901.getRAM_3());\r
36         }\r
37 \r
38         void createAndSetup()\r
39         {\r
40                 am2901 = new TestableAm2901Impl();\r
41                 am2901.setup();\r
42         }\r
43 \r
44         void setRegistersToZero()\r
45         {\r
46                 setInputsToZero();\r
47                 for (Regsiter r : Regsiter.values())\r
48                 {\r
49                         setRegisterToZero(r);\r
50                 }\r
51         }\r
52 \r
53         void setRegisterToZero(Regsiter r)\r
54         {\r
55                 System.out.println("Setting reg " + r + " to zero");\r
56                 am2901.setD("0000");\r
57                 am2901.setSrc(DZ);\r
58                 am2901.setFunc(AND);\r
59                 if (r == Regsiter.Q)\r
60                 {\r
61                         am2901.setDest(QREG);\r
62                 } else\r
63                 {\r
64                         am2901.setReg_B(r.toBitString());\r
65                         am2901.setDest(RAMF);\r
66                 }\r
67                 assertRunSuccess();\r
68                 am2901.toogleClock();\r
69                 assertRunSuccess();\r
70                 am2901.toogleClock();\r
71                 assertRunSuccess();\r
72         }\r
73 \r
74         void setInputsToZero()\r
75         {\r
76                 am2901.setCarryIn("0");\r
77                 am2901.setQ_0("0");\r
78                 am2901.setQ_3("0");\r
79                 am2901.setRAM_0("0");\r
80                 am2901.setRAM_3("0");\r
81                 am2901.setReg_A("0000");\r
82                 am2901.setReg_B("0000");\r
83                 am2901.setD("0000");\r
84                 am2901.setSrc(AB);\r
85                 am2901.setFunc(ADD);\r
86                 am2901.setDest(QREG);\r
87 //              am2901.setNotOutEnable("0"); TODO\r
88                 assertRunSuccess();\r
89         }\r
90 \r
91         void assertRunSuccess()\r
92         {\r
93                 assertEquals(Result.SUCCESS, am2901.run());\r
94         }\r
95 \r
96         public enum Regsiter\r
97         {\r
98                 r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, rA, rB, rC, rD, rE, rF, Q;\r
99 \r
100                 public String toBitString()\r
101                 {\r
102                         if (this.ordinal() > 0xF)\r
103                                 throw new UnsupportedOperationException();\r
104                         return TestUtil.to4bitBin(this.ordinal());\r
105                 }\r
106         }\r
107 }\r