1 package net.mograsim.logic.model.am2900.am2904;
3 import static org.junit.jupiter.api.Assertions.assertEquals;
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;
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;
22 @DisplayName("Am2904 Tests")
23 @TestMethodOrder(OrderAnnotation.class)
24 public class Am2904Test
26 private TestableAm2904 am2904 = new TestableAm2904Impl();
29 DisplayStateOnFailure failureRule = new DisplayStateOnFailure(am2904);
43 void setStandardInputs()
51 am2904.setCarry(Am2904_Carry.CI0);
53 am2904.setI10(Am2904_ShiftDir.RIGHT);
54 am2904.setShiftCode("0000");
55 am2904.setInstruction(Am2904_Inst.Load_Load_I_Z);
63 am2904.assertRunSuccess();
66 @ParameterizedTest(name = "{0}")
68 @DisplayName("Direct / high level access")
69 @EnumSource(Register.class)
70 void testDirectAccess(Register r)
72 assertEquals("U", am2904.getDirectly(r));
74 am2904.setDirectly(r, "1");
76 assertEquals("1", am2904.getDirectly(r));
81 void testBasicStateAndOutputs()
83 am2904.assertFullCycleSuccess();
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());
96 void testSimpleLoadTestIZ()
98 am2904.setInstruction(Am2904_Inst.Load_Load_I_Z);
99 am2904.assertFullCycleSuccess();
101 assertEquals("0", am2904.getCT());
104 am2904.assertFullCycleSuccess();
106 assertEquals("1", am2904.getCT());
108 am2904.setInstruction(Am2904_Inst.Load_Load_I_notZ);
109 am2904.assertFullCycleSuccess();
111 assertEquals("0", am2904.getCT());
114 am2904.assertFullCycleSuccess();
116 assertEquals("1", am2904.getCT());
121 void testSimpleLoadTestIC()
123 am2904.setInstruction(Am2904_Inst.Load_Load_I_C);
124 am2904.assertFullCycleSuccess();
126 assertEquals("0", am2904.getCT());
129 am2904.assertFullCycleSuccess();
131 assertEquals("1", am2904.getCT());
133 am2904.setInstruction(Am2904_Inst.Load_Load_I_notC);
134 am2904.assertFullCycleSuccess();
136 assertEquals("0", am2904.getCT());
139 am2904.assertFullCycleSuccess();
141 assertEquals("1", am2904.getCT());
146 void testSimpleLoadTestIN()
148 am2904.setInstruction(Am2904_Inst.Load_Load_I_N);
149 am2904.assertFullCycleSuccess();
151 assertEquals("0", am2904.getCT());
154 am2904.assertFullCycleSuccess();
156 assertEquals("1", am2904.getCT());
158 am2904.setInstruction(Am2904_Inst.Load_Load_I_notN);
159 am2904.assertFullCycleSuccess();
161 assertEquals("0", am2904.getCT());
164 am2904.assertFullCycleSuccess();
166 assertEquals("1", am2904.getCT());
171 void testSimpleLoadTestIOVR()
173 am2904.setInstruction(Am2904_Inst.Load_Load_I_OVR);
174 am2904.assertFullCycleSuccess();
176 assertEquals("0", am2904.getCT());
179 am2904.assertFullCycleSuccess();
181 assertEquals("1", am2904.getCT());
183 am2904.setInstruction(Am2904_Inst.Load_Load_I_notOVR);
184 am2904.assertFullCycleSuccess();
186 assertEquals("0", am2904.getCT());
189 am2904.assertFullCycleSuccess();
191 assertEquals("1", am2904.getCT());
196 void testRegisterContentAfterLoadLoad()
198 am2904.setInstruction(Am2904_Inst.Load_Load_I_Z);
199 am2904.assertFullCycleSuccess();
201 String[] statusValues = { "0001", "0010", "0100", "1000", "0000", "1111" };
203 for (String status : statusValues)
206 am2904.assertFullCycleSuccess();
207 assertEquals(status, am2904.getDirectly(CompleteStatus.micro));
208 assertEquals(status, am2904.getDirectly(CompleteStatus.MAKRO));