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