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