Adopted tests to new BitVector and improved labeling
[Mograsim.git] / net.mograsim.logic.model.am2900 / test / net / mograsim / logic / ui / am2900 / TestableAm2901.java
1 package net.mograsim.logic.ui.am2900;
2
3 import static org.junit.jupiter.api.Assertions.assertEquals;
4
5 import java.util.Arrays;
6 import java.util.stream.Stream;
7
8 public interface TestableAm2901
9 {
10         void setup();
11
12         Result run();
13
14         void setDest(Am2901_Dest dest);
15
16         void setFunc(Am2901_Func func);
17
18         void setSrc(Am2901_Src src);
19
20         void setReg_A(String val_4_bit);
21
22         void setReg_B(String val_4_bit);
23
24         void setCarryIn(String val_1_bit);
25
26         void setNotOutEnable(String val_1_bit);
27
28         void setD(String val_4_bit);
29
30         void setQ_0(String val_1_bit);
31
32         void setQ_3(String val_1_bit);
33
34         void setRAM_0(String val_1_bit);
35
36         void setRAM_3(String val_1_bit);
37
38         void clockOn(boolean isClockOn);
39
40         void setDirectly(Register r, String val_4_bit);
41
42         String getQ_0();
43
44         String getQ_3();
45
46         String getRAM_0();
47
48         String getRAM_3();
49
50         String getNotP();
51
52         String getNotG();
53
54         String getCarryOut();
55
56         String getSign();
57
58         String getZero();
59
60         String getOverflow();
61
62         String getY();
63
64         String getDirectly(Register r);
65
66         default void assertRunSuccess()
67         {
68                 assertEquals(Result.SUCCESS, run());
69         }
70
71         default void assertFullCycleSuccess()
72         {
73                 assertRunSuccess();
74                 clockOn(false);
75                 assertRunSuccess();
76                 clockOn(true);
77                 assertRunSuccess();
78         }
79
80         public enum Result
81         {
82                 SUCCESS, OUT_OF_TIME, ERROR;
83         }
84
85         public enum Am2901_Dest
86         {
87                 QREG, NOP, RAMA, RAMF, RAMQD, RAMD, RAMQU, RAMU;
88
89                 public boolean doesShift()
90                 {
91                         return ordinal() >= 4;
92                 }
93
94                 public int getShiftDir()
95                 {
96                         return doesShift() ? (ordinal() < 6 ? -1 : 1) : 0;
97                 }
98
99                 public int getI7()
100                 {
101                         return this.ordinal() >> 1 & 1;
102                 }
103         }
104
105         public enum Am2901_Func
106         {
107                 ADD, SUBR, SUBS, OR, AND, NOTRS, EXOR, EXNOR;
108         }
109
110         public enum Am2901_Src
111         {
112                 AQ, AB, ZQ, ZB, ZA, DA, DQ, DZ;
113         }
114
115         public enum Register
116         {
117                 r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, rA, rB, rC, rD, rE, rF, Q;
118
119                 public String toBitString()
120                 {
121                         if (this.ordinal() > 0xF)
122                                 throw new UnsupportedOperationException();
123                         return TestUtil.to4bitBin(this.ordinal());
124                 }
125
126                 public static Stream<Register> stream()
127                 {
128                         return Arrays.stream(values());
129                 }
130         }
131 }