From a4773edb76b83ea11c8b05e485370a47c7e7a1f3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ga=C5=A1per=20Dobrovoljc?= <gasper.dobrovoljc1@gmail.com>
Date: Sun, 23 Mar 2025 15:14:18 +0100
Subject: [PATCH] Added SynAn tests

---
 generate.py             | 53 -----------------------------------------
 prg/synan/fail1.pins25  |  2 ++
 prg/synan/fail10.pins25 |  4 ++++
 prg/synan/fail11.pins25 | 24 +++++++++++++++++++
 prg/synan/fail12.pins25 |  1 +
 prg/synan/fail13.pins25 |  2 ++
 prg/synan/fail14.pins25 | 26 ++++++++++++++++++++
 prg/synan/fail15.pins25 | 26 ++++++++++++++++++++
 prg/synan/fail16.pins25 |  1 +
 prg/synan/fail17.pins25 |  1 +
 prg/synan/fail18.pins25 |  1 +
 prg/synan/fail19.pins25 |  2 ++
 prg/synan/fail2.pins25  |  2 ++
 prg/synan/fail20.pins25 |  1 +
 prg/synan/fail3.pins25  |  2 ++
 prg/synan/fail4.pins25  |  1 +
 prg/synan/fail5.pins25  |  0
 prg/synan/fail6.pins25  |  1 +
 prg/synan/fail7.pins25  |  4 ++++
 prg/synan/fail8.pins25  |  3 +++
 prg/synan/fail9.pins25  |  6 +++++
 prg/synan/pass1.pins25  | 44 ++++++++++++++++++++++++++++++++++
 prg/synan/pass2.pins25  | 37 ++++++++++++++++++++++++++++
 prg/synan/pass3.pins25  | 26 ++++++++++++++++++++
 prg/synan/run-tests.sh  |  7 ++++++
 25 files changed, 224 insertions(+), 53 deletions(-)
 delete mode 100644 generate.py
 create mode 100644 prg/synan/fail1.pins25
 create mode 100644 prg/synan/fail10.pins25
 create mode 100644 prg/synan/fail11.pins25
 create mode 100644 prg/synan/fail12.pins25
 create mode 100644 prg/synan/fail13.pins25
 create mode 100644 prg/synan/fail14.pins25
 create mode 100644 prg/synan/fail15.pins25
 create mode 100644 prg/synan/fail16.pins25
 create mode 100644 prg/synan/fail17.pins25
 create mode 100644 prg/synan/fail18.pins25
 create mode 100644 prg/synan/fail19.pins25
 create mode 100644 prg/synan/fail2.pins25
 create mode 100644 prg/synan/fail20.pins25
 create mode 100644 prg/synan/fail3.pins25
 create mode 100644 prg/synan/fail4.pins25
 create mode 100644 prg/synan/fail5.pins25
 create mode 100644 prg/synan/fail6.pins25
 create mode 100644 prg/synan/fail7.pins25
 create mode 100644 prg/synan/fail8.pins25
 create mode 100644 prg/synan/fail9.pins25
 create mode 100644 prg/synan/pass1.pins25
 create mode 100644 prg/synan/pass2.pins25
 create mode 100644 prg/synan/pass3.pins25
 create mode 100644 prg/synan/run-tests.sh

