about summary refs log tree commit diff stats
path: root/js/scripting-lang/tests/turing-completeness/05_loops_and_state_compat.txt
diff options
context:
space:
mode:
Diffstat (limited to 'js/scripting-lang/tests/turing-completeness/05_loops_and_state_compat.txt')
-rw-r--r--js/scripting-lang/tests/turing-completeness/05_loops_and_state_compat.txt84
1 files changed, 84 insertions, 0 deletions
diff --git a/js/scripting-lang/tests/turing-completeness/05_loops_and_state_compat.txt b/js/scripting-lang/tests/turing-completeness/05_loops_and_state_compat.txt
new file mode 100644
index 0000000..6aca4c4
--- /dev/null
+++ b/js/scripting-lang/tests/turing-completeness/05_loops_and_state_compat.txt
@@ -0,0 +1,84 @@
+/* Turing Completeness: Loops and State Management - Compatibility Version */
+/* Modified to work without array literals and concat operations */
+
+..out "=== Loops and State Management Test ===";
+
+/* Test 1: Counter with state - simulates while loop */
+/* Using table to simulate array */
+counter_state : {count: 0, target: 5, result: {size: 0}};
+
+/* 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: {
+            size: state.result.size + 1,
+            val1: when state.result.size >= 1 then state.result.val1 _ then state.count,
+            val2: when state.result.size >= 2 then state.result.val2 _ then when state.result.size = 1 then state.count _ then null,
+            val3: when state.result.size >= 3 then state.result.val3 _ then when state.result.size = 2 then state.count _ then null,
+            val4: when state.result.size >= 4 then state.result.val4 _ then when state.result.size = 3 then state.count _ then null,
+            val5: when state.result.size >= 5 then state.result.val5 _ then when state.result.size = 4 then state.count _ then null
+        }
+    }
+    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.size = 5;
+..out "1. Counter/Loop simulation: PASS";
+
+/* Test 2: Fibonacci sequence with state */
+fib_state : {a: 0, b: 1, count: 2, limit: 8, fib3: 1, fib4: 2, fib5: 3, fib6: 5, fib7: 8, fib8: 13};
+
+fib_step : state -> when state.count < state.limit is
+    true then {
+        a: state.b,
+        b: state.a + state.b,
+        count: state.count + 1,
+        limit: state.limit,
+        fib3: state.fib3,
+        fib4: state.fib4,
+        fib5: state.fib5,
+        fib6: state.fib6,
+        fib7: state.fib7,
+        fib8: state.fib8
+    }
+    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.b = 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