[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator 0702765 293/434: Added incremental uni
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator 0702765 293/434: Added incremental unit test for exported parser/translator |
Date: |
Mon, 29 Nov 2021 16:00:01 -0500 (EST) |
branch: externals/parser-generator
commit 070276547b657d7ac98a036e2b4595659d737292
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Added incremental unit test for exported parser/translator
---
test/parser-generator-lr-export-test.el | 173 ++++++++++++++++++++++++++++++--
1 file changed, 167 insertions(+), 6 deletions(-)
diff --git a/test/parser-generator-lr-export-test.el
b/test/parser-generator-lr-export-test.el
index 0b81d8a..487c4e8 100644
--- a/test/parser-generator-lr-export-test.el
+++ b/test/parser-generator-lr-export-test.el
@@ -10,9 +10,111 @@
(require 'parser-generator-lr-export)
(require 'ert)
-(defun parser-generator-lr-export-test-to-elisp ()
- "Test `parser-generator-lr-export'."
- (message "Started tests for (parser-generator-lr-export-to-elisp)")
+(defun parser-generator-lr-export-test-incremental ()
+ "Test incremental parse and translate."
+ (message "Started incremental tests")
+
+ (let ((buffer (generate-new-buffer "*a*")))
+ (switch-to-buffer buffer)
+ (insert "aabb")
+
+ (parser-generator-set-grammar '((Sp S) ("a" "b") ((Sp S) (S (S "a" S "b"
(lambda(args) (let ((list "")) (dolist (item args) (when item (setq list
(format "%s%s" item list)))) list)))) (S e)) Sp))
+ (parser-generator-set-look-ahead-number 1)
+ (parser-generator-process-grammar)
+ (parser-generator-lr-generate-parser-tables)
+
+ (setq
+ parser-generator-lex-analyzer--function
+ (lambda (index)
+ (with-current-buffer "*a*"
+ (when (<= (+ index 1) (point-max))
+ (let ((start index)
+ (end (+ index 1)))
+ (let ((token (buffer-substring-no-properties start end)))
+ `(,token ,start . ,end)))))))
+
+ (setq
+ parser-generator-lex-analyzer--get-function
+ (lambda (token)
+ (with-current-buffer "*a*"
+ (let ((start (car (cdr token)))
+ (end (cdr (cdr token))))
+ (when (<= end (point-max))
+ (buffer-substring-no-properties start end))))))
+
+ (should
+ (equal
+ "bbaaba"
+ (parser-generator-lr-translate)))
+
+ ;; Export parser
+ (let ((export (parser-generator-lr-export-to-elisp "fa")))
+ (with-temp-buffer
+ (insert export)
+ (eval-buffer)
+ (should
+ (equal
+ t
+ (fboundp 'fa-translate))))
+
+ (when (fboundp 'fa-translate)
+ (should
+ (equal
+ "bbaaba"
+ (fa-translate))))))
+
+ (should
+ (equal
+ t
+ (fboundp 'fa--parse)))
+
+ (when (fboundp 'fa--parse)
+ (let ((regular-parse (fa--parse)))
+ ;; (message "regular-parse: %s" regular-parse)
+ (let ((regular-parse-history (nth 3 regular-parse)))
+ ;; (message "regular-parse-history: %s" regular-parse-history)
+ (let ((history-length (length regular-parse-history))
+ (history-index 0)
+ (history)
+ (iterated-history))
+ (while (< history-index history-length)
+ (setq history (nth history-index regular-parse-history))
+ (let ((input-tape-index (nth 0 history))
+ (pushdown-list (nth 1 history))
+ (output (nth 2 history))
+ (translation (nth 3 history))
+ (translation-symbol-table (nth 4 history))
+ (history-list iterated-history))
+
+ ;; (message "input-tape-index: %s" input-tape-index)
+ ;; (message "pushdown-list: %s" pushdown-list)
+ ;; (message "output: %s" output)
+ ;; (message "translation: %s" translation)
+ ;; (message "history-list: %s" history-list)
+
+ (let ((incremental-parse
+ (fa--parse
+ input-tape-index
+ pushdown-list
+ output
+ translation
+ translation-symbol-table
+ history-list)))
+ ;; (message "incremental-parse: %s" incremental-parse)
+ (should
+ (equal
+ regular-parse
+ incremental-parse))
+ (message "Passed incremental parse test %s" (1+
history-index)))
+
+ (push history iterated-history)
+ (setq history-index (1+ history-index))))))))
+
+ (message "Passed incremental tests"))
+
+(defun parser-generator-lr-export-test-parse ()
+ "Test exported parser."
+ (message "Started parse tests")
;; Generate parser
(parser-generator-set-grammar
@@ -100,7 +202,6 @@
;; Export parser
(let ((export (parser-generator-lr-export-to-elisp "fa")))
- (message "export:\n%s\n" export)
(with-temp-buffer
(insert export)
(eval-buffer)
@@ -118,11 +219,71 @@
(fa-translate))))
(message "Passed translate for exported parser")))
- (message "Passed tests for (parser-generator-lr-export-to-elisp)"))
+ (message "Passed parse tests"))
+
+(defun parser-generator-lr-export-test-translate ()
+ "Test exported translater."
+ (message "Started translate tests")
+
+ (let ((buffer (generate-new-buffer "*a*")))
+ (switch-to-buffer buffer)
+ (insert "aabb")
+
+ (parser-generator-set-grammar '((Sp S) ("a" "b") ((Sp S) (S (S "a" S "b"
(lambda(args) (let ((list "")) (dolist (item args) (when item (setq list
(format "%s%s" item list)))) list)))) (S e)) Sp))
+ (parser-generator-set-look-ahead-number 1)
+ (parser-generator-process-grammar)
+ (parser-generator-lr-generate-parser-tables)
+
+ (setq
+ parser-generator-lex-analyzer--function
+ (lambda (index)
+ (with-current-buffer "*a*"
+ (when (<= (+ index 1) (point-max))
+ (let ((start index)
+ (end (+ index 1)))
+ (let ((token (buffer-substring-no-properties start end)))
+ `(,token ,start . ,end)))))))
+
+ (setq
+ parser-generator-lex-analyzer--get-function
+ (lambda (token)
+ (with-current-buffer "*a*"
+ (let ((start (car (cdr token)))
+ (end (cdr (cdr token))))
+ (when (<= end (point-max))
+ (buffer-substring-no-properties start end))))))
+
+ (should
+ (equal
+ "bbaaba"
+ (parser-generator-lr-translate)))
+
+ (message "Passed translate before export")
+
+ ;; Export parser
+ (let ((export (parser-generator-lr-export-to-elisp "fa")))
+ (with-temp-buffer
+ (insert export)
+ (eval-buffer)
+ (should
+ (equal
+ t
+ (fboundp 'fa-translate))))
+
+ (when (fboundp 'fa-translate)
+ (should
+ (equal
+ "bbaaba"
+ (fa-translate))))
+ (message "Passed translate for exported parser")))
+
+ (message "Passed translate tests"))
(defun parser-generator-lr-export-test ()
"Run test."
- (parser-generator-lr-export-test-to-elisp))
+ (parser-generator-lr-export-test-parse)
+ (parser-generator-lr-export-test-translate)
+ (parser-generator-lr-export-test-incremental))
(provide 'parser-generator-lr-export-test)
- [elpa] externals/parser-generator 16f6586 242/434: Fixed bug in lr-item generation were look-ahead was disregarded, (continued)
- [elpa] externals/parser-generator 16f6586 242/434: Fixed bug in lr-item generation were look-ahead was disregarded, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 36701c0 238/434: Optimized closure algorithm to only use possible next-symbols instead of iterating all symbols, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 3e096f7 258/434: Improved translation handling for each production, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 96cd5de 259/434: Improved validation of grammar structure, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator bbdbd18 269/434: Started on test for LR Parse k=0, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 56363c1 263/434: Fixed last TODO items, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 175a579 275/434: Passed test for generation action-table LR(0) grammar, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator ecbbf21 290/434: Added test for exported translator, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator cecf8fd 287/434: More TODO items, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 688e685 291/434: Lex-analyzer index is now buffer-local variable, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 0702765 293/434: Added incremental unit test for exported parser/translator,
ELPA Syncer <=
- [elpa] externals/parser-generator 552c0c5 304/434: Using better hash-key for goto-tables generation, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator d0d3201 299/434: FIRST calculation now handles cyclic productions, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 5145cda 306/434: Improved hash-key integrity for LRk Parser, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 2227cae 313/434: Moved validation of valid lr-item set to generation of goto-tables, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator a86c658 305/434: Improved output, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator dcbbdee 315/434: Started on support for symbol attributes, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 0c1b8b6 316/434: Passing tests for symbol attributes, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator c886537 311/434: Using references for distinct goto-tables to optimize memory usage, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 06bff4b 321/434: Improved validation of conflict-resolution using attributes, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator ea898ce 317/434: Fixed code-styling, ELPA Syncer, 2021/11/29