diff --git a/generate.py b/generate.py
deleted file mode 100644
index 4d5ab82..0000000
--- a/generate.py
+++ /dev/null
@@ -1,53 +0,0 @@
-from collections import defaultdict
-
-data = open('./grammar.txt').read().split()
-
-productions = defaultdict(lambda: [])
-
-
-def recurse(prod):
-    prods = []
-    if prod not in productions.keys():
-        prods.append(prod)
-    else:
-        for p in productions[prod]:
-            if len(p):
-                prods += recurse(p[0])
-
-    return prods
-
-
-while len(data):
-    name = data.pop(0)
-    data.pop(0)  # ->
-
-    symbols = []
-    while True:
-        symbol = data.pop(0)
-        if symbol == '.':
-            productions[name].append(symbols)
-            break
-        if symbol == '|':
-            productions[name].append(symbols)
-            symbols = []
-            continue
-        symbols.append(symbol)
-
-for prod, defs in productions.items():
-    func = f"""private void {prod}() {{
-    Token token = lexAn.peekToken();
-    switch(token.symbol()) {{
-"""
-    for d in defs:
-        for r in recurse(d[0]):
-            func += f"        case {r}:\n"
-
-        func += f'            System.out.println("{prod} -> {defs}");'
-
-        for d2 in d:
-            if d2.isupper():
-                func += f"check({d2});"
-
-    func += """    }
-}"""
-    print(func)
diff --git a/prg/synan/fail1.pins25 b/prg/synan/fail1.pins25
new file mode 100644
index 0000000..1eb8b34
--- /dev/null
+++ b/prg/synan/fail1.pins25
@@ -0,0 +1,2 @@
+fun a() =
+    !+-^+++(a||b==(1 != 2 && 1/a%e+2-f/d*sa < (2 && 3) || (1>2>3) || (1<=2) && 1 >= c))^^^^^
diff --git a/prg/synan/fail10.pins25 b/prg/synan/fail10.pins25
new file mode 100644
index 0000000..5f35383
--- /dev/null
+++ b/prg/synan/fail10.pins25
@@ -0,0 +1,4 @@
+fun a() =
+    while 1 then
+        neki
+    end
\ No newline at end of file
diff --git a/prg/synan/fail11.pins25 b/prg/synan/fail11.pins25
new file mode 100644
index 0000000..546ccce
--- /dev/null
+++ b/prg/synan/fail11.pins25
@@ -0,0 +1,24 @@
+var _kfoai = 8 * "neki"
+var fkaio92j0a = 1 * 'a'
+
+fun a    (c,dvv,d,f,d)
+fun a() =
+    if !+-^+++(a||b==(1 != 2 && 1/a%e+2-f/d*sa < (2 && 3) || (1>2) || (1<=2) && 1 >= c))^^^^^ then
+         mfksa(arg1, arg2) = kdoisk(),
+        kajs(a,c,c,1,4,(1+2)&&9^^),
+        a,// komentar
+        _kpofad29-a0as
+    else
+         mfksa(arg1, arg2) = kdoisk(),
+        kajs(a,c,c,1,4,(1+2)&&9^^),
+        a,// komentar
+        _kpofad29-a0as
+   end
+
+   while !+-^+++(a||b==(1 != 2 && 1/a%e+2-f/d*sa < (2 && 3) || (1>2) || (1<=2) && 1 >= c))^^^^^ do
+        mfksa(arg1, arg2) = kdoisk(),
+        kajs(a,c,c,1,4,(1+2)&&9^^),
+        a,// komentar
+        _kpofad29-a0as
+    end
+
diff --git a/prg/synan/fail12.pins25 b/prg/synan/fail12.pins25
new file mode 100644
index 0000000..4d8e196
--- /dev/null
+++ b/prg/synan/fail12.pins25
@@ -0,0 +1 @@
+fun a() =
diff --git a/prg/synan/fail13.pins25 b/prg/synan/fail13.pins25
new file mode 100644
index 0000000..1cfce9f
--- /dev/null
+++ b/prg/synan/fail13.pins25
@@ -0,0 +1,2 @@
+fun a() =
+    1,2,
\ No newline at end of file
diff --git a/prg/synan/fail14.pins25 b/prg/synan/fail14.pins25
new file mode 100644
index 0000000..6c1099d
--- /dev/null
+++ b/prg/synan/fail14.pins25
@@ -0,0 +1,26 @@
+fun a() =
+
+    let var a = 1 in 1 end,
+
+    let fun a    (c,dvv,d,f,d)=
+                !+-^+++(a||b==(1 != 2 && 1/a%e+2-f/d*sa < (2 && 3) || (1>2) || (1<=2) && 1 >= c))^^^^^,
+                mfksa(arg1, arg2) = kdoisk(),
+                kajs(a,c,c,1,4,(1+2)&&9^^),
+                a,// komentar
+                _kpofad29-a0as,
+
+                if !+-^+++(a||b==(1 != 2 && 1/a%e+2-f/d*sa < (2 && 3) || (1>2) || (1<=2) && 1 >= c))^^^^^ then
+                     mfksa(arg1, arg2) = kdoisk(),
+                    kajs(a,c,c,1,4,(1+2)&&9^^),
+                    a,// komentar
+                    _kpofad29-a0as
+                end,
+        var a = 10 * "wawawaw"
+        fun b() fun c(a,a,v) in
+            !+-^+++(a||b==(1 != 2 && 1/a%e+2-f/d*sa < (2 && 3) || (1>2) || (1<=2) && 1 >= c))^^^^^,
+            mfksa(arg1, arg2) = kdoisk(),
+            kajs(a,c,c,1,4,(1+2)&&9^^),
+            a,// komentar
+            _kpofad29-a0as
+    end
+
diff --git a/prg/synan/fail15.pins25 b/prg/synan/fail15.pins25
new file mode 100644
index 0000000..7702b06
--- /dev/null
+++ b/prg/synan/fail15.pins25
@@ -0,0 +1,26 @@
+fun a() =
+
+    let var a = 1 in 1 end,
+
+    let fun a    (c,dvv,d,f,d)=
+                !+-^+++(a||b==(1 != 2 && 1/a%e+2-f/d*sa < (2 && 3) || (1>2) || (1<=2) && 1 >= c))^^^^^,
+                mfksa(arg1, arg2) = kdoisk(),
+                kajs(a,c,c,1,4,(1+2)&&9^^),
+                a,// komentar
+                _kpofad29-a0as,
+
+                if !+-^+++(a||b==(1 != 2 && 1/a%e+2-f/d*sa < (2 && 3) || (1>2) || (1<=2) && 1 >= c))^^^^^ then
+                     mfksa(arg1, arg2) = kdoisk(),
+                    kajs(a,c,c,1,4,(1+2)&&9^^),
+                    a,// komentar
+                    _kpofad29-a0as
+                end
+        var a = 10 * "wawawaw"
+        fun b(), fun c(a,a,v) in
+            !+-^+++(a||b==(1 != 2 && 1/a%e+2-f/d*sa < (2 && 3) || (1>2) || (1<=2) && 1 >= c))^^^^^,
+            mfksa(arg1, arg2) = kdoisk(),
+            kajs(a,c,c,1,4,(1+2)&&9^^),
+            a,// komentar
+            _kpofad29-a0as
+    end
+
diff --git a/prg/synan/fail16.pins25 b/prg/synan/fail16.pins25
new file mode 100644
index 0000000..5afb6b8
--- /dev/null
+++ b/prg/synan/fail16.pins25
@@ -0,0 +1 @@
+var a = "10" * "msl"
\ No newline at end of file
diff --git a/prg/synan/fail17.pins25 b/prg/synan/fail17.pins25
new file mode 100644
index 0000000..50ff1ec
--- /dev/null
+++ b/prg/synan/fail17.pins25
@@ -0,0 +1 @@
+var a = "10" * 10
\ No newline at end of file
diff --git a/prg/synan/fail18.pins25 b/prg/synan/fail18.pins25
new file mode 100644
index 0000000..08bf284
--- /dev/null
+++ b/prg/synan/fail18.pins25
@@ -0,0 +1 @@
+fun a(b,1)
\ No newline at end of file
diff --git a/prg/synan/fail19.pins25 b/prg/synan/fail19.pins25
new file mode 100644
index 0000000..d43d694
--- /dev/null
+++ b/prg/synan/fail19.pins25
@@ -0,0 +1,2 @@
+fun a() =
+    nka(aka(a((1 != 2 && 1/a%e+2-f/d*sa = (1 != 2 && 1/a%e+2-f/d*sa)))
\ No newline at end of file
diff --git a/prg/synan/fail2.pins25 b/prg/synan/fail2.pins25
new file mode 100644
index 0000000..16c9b1e
--- /dev/null
+++ b/prg/synan/fail2.pins25
@@ -0,0 +1,2 @@
+fun a() =
+    a==b==c
\ No newline at end of file
diff --git a/prg/synan/fail20.pins25 b/prg/synan/fail20.pins25
new file mode 100644
index 0000000..2940059
--- /dev/null
+++ b/prg/synan/fail20.pins25
@@ -0,0 +1 @@
+var a = 10 + "a"
\ No newline at end of file
diff --git a/prg/synan/fail3.pins25 b/prg/synan/fail3.pins25
new file mode 100644
index 0000000..be4dcbf
--- /dev/null
+++ b/prg/synan/fail3.pins25
@@ -0,0 +1,2 @@
+fun a =
+    1
\ No newline at end of file
diff --git a/prg/synan/fail4.pins25 b/prg/synan/fail4.pins25
new file mode 100644
index 0000000..15a9ae4
--- /dev/null
+++ b/prg/synan/fail4.pins25
@@ -0,0 +1 @@
+var a = 1 + 1
\ No newline at end of file
diff --git a/prg/synan/fail5.pins25 b/prg/synan/fail5.pins25
new file mode 100644
index 0000000..e69de29
diff --git a/prg/synan/fail6.pins25 b/prg/synan/fail6.pins25
new file mode 100644
index 0000000..0889787
--- /dev/null
+++ b/prg/synan/fail6.pins25
@@ -0,0 +1 @@
+fun a(g,d,d,g,g,f,,gf)
\ No newline at end of file
diff --git a/prg/synan/fail7.pins25 b/prg/synan/fail7.pins25
new file mode 100644
index 0000000..e33167f
--- /dev/null
+++ b/prg/synan/fail7.pins25
@@ -0,0 +1,4 @@
+fun a() =
+    1,
+    2
+    3
\ No newline at end of file
diff --git a/prg/synan/fail8.pins25 b/prg/synan/fail8.pins25
new file mode 100644
index 0000000..65d91f8
--- /dev/null
+++ b/prg/synan/fail8.pins25
@@ -0,0 +1,3 @@
+fun a() =
+    1//komentar,
+    2
\ No newline at end of file
diff --git a/prg/synan/fail9.pins25 b/prg/synan/fail9.pins25
new file mode 100644
index 0000000..0e201aa
--- /dev/null
+++ b/prg/synan/fail9.pins25
@@ -0,0 +1,6 @@
+fun a() =
+    if !+-^+++(a||b==(1 != 2 && 1/a%e+2-f/d*sa < (2 && 3) || (1>2) || (1<=2) && 1 >= c))^^^^^ then
+         mfksa(arg1, arg2) = kdoisk(),
+        kajs(a,c,c,1,4,(1+2)&&9^^),
+        a,// komentar
+        _kpofad29-a0as
diff --git a/prg/synan/pass1.pins25 b/prg/synan/pass1.pins25
new file mode 100644
index 0000000..cf66a47
--- /dev/null
+++ b/prg/synan/pass1.pins25
@@ -0,0 +1,44 @@
+var _kfoai = 8 * "neki"
+var fkaio92j0a = 1 * 'a'
+
+fun a    (c,dvv,d,f,d)
+
+fun b() =
+    1
+
+fun a() =
+    !+-^+++(a||b==(1 != 2 && 1/a%e+2-f/d*sa < (2 && 3) || (1>2) || (1<=2) && 1 >= c))^^^^^,
+    mfksa(arg1, arg2) = kdoisk(),
+    kajs(a,c,c,1,4,(1+2)&&9^^),
+    a,// komentar
+    _kpofad29-a0as,
+    nka(aka(a(1 != 2 && 1/a%e+2-f/d*sa, (1 != 2 && 1/a%e+2-f/d*sa)))) = 1 != 2 && 1/a%e+2-f/d*sa,
+    nka(aka(a(1 != 2 && 1/a%e+2-f/d*sa, (1 != 2 && 1/a%e+2-f/d*sa))), njc(1+'a')) = 1 != 2 && 1/a%e+2-f/d*sa,
+
+    if !+-^+++(a||b==(1 != 2 && 1/a%e+2-f/d*sa < (2 && 3) || (1>2) || (1<=2) && 1 >= c))^^^^^ then
+         mfksa(arg1, arg2) = kdoisk(),
+        kajs(a,c,c,1,4,(1+2)&&9^^),
+        a,// komentar
+        _kpofad29-a0as
+    end,
+
+    if !+-^+++(a||b==(1 != 2 && 1/a%e+2-f/d*sa < (2 && 3) || (1>2) || (1<=2) && 1 >= c))^^^^^ then
+         mfksa(arg1, arg2) = kdoisk(),
+        kajs(a,c,c,1,4,(1+2)&&9^^),
+        a,// komentar
+        _kpofad29-a0as
+    else
+         mfksa(arg1, arg2) = kdoisk(),
+        kajs(a,c,c,1,4,(1+2)&&9^^),
+        a,// komentar
+        _kpofad29-a0as
+   end
+
+    ,while !+-^+++(a-n()||b==(1 != (2 && 1)/a%(e+a()-2+mkla(a,g,"kof"-"string"%3+'j'&&2))-f/d*sa && osid*'a' < (2 && 3) || (1>2) || (1<=2) && 1 >= c))^^^^^ do
+         mfksa(arg1, arg2) = kdoisk(),
+        kajs(a,c,c,1,4,(1+2)&&9^^),
+        a,// komentar
+        _kpofad29-a0as
+    end
+
+
diff --git a/prg/synan/pass2.pins25 b/prg/synan/pass2.pins25
new file mode 100644
index 0000000..a3f8c25
--- /dev/null
+++ b/prg/synan/pass2.pins25
@@ -0,0 +1,37 @@
+fun noarg()
+fun onearg(a)
+fun multargs(a, b)
+fun funcassign(a) =
+    a = 1
+
+var a = 1
+var b = 'a'
+var c = "test"
+var e = 'a', "test", 4, 4 * 'a'
+var f = 1 * 3
+var g = 1 * 'a'
+var h = 4 * "aaa"
+var i =
+
+fun a() =
+    1, 'a', "a",
+    a, neki(a, 1, 'a', "a"),
+    a^, a^^,
+    +a, -a, !a, ^a, +-!^a,
+    a * b, a / b, a % b, a * b / c % d,
+    a + b, a - b,
+    a == b, a != b, a < b, a > b, a <= b, a >= b,
+    a && b, a && b && c,
+    a || b, a || b || c,
+    (1), (a + b), (a - (!(1) * 2)),
+    a + 1 = b - 1,
+    if a then b end,
+    if a == 3 then b = 1, !c end,
+    if !a then b else a = 3 * a end,
+    if a then b else a, b end,
+    while a <= 10 do a + 1 end,
+    while a <= 10 do a + 1, ^c end,
+    let fun a(b, c) in !b end,
+    let fun a(b, c) var e = 'o' in !b end,
+    let fun a(b, c) in !b, 4 end,
+    !+-^+++(a||b==(1 != 2 && 1/a%e+2-f/d*sa < (2 && 3) || (1>2) || (1<=2) && 1 >= c))^^^^^
\ No newline at end of file
diff --git a/prg/synan/pass3.pins25 b/prg/synan/pass3.pins25
new file mode 100644
index 0000000..76c150a
--- /dev/null
+++ b/prg/synan/pass3.pins25
@@ -0,0 +1,26 @@
+fun a() =
+
+    let var a = 1 in 1 end,
+
+    let fun a    (c,dvv,d,f,d)=
+                !+-^+++(a||b==(1 != 2 && 1/a%e+2-f/d*sa < (2 && 3) || (1>2) || (1<=2) && 1 >= c))^^^^^,
+                mfksa(arg1, arg2) = kdoisk(),
+                kajs(a,c,c,1,4,(1+2)&&9^^),
+                a,// komentar
+                _kpofad29-a0as,
+
+                if !+-^+++(a||b==(1 != 2 && 1/a%e+2-f/d*sa < (2 && 3) || (1>2) || (1<=2) && 1 >= c))^^^^^ then
+                     mfksa(arg1, arg2) = kdoisk(),
+                    kajs(a,c,c,1,4,(1+2)&&9^^),
+                    a,// komentar
+                    _kpofad29-a0as
+                end
+        var a = 10 * "wawawaw"
+        fun b() fun c(a,a,v) in
+            !+-^+++(a||b==(1 != 2 && 1/a%e+2-f/d*sa < (2 && 3) || (1>2) || (1<=2) && 1 >= c))^^^^^,
+            mfksa(arg1, arg2) = kdoisk(a(1)),
+            kajs(a,c,c,1,4,(1+2)&&9^^),
+            a,// komentar
+            _kpofad29-a0as
+    end
+
diff --git a/prg/synan/run-tests.sh b/prg/synan/run-tests.sh
new file mode 100644
index 0000000..307eeca
--- /dev/null
+++ b/prg/synan/run-tests.sh
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+for file in *.pins25; do
+    echo "Running $file"
+    java ../../src/pins25/phase/SynAn.java "$file" 2>&1 | tail -n 1
+    printf "\n"
+done
\ No newline at end of file