Fixed and added a lot of tests
[Mograsim.git] / net.mograsim.logic.ui.am2900 / test / net / mograsim / logic / ui / am2900 / TestableAm2901.java
index 7bb6ab9..2239895 100644 (file)
@@ -1,5 +1,14 @@
 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
@@ -30,7 +39,9 @@ public interface TestableAm2901
 \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
@@ -54,6 +65,22 @@ public interface TestableAm2901
 \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
@@ -88,4 +115,32 @@ public interface TestableAm2901
        {\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