about summary refs log tree commit diff stats
path: root/js/scripting-lang/tests/turing-completeness/05_loops_and_state.txt
diff options
context:
space:
mode:
Diffstat (limited to 'js/scripting-lang/tests/turing-completeness/05_loops_and_state.txt')
-rw-r--r--js/scripting-lang/tests/turing-completeness/05_loops_and_state.txt71
1 files changed, 71 insertions, 0 deletions
diff --git a/js/scripting-lang/tests/turing-completeness/05_loops_and_state.txt b/js/scripting-lang/tests/turing-completeness/05_loops_and_state.txt
new file mode 100644
index 0000000..12c6c52
--- /dev/null
+++ b/js/scripting-lang/tests/turing-completeness/05_loops_and_state.txt
@@ -0,0 +1,71 @@
+/* Turing Completeness: Loops and State Management */
+/* Demonstrates: Indefinite iteration, state mutation, complex control flow */
+
+..out "=== Loops and State Management Test ===";
+
+/* Test 1: Counter with state - simulates while loop */
+counter_state : {count: 0, target: 5, result: {}};
+
+/* Function to increment counter and collect results */
+increment : state -> when state.count < state.target is
+    true then {
+        count: state.count + 1,
+        target: state.target, 
+        result: t.append state.result state.count
+    }
+    false then state;
+
+/* Simulate loop by repeated application */
+step1 : increment counter_state;
+step2 : increment step1;
+step3 : increment step2;
+step4 : increment step3;  
+step5 : increment step4;
+final_state : increment step5;
+
+..assert final_state.count = 5;
+..assert final_state.result = {1: 0, 2: 1, 3: 2, 4: 3, 5: 4};
+..out "1. Counter/Loop simulation: PASS";
+
+/* Test 2: Fibonacci sequence with state */
+fib_state : {a: 0, b: 1, sequence: {1: 0, 2: 1}, count: 2, limit: 8};
+
+fib_step : state -> when state.count < state.limit is
+    true then {
+        a: state.b,
+        b: state.a + state.b,
+        sequence: t.append state.sequence (state.a + state.b),
+        count: state.count + 1,
+        limit: state.limit
+    }
+    false then state;
+
+/* Generate Fibonacci sequence */
+f1 : fib_step fib_state;
+f2 : fib_step f1;
+f3 : fib_step f2;
+f4 : fib_step f3;
+f5 : fib_step f4;
+f6 : fib_step f5;
+final_fib : fib_step f6;
+
+..assert final_fib.sequence = {1: 0, 2: 1, 3: 1, 4: 2, 5: 3, 6: 5, 7: 8, 8: 13};
+..out "2. Fibonacci with state: PASS";
+
+/* Test 3: Game of Life cell simulation */
+cell_state : {alive: true, neighbors: 3, generation: 0};
+
+life_rule : state -> when state.neighbors is
+    2 then {alive: state.alive, neighbors: state.neighbors, generation: state.generation + 1}
+    3 then {alive: true, neighbors: state.neighbors, generation: state.generation + 1}
+    _ then {alive: false, neighbors: state.neighbors, generation: state.generation + 1};
+
+next_gen1 : life_rule cell_state;
+next_gen2 : life_rule {alive: next_gen1.alive, neighbors: 1, generation: next_gen1.generation};
+
+..assert next_gen1.alive = true;
+..assert next_gen2.alive = false;
+..out "3. Game of Life rules: PASS";
+
+..out "✅ All loop and state tests passed";
+..out "Demonstrates: Indefinite computation, state evolution, complex control";
\ No newline at end of file