[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator 603df44 040/434: Added failing unit te
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator 603df44 040/434: Added failing unit tests for (parser--sort-list) |
Date: |
Mon, 29 Nov 2021 15:59:04 -0500 (EST) |
branch: externals/parser-generator
commit 603df447f55155755e6ef6c831b788155d99c705
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Added failing unit tests for (parser--sort-list)
---
parser.el | 22 +++++++++++++++++
test/parser-test.el | 71 ++++++++++++++++++++++++++++++++++++-----------------
2 files changed, 71 insertions(+), 22 deletions(-)
diff --git a/parser.el b/parser.el
index cb461b1..038378f 100644
--- a/parser.el
+++ b/parser.el
@@ -115,6 +115,25 @@
(setq parser--f-sets nil)
(parser--load-symbols))
+(defun parser--sort-list (a b)
+ "Return non-nil if a element in A is greater than a element in B in
lexicographic order."
+ (let ((max-index (1- (min (length a) (length b))))
+ (index 0)
+ (continue t)
+ (response nil))
+ (while (and
+ continue
+ (< index max-index))
+ (let ((a-element (nth index a))
+ (b-element (nth index b)))
+ (if (string-greaterp a-element b-element)
+ (setq continue nil)
+ (when (string-greaterp b-element a-element)
+ (setq response t)
+ (setq continue nil))))
+ (setq index (1+ index)))
+ response))
+
(defun parser--valid-e-p (symbol)
"Return whether SYMBOL is the e identifier or not."
(eq symbol 'e))
@@ -543,6 +562,9 @@
(setq input-tape-index (1+ input-tape-index)))
(when (> first-length 0)
(push first first-list))))))
+ (message "first-list-before-sort: %s" first-list)
+ (setq first-list (sort first-list 'parser--sort-list))
+ (message "first-list-after-sort: %s" first-list)
first-list))))
;; Definition p. 343, FOLLOW(β) = w, w is the set {w|β=>*aβy and w is in
FIRST(y)}
diff --git a/test/parser-test.el b/test/parser-test.el
index 92074e3..e787e4c 100644
--- a/test/parser-test.el
+++ b/test/parser-test.el
@@ -9,6 +9,32 @@
(require 'parser)
(require 'ert)
+(defun parser-test--sort-list ()
+ "Test `parser--sort-list'."
+ (message "Starting tests for (parser-test--sort-list)")
+
+ (should
+ (equal
+ '((a b c) (b c d) (c e f))
+ (sort '((a b c) (c e f) (b c d)) 'parser--sort-list)))
+
+ (should
+ (equal
+ '((a b c) (a c c) (c e f))
+ (sort '((a c c) (a b c) (c e f)) 'parser--sort-list)))
+
+ (should
+ (equal
+ '((a b) (a c c) (c e f g h))
+ (sort '((a c c) (a b) (c e f g h)) 'parser--sort-list)))
+
+ (should
+ (equal
+ '((a) (b) (c))
+ (sort '((a) (c) (b)) 'parser--sort-list)))
+
+ (message "Passed tests for (parser--distinct)"))
+
(defun parser-test--distinct ()
"Test `parser--distinct'."
(message "Starting tests for (parser--distinct)")
@@ -134,7 +160,7 @@
(parser--set-look-ahead-number 2)
(should
(equal
- '((d a) (c f))
+ '((c f) (d a))
(parser--first 'S)))
(message "Passed first 2 with semi-complex grammar")
@@ -142,7 +168,7 @@
(parser--set-look-ahead-number 3)
(should
(equal
- '(("d" "a" "m") ("c" "a" "m"))
+ '(("c" "a" "m") ("d" "a" "m"))
(parser--first 'S)))
(message "Passed first 3 with semi-complex grammar")
@@ -150,7 +176,7 @@
(parser--set-look-ahead-number 1)
(should
(equal
- '((e) (c) (b) (a))
+ '((a) (a) (c) (e))
(parser--first 'S)))
(message "Passed first 1 with complex grammar")
@@ -212,40 +238,40 @@
(message "Starting tests for (parser--valid-grammar-p)")
(should (equal
- t
- (parser--valid-grammar-p '((A B C) ("a" "b" "c") ((A "a")) A))))
+ t
+ (parser--valid-grammar-p '((A B C) ("a" "b" "c") ((A "a")) A))))
(should (equal
- nil
- (parser--valid-grammar-p '((A B C) ("a" "b" "c") ((A "a")) (A)))))
+ nil
+ (parser--valid-grammar-p '((A B C) ("a" "b" "c") ((A "a")) (A)))))
(should (equal
- nil
- (parser--valid-grammar-p '((A B C) (("a" "b") "c") ((A "a")) A))))
+ nil
+ (parser--valid-grammar-p '((A B C) (("a" "b") "c") ((A "a")) A))))
(should (equal
- nil
- (parser--valid-grammar-p '(((A B) C) ("a" "b" "c") ((A "a")) A))))
+ nil
+ (parser--valid-grammar-p '(((A B) C) ("a" "b" "c") ((A "a")) A))))
(should (equal
- nil
- (parser--valid-grammar-p '(((A B) C) ("a" "b" "c") ((A)) A))))
+ nil
+ (parser--valid-grammar-p '(((A B) C) ("a" "b" "c") ((A)) A))))
(should (equal
- nil
- (parser--valid-grammar-p "A")))
+ nil
+ (parser--valid-grammar-p "A")))
(should (equal
- nil
- (parser--valid-grammar-p '(A B C))))
+ nil
+ (parser--valid-grammar-p '(A B C))))
(should (equal
- nil
- (parser--valid-grammar-p '((A B)))))
+ nil
+ (parser--valid-grammar-p '((A B)))))
(should (equal
- nil
- (parser--valid-grammar-p '((A B C) (a (b c) "c") (A ("a" "b") (a b)) (B b)
(C "c")))))
+ nil
+ (parser--valid-grammar-p '((A B C) (a (b c) "c") (A ("a" "b") (a
b)) (B b) (C "c")))))
(message "Passed tests for (parser--valid-grammar-p)"))
@@ -309,8 +335,9 @@
(parser-test--valid-look-ahead-number-p)
(parser-test--valid-production-p)
(parser-test--valid-grammar-p)
- (parser-test--distinct)
(parser-test--valid-sentential-form-p)
+ (parser-test--distinct)
+ (parser-test--sort-list)
(parser-test--first)
(parser-test--e-free-first)
(parser-test--follow)
- [elpa] externals/parser-generator 9d0d9e5 027/434: Various debugging, (continued)
- [elpa] externals/parser-generator 9d0d9e5 027/434: Various debugging, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator e644708 018/434: Improved validation of grammar syntax, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator fbb8cad 012/434: Starting a refactor, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 563cbdd 023/434: Passed FIRST tests for semi-complex grammar, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator dc78de7 025/434: Fixed page comment reference, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 3e02435 028/434: Passing complex 2 test, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 8e99d0c 035/434: Fixed typo, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator bc1ec12 036/434: Improved documentation, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator fe94691 048/434: Added hash-table for production RHS, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator afa7cb9 050/434: Added unit tests for retrieving grammar RHS, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 603df44 040/434: Added failing unit tests for (parser--sort-list),
ELPA Syncer <=
- [elpa] externals/parser-generator aadb31a 042/434: Updated README.md about FOLLOW-sets, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 586a38e 047/434: More work on algorithm 5.8, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 00ffcde 052/434: Added TODO items, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 7e051d3 054/434: Algorithm 5.8 completed but not tested, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 8e436df 056/434: More tweaking, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator a60952c 057/434: More debugging of new algorithm, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator ab0559d 060/434: More work, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator d7f43d7 066/434: Sorting lr-items for prefix before return, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator ca85ef4 068/434: Created TODO items, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator b73c4ed 072/434: Made e-symbol customizable, ELPA Syncer, 2021/11/29