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 / am2904 / Am2904Test.java
1 package net.mograsim.logic.model.am2900.am2904;
2
3 import static org.junit.jupiter.api.Assertions.assertEquals;
4
5 import org.junit.jupiter.api.BeforeEach;
6 import org.junit.jupiter.api.DisplayName;
7 import org.junit.jupiter.api.Order;
8 import org.junit.jupiter.api.Test;
9 import org.junit.jupiter.api.TestMethodOrder;
10 import org.junit.jupiter.api.extension.RegisterExtension;
11 import org.junit.jupiter.api.MethodOrderer.OrderAnnotation;
12 import org.junit.jupiter.params.ParameterizedTest;
13 import org.junit.jupiter.params.provider.EnumSource;
14
15 import net.mograsim.logic.model.am2900.am2904.TestableAm2904.Am2904_Carry;
16 import net.mograsim.logic.model.am2900.am2904.TestableAm2904.Am2904_Inst;
17 import net.mograsim.logic.model.am2900.am2904.TestableAm2904.Am2904_ShiftDir;
18 import net.mograsim.logic.model.am2900.am2904.TestableAm2904.Register;
19 import net.mograsim.logic.model.am2900.util.DisplayStateOnFailure;
20
21 @DisplayName("Am2904 Tests")
22 @TestMethodOrder(OrderAnnotation.class)
23 public class Am2904Test
24 {
25         private TestableAm2904 am2904 = new TestableAm2904Impl();
26
27         @RegisterExtension
28         DisplayStateOnFailure failureRule = new DisplayStateOnFailure(am2904);
29
30         @BeforeEach
31         void initialize()
32         {
33                 createAndSetup();
34                 setStandardInputs();
35         }
36
37         void createAndSetup()
38         {
39                 am2904.setup();
40         }
41
42         void setStandardInputs()
43         {
44                 am2904.set_CEĀµ("0");
45                 am2904.set_CEM("0");
46                 am2904.setI("0000");
47                 am2904.set_E("0000");
48                 am2904.set_OEY("1");
49                 am2904.set_OECT("0");
50                 am2904.setCarry(Am2904_Carry.CI0);
51                 am2904.setCX("0");
52                 am2904.setI10(Am2904_ShiftDir.RIGHT);
53                 am2904.setShiftCode("0000");
54                 am2904.setInstruction(Am2904_Inst.Load_Load_I_Z);
55                 am2904.setSIO0("Z");
56                 am2904.setSIO3("Z");
57                 am2904.setQIO0("Z");
58                 am2904.setQIO3("Z");
59                 am2904.set_SE("1");
60                 am2904.setY("ZZZZ");
61                 am2904.clockOn(true);
62                 am2904.assertRunSuccess();
63         }
64
65         @ParameterizedTest(name = "{0}")
66         @Order(1)
67         @DisplayName("Direct / high level access")
68         @EnumSource(Register.class)
69         void testDirectAccess(Register r)
70         {
71                 assertEquals("U", am2904.getDirectly(r));
72
73                 am2904.setDirectly(r, "1");
74
75                 assertEquals("1", am2904.getDirectly(r));
76         }
77
78         @Test
79         @Order(2)
80         void testBasicStateAndOutputs()
81         {
82                 am2904.assertFullCycleSuccess();
83
84                 assertEquals("0", am2904.getC0());
85                 assertEquals("0", am2904.getCT());
86                 assertEquals("Z", am2904.getQIO0());
87                 assertEquals("Z", am2904.getQIO3());
88                 assertEquals("Z", am2904.getSIO0());
89                 assertEquals("Z", am2904.getSIO3());
90                 assertEquals("ZZZZ", am2904.getY());
91         }
92
93         @Test
94         @Order(3)
95         void testSimpleLoadTestIZ()
96         {
97                 am2904.setInstruction(Am2904_Inst.Load_Load_I_Z);
98                 am2904.assertFullCycleSuccess();
99
100                 assertEquals("0", am2904.getCT());
101
102                 am2904.setI("1000");
103                 am2904.assertFullCycleSuccess();
104
105                 assertEquals("1", am2904.getCT());
106
107                 am2904.setInstruction(Am2904_Inst.Load_Load_I_notZ);
108                 am2904.assertFullCycleSuccess();
109
110                 assertEquals("0", am2904.getCT());
111
112                 am2904.setI("0000");
113                 am2904.assertFullCycleSuccess();
114
115                 assertEquals("1", am2904.getCT());
116         }
117
118         @Test
119         @Order(3)
120         void testSimpleLoadTestIC()
121         {
122                 am2904.setInstruction(Am2904_Inst.Load_Load_I_C);
123                 am2904.assertFullCycleSuccess();
124
125                 assertEquals("0", am2904.getCT());
126
127                 am2904.setI("0100");
128                 am2904.assertFullCycleSuccess();
129
130                 assertEquals("1", am2904.getCT());
131
132                 am2904.setInstruction(Am2904_Inst.Load_Load_I_notC);
133                 am2904.assertFullCycleSuccess();
134
135                 assertEquals("0", am2904.getCT());
136
137                 am2904.setI("0000");
138                 am2904.assertFullCycleSuccess();
139
140                 assertEquals("1", am2904.getCT());
141         }
142
143         @Test
144         @Order(3)
145         void testSimpleLoadTestIN()
146         {
147                 am2904.setInstruction(Am2904_Inst.Load_Load_I_N);
148                 am2904.assertFullCycleSuccess();
149
150                 assertEquals("0", am2904.getCT());
151
152                 am2904.setI("0010");
153                 am2904.assertFullCycleSuccess();
154
155                 assertEquals("1", am2904.getCT());
156
157                 am2904.setInstruction(Am2904_Inst.Load_Load_I_notN);
158                 am2904.assertFullCycleSuccess();
159
160                 assertEquals("0", am2904.getCT());
161
162                 am2904.setI("0000");
163                 am2904.assertFullCycleSuccess();
164
165                 assertEquals("1", am2904.getCT());
166         }
167
168         @Test
169         @Order(3)
170         void testSimpleLoadTestIOVR()
171         {
172                 am2904.setInstruction(Am2904_Inst.Load_Load_I_OVR);
173                 am2904.assertFullCycleSuccess();
174
175                 assertEquals("0", am2904.getCT());
176
177                 am2904.setI("0001");
178                 am2904.assertFullCycleSuccess();
179
180                 assertEquals("1", am2904.getCT());
181
182                 am2904.setInstruction(Am2904_Inst.Load_Load_I_notOVR);
183                 am2904.assertFullCycleSuccess();
184
185                 assertEquals("0", am2904.getCT());
186
187                 am2904.setI("0000");
188                 am2904.assertFullCycleSuccess();
189
190                 assertEquals("1", am2904.getCT());
191         }
192 }