branch: externals/parser-generator
commit 446cbe94f38d44f223dd2fcd9a628c91c48b7d66
Author: Christian Johansson <christ...@cvj.se>
Commit: Christian Johansson <christ...@cvj.se>

    Refactored unit tests and separated k=2 case
---
 test/parser-generator-lr-test.el | 59 +++++++++++++++++++++++++++++++++++++++-
 1 file changed, 58 insertions(+), 1 deletion(-)

diff --git a/test/parser-generator-lr-test.el b/test/parser-generator-lr-test.el
index 629a052..a5654bc 100644
--- a/test/parser-generator-lr-test.el
+++ b/test/parser-generator-lr-test.el
@@ -439,6 +439,62 @@
 
   (message "Passed tests for (parser-generator-lr--parse)"))
 
+(defun parser-generator-lr-test-parse-k-2 ()
+  "Test `parser-generator-lr-parse' with k = 2."
+  (message "Started tests for (parser-generator-lr-parse) k = 2")
+
+  (setq
+   parser-generator-lex-analyzer--function
+   (lambda (index)
+     (let* ((string '(("a" 1 . 2) ("a" 2 . 3) ("b" 3 . 4) ("b" 4 . 5)))
+            (string-length (length string))
+            (max-index index)
+            (tokens))
+       (while (and
+               (< (1- index) string-length)
+               (< (1- index) max-index))
+         (push (nth (1- index) string) tokens)
+         (setq index (1+ index)))
+       (nreverse tokens))))
+
+  (message "Starting test with look-ahead number = 2")
+
+  (parser-generator-set-grammar '((Sp S) ("a" "b") ((Sp S) (S (S "a" S "b")) 
(S e)) Sp))
+  (parser-generator-set-look-ahead-number 2)
+  (parser-generator-process-grammar)
+  (let ((lr-items (parser-generator-lr--generate-goto-tables)))
+    (parser-generator--debug
+     (message "lr-items: %s" (parser-generator--hash-values-to-list lr-items 
t)))
+
+    ;; TODO Fix so that there is an accept path in look-ahead number 2
+
+    (parser-generator--debug
+     (message "goto-tables: %s" (parser-generator--hash-values-to-list 
parser-generator-lr--goto-tables t)))
+    (parser-generator-lr--generate-action-tables lr-items)
+    ;; TODO Should generate accept somewhere in this action-table
+    (parser-generator--debug
+     (message "action-tables: %s" (parser-generator--hash-values-to-list 
parser-generator-lr--action-tables t))))
+  (setq
+   parser-generator-lex-analyzer--function
+   (lambda (index)
+     (let* ((string '(("a" 1 . 2) ("a" 2 . 3) ("b" 3 . 4)))
+            (string-length (length string))
+            (max-index index)
+            (tokens))
+       (while (and
+               (< (1- index) string-length)
+               (< (1- index) max-index))
+         (push (nth (1- index) string) tokens)
+         (setq index (1+ index)))
+       (nreverse tokens))))
+  (should
+   (equal
+    '(2 2 2 1 1)
+    (parser-generator-lr-parse)))
+  (message "Passed test with terminals as string with look-ahead-number 2")
+
+  (message "Passed tests for (parser-generator-lr--parse-k-2)"))
+
 (defun parser-generator-lr-test-translate ()
   "Test `parser-generator-lr-translate'."
   (message "Started tests for (parser-generator-lr-translate)")
@@ -605,7 +661,8 @@
   (parser-generator-lr-test--generate-goto-tables)
   (parser-generator-lr-test--generate-action-tables)
   (parser-generator-lr-test-parse)
-  (parser-generator-lr-test-translate))
+  (parser-generator-lr-test-translate)
+  (parser-generator-lr-test-parse-k-2))
 
 
 (provide 'parser-generator-lr-test)

Reply via email to