summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJérémy Zurcher <jeremy@asynk.ch>2017-02-16 12:16:22 +0100
committerJérémy Zurcher <jeremy@asynk.ch>2017-02-16 12:16:22 +0100
commit6381b2934c3076fd005224d24f8fe1ea2d821b00 (patch)
tree84e5fa6aad72d415b4c4cb3b751dba960489f7aa
parentec23dabc4e64e4f93d7b812332e301f78ae37fbf (diff)
downloadshare-6381b2934c3076fd005224d24f8fe1ea2d821b00.zip
share-6381b2934c3076fd005224d24f8fe1ea2d821b00.tar.gz
java : add StateLessStateMachineTest.java
-rw-r--r--java/StateLessStateMachineTest.java106
1 files changed, 106 insertions, 0 deletions
diff --git a/java/StateLessStateMachineTest.java b/java/StateLessStateMachineTest.java
new file mode 100644
index 0000000..19417d9
--- /dev/null
+++ b/java/StateLessStateMachineTest.java
@@ -0,0 +1,106 @@
+
+import java.util.Random;
+
+abstract class CommonState implements StateLessStateMachine.MachineState
+{
+ protected void say()
+ {
+ System.out.println(" # " + this.getClass().getName());
+ }
+}
+
+class StartState extends CommonState
+{
+ public StateLessStateMachine.State process()
+ {
+ say();
+ System.out.println(" GO!");
+ return StateLessStateMachine.State.TRY;
+ }
+}
+
+class TryState extends CommonState
+{
+ public StateLessStateMachine.State process()
+ {
+ StateLessStateMachine.State nextState = null;
+
+ say();
+
+ int i = (new Random()).nextInt(6);
+ switch (i) {
+ case 1:
+ System.out.println(" -> Success");
+ nextState = StateLessStateMachine.State.SUCCESS;
+ break;
+ default:
+ System.out.println(" -> Failure");
+ nextState = StateLessStateMachine.State.FAILURE;
+ break;
+ }
+
+ return nextState;
+ }
+}
+
+class FailureState extends CommonState
+{
+ public StateLessStateMachine.State process()
+ {
+ say();
+ System.out.println(" -> Retry");
+ return StateLessStateMachine.State.TRY;
+ }
+}
+
+class SuccessState extends CommonState
+{
+ public StateLessStateMachine.State process()
+ {
+ say();
+ System.out.println(" -> well done");
+ return StateLessStateMachine.State.STOP;
+ }
+}
+
+class StateLessStateMachine
+{
+ public enum State
+ {
+ STOP(-1), START(0), TRY(1), SUCCESS(2), FAILURE(3);
+ public int i;
+ State(int i) { this.i = i; }
+ }
+
+ interface MachineState
+ {
+ public State process();
+ }
+
+ private MachineState[] states = {
+ new StartState(),
+ new TryState(),
+ new SuccessState(),
+ new FailureState()
+ };
+
+ public State process(State currentState)
+ {
+ if (currentState == State.STOP) return currentState;
+ return states[currentState.i].process();
+ }
+}
+
+public class StateLessStateMachineTest
+{
+ public static void main(String [] args )
+ {
+ System.out.println(StateLessStateMachineTest.class.getName());
+ StateLessStateMachine stm = new StateLessStateMachine();
+
+ StateLessStateMachine.State st = StateLessStateMachine.State.START;
+ do {
+ st = stm.process(st);
+ } while (st != StateLessStateMachine.State.STOP);
+ }
+}