package net.mograsim.logic.ui.am2900;\r
\r
+import static org.junit.jupiter.api.Assertions.assertEquals;\r
+\r
+import java.util.Arrays;\r
+import java.util.stream.Stream;\r
+\r
+import org.junit.jupiter.api.extension.ExtensionContext;\r
+import org.junit.jupiter.params.provider.Arguments;\r
+import org.junit.jupiter.params.provider.ArgumentsProvider;\r
+\r
public interface TestableAm2901\r
{\r
void setup();\r
\r
void setRAM_3(String val_1_bit);\r
\r
- void toogleClock();\r
+ void clockOn(boolean isClockOn);\r
+\r
+ void setDirectly(Register r, String val_4_bit);\r
\r
String getQ_0();\r
\r
\r
String getY();\r
\r
+ String getDirectly(Register r);\r
+\r
+ default void assertRunSuccess()\r
+ {\r
+ assertEquals(Result.SUCCESS, run());\r
+ }\r
+\r
+ default void assertFullCycleSuccess()\r
+ {\r
+ assertRunSuccess();\r
+ clockOn(false);\r
+ assertRunSuccess();\r
+ clockOn(true);\r
+ assertRunSuccess();\r
+ }\r
+\r
public enum Result\r
{\r
SUCCESS, OUT_OF_TIME, ERROR;\r
{\r
AQ, AB, ZQ, ZB, ZA, DA, DQ, DZ;\r
}\r
+\r
+ public enum Register\r
+ {\r
+ r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, rA, rB, rC, rD, rE, rF, Q;\r
+\r
+ public String toBitString()\r
+ {\r
+ if (this.ordinal() > 0xF)\r
+ throw new UnsupportedOperationException();\r
+ return TestUtil.to4bitBin(this.ordinal());\r
+ }\r
+\r
+ public static Stream<Register> stream()\r
+ {\r
+ return Arrays.stream(values());\r
+ }\r
+ }\r
+\r
+ public static class RegisterProvider implements ArgumentsProvider\r
+ {\r
+\r
+ @Override\r
+ public Stream<? extends Arguments> provideArguments(ExtensionContext context) throws Exception\r
+ {\r
+ return Register.stream().map(Arguments::of);\r
+ }\r
+\r
+ }\r
}\r