Improved Test experience by a lot; added first tests for Am2904, Am2910
[Mograsim.git] / net.mograsim.logic.model.am2900 / test / net / mograsim / logic / model / am2900 / am2901 / TestableAm2901Impl.java
1 package net.mograsim.logic.model.am2900.am2901;
2
3 import net.mograsim.logic.core.components.BitDisplay;
4 import net.mograsim.logic.core.components.ManualSwitch;
5 import net.mograsim.logic.core.types.Bit;
6 import net.mograsim.logic.core.types.BitVector;
7 import net.mograsim.logic.model.am2900.util.TestEnvironmentHelper;
8 import net.mograsim.logic.model.am2900.util.TestUtil;
9 import net.mograsim.logic.model.am2900.util.TestEnvironmentHelper.DebugState;
10 import net.mograsim.logic.model.model.components.GUIComponent;
11
12 public class TestableAm2901Impl implements TestableAm2901
13 {
14         private GUIComponent am2901;
15         private ManualSwitch I8, I7, I6, I5, I4, I3, I2, I1, I0;
16         private ManualSwitch C;
17         private ManualSwitch Cn;
18         private ManualSwitch D1, D2, D3, D4;
19         private ManualSwitch A0, A1, A2, A3;
20         private ManualSwitch B0, B1, B2, B3;
21         private ManualSwitch IRAMn, IRAMn_3, IQn, IQn_3;
22         private BitDisplay Y1, Y2, Y3, Y4;
23         private BitDisplay F_0, Cn_4, OVR, F3;
24         private BitDisplay ORAMn, ORAMn_3, OQn, OQn_3;
25
26         private final TestEnvironmentHelper testHelper = new TestEnvironmentHelper(this, "GUIAm2901");
27
28         @Override
29         public Result run()
30         {
31                 return testHelper.run();
32         }
33
34         @Override
35         public void setup()
36         {
37                 testHelper.setup(DebugState.NO_DEBUG);
38         }
39
40         @Override
41         public void setDest(Am2901_Dest dest)
42         {
43                 var bits = TestUtil.of(dest.ordinal(), 3);
44                 I8.setState(bits.getLSBit(2));
45                 I7.setState(bits.getLSBit(1));
46                 I6.setState(bits.getLSBit(0));
47         }
48
49         @Override
50         public void setFunc(Am2901_Func func)
51         {
52                 var bits = TestUtil.of(func.ordinal(), 3);
53                 I5.setState(bits.getLSBit(2));
54                 I4.setState(bits.getLSBit(1));
55                 I3.setState(bits.getLSBit(0));
56         }
57
58         @Override
59         public void setSrc(Am2901_Src src)
60         {
61                 var bits = TestUtil.of(src.ordinal(), 3);
62                 I2.setState(bits.getLSBit(2));
63                 I1.setState(bits.getLSBit(1));
64                 I0.setState(bits.getLSBit(0));
65         }
66
67         @Override
68         public void setReg_A(String val_4_bit)
69         {
70                 var bits = BitVector.parse(val_4_bit);
71                 A3.setState(bits.getLSBit(3));
72                 A2.setState(bits.getLSBit(2));
73                 A1.setState(bits.getLSBit(1));
74                 A0.setState(bits.getLSBit(0));
75         }
76
77         @Override
78         public void setReg_B(String val_4_bit)
79         {
80                 var bits = BitVector.parse(val_4_bit);
81                 B3.setState(bits.getLSBit(3));
82                 B2.setState(bits.getLSBit(2));
83                 B1.setState(bits.getLSBit(1));
84                 B0.setState(bits.getLSBit(0));
85         }
86
87         @Override
88         public void setCarryIn(String val_1_bit)
89         {
90                 Cn.setState(Bit.parse(val_1_bit));
91         }
92
93         @Override
94         public void setNotOutEnable(String val_1_bit)
95         {
96                 throw new UnsupportedOperationException(); // TODO
97         }
98
99         @Override
100         public void setD(String val_4_bit)
101         {
102                 var bits = BitVector.parse(val_4_bit);
103                 D4.setState(bits.getLSBit(3));
104                 D3.setState(bits.getLSBit(2));
105                 D2.setState(bits.getLSBit(1));
106                 D1.setState(bits.getLSBit(0));
107         }
108
109         @Override
110         public void setQ_0(String val_1_bit)
111         {
112                 IQn.setState(Bit.parse(val_1_bit));
113         }
114
115         @Override
116         public void setQ_3(String val_1_bit)
117         {
118                 IQn_3.setState(Bit.parse(val_1_bit));
119         }
120
121         @Override
122         public void setRAM_0(String val_1_bit)
123         {
124                 IRAMn.setState(Bit.parse(val_1_bit));
125         }
126
127         @Override
128         public void setRAM_3(String val_1_bit)
129         {
130                 IRAMn_3.setState(Bit.parse(val_1_bit));
131         }
132
133         @Override
134         public void clockOn(boolean isClockOn)
135         {
136                 C.setState(isClockOn ? Bit.ONE : Bit.ZERO);
137         }
138
139         @Override
140         public String getQ_0()
141         {
142                 return OQn.getDisplayedValue().toString();
143         }
144
145         @Override
146         public String getQ_3()
147         {
148                 return OQn_3.getDisplayedValue().toString();
149         }
150
151         @Override
152         public String getRAM_0()
153         {
154                 return ORAMn.getDisplayedValue().toString();
155         }
156
157         @Override
158         public String getRAM_3()
159         {
160                 return ORAMn_3.getDisplayedValue().toString();
161         }
162
163         @Override
164         public String getNotP()
165         {
166                 throw new UnsupportedOperationException(); // TODO
167         }
168
169         @Override
170         public String getNotG()
171         {
172                 throw new UnsupportedOperationException(); // TODO
173         }
174
175         @Override
176         public String getCarryOut()
177         {
178                 return Cn_4.getDisplayedValue().toString();
179         }
180
181         @Override
182         public String getSign()
183         {
184                 return F3.getDisplayedValue().toString();
185         }
186
187         @Override
188         public String getZero()
189         {
190                 return F_0.getDisplayedValue().toString();
191         }
192
193         @Override
194         public String getOverflow()
195         {
196                 return OVR.getDisplayedValue().toString();
197         }
198
199         @Override
200         public String getY()
201         {
202                 var y3 = Y4.getDisplayedValue();
203                 var y2 = Y3.getDisplayedValue();
204                 var y1 = Y2.getDisplayedValue();
205                 var y0 = Y1.getDisplayedValue();
206                 return y3.concat(y2).concat(y1).concat(y0).toString();
207         }
208
209         @Override
210         public void setDirectly(Register r, String val_4_bit)
211         {
212                 am2901.setHighLevelState(regToStateID(r), BitVector.parse(val_4_bit));
213         }
214
215         @Override
216         public String getDirectly(Register r)
217         {
218                 return ((BitVector) am2901.getHighLevelState(regToStateID(r))).toString();
219         }
220
221         private static String regToStateID(Register r)
222         {
223                 if (r == Register.Q)
224                         return "qreg.q";
225                 return "regs.c" + r.toBitString() + ".q";
226         }
227
228         @Override
229         public TestEnvironmentHelper getTestEnvironmentHelper()
230         {
231                 return testHelper;
232         }
233 }