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.Register;
19 import net.mograsim.logic.model.am2900.util.DisplayStateOnFailure;
21 @DisplayName("Am2904 Tests")
22 @TestMethodOrder(OrderAnnotation.class)
23 public class Am2904Test
25 private TestableAm2904 am2904 = new TestableAm2904Impl();
28 DisplayStateOnFailure failureRule = new DisplayStateOnFailure(am2904);
42 void setStandardInputs()
50 am2904.setCarry(Am2904_Carry.CI0);
52 am2904.setI10(Am2904_ShiftDir.RIGHT);
53 am2904.setShiftCode("0000");
54 am2904.setInstruction(Am2904_Inst.Load_Load_I_Z);
62 am2904.assertRunSuccess();
65 @ParameterizedTest(name = "{0}")
67 @DisplayName("Direct / high level access")
68 @EnumSource(Register.class)
69 void testDirectAccess(Register r)
71 assertEquals("U", am2904.getDirectly(r));
73 am2904.setDirectly(r, "1");
75 assertEquals("1", am2904.getDirectly(r));
80 void testBasicStateAndOutputs()
82 am2904.assertFullCycleSuccess();
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());
95 void testSimpleLoadTestIZ()
97 am2904.setInstruction(Am2904_Inst.Load_Load_I_Z);
98 am2904.assertFullCycleSuccess();
100 assertEquals("0", am2904.getCT());
103 am2904.assertFullCycleSuccess();
105 assertEquals("1", am2904.getCT());
107 am2904.setInstruction(Am2904_Inst.Load_Load_I_notZ);
108 am2904.assertFullCycleSuccess();
110 assertEquals("0", am2904.getCT());
113 am2904.assertFullCycleSuccess();
115 assertEquals("1", am2904.getCT());
120 void testSimpleLoadTestIC()
122 am2904.setInstruction(Am2904_Inst.Load_Load_I_C);
123 am2904.assertFullCycleSuccess();
125 assertEquals("0", am2904.getCT());
128 am2904.assertFullCycleSuccess();
130 assertEquals("1", am2904.getCT());
132 am2904.setInstruction(Am2904_Inst.Load_Load_I_notC);
133 am2904.assertFullCycleSuccess();
135 assertEquals("0", am2904.getCT());
138 am2904.assertFullCycleSuccess();
140 assertEquals("1", am2904.getCT());
145 void testSimpleLoadTestIN()
147 am2904.setInstruction(Am2904_Inst.Load_Load_I_N);
148 am2904.assertFullCycleSuccess();
150 assertEquals("0", am2904.getCT());
153 am2904.assertFullCycleSuccess();
155 assertEquals("1", am2904.getCT());
157 am2904.setInstruction(Am2904_Inst.Load_Load_I_notN);
158 am2904.assertFullCycleSuccess();
160 assertEquals("0", am2904.getCT());
163 am2904.assertFullCycleSuccess();
165 assertEquals("1", am2904.getCT());
170 void testSimpleLoadTestIOVR()
172 am2904.setInstruction(Am2904_Inst.Load_Load_I_OVR);
173 am2904.assertFullCycleSuccess();
175 assertEquals("0", am2904.getCT());
178 am2904.assertFullCycleSuccess();
180 assertEquals("1", am2904.getCT());
182 am2904.setInstruction(Am2904_Inst.Load_Load_I_notOVR);
183 am2904.assertFullCycleSuccess();
185 assertEquals("0", am2904.getCT());
188 am2904.assertFullCycleSuccess();
190 assertEquals("1", am2904.getCT());