aboutsummaryrefslogtreecommitdiff
path: root/new-luxc/test/test/luxc/parser.lux
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--new-luxc/test/test/luxc/parser.lux214
1 files changed, 111 insertions, 103 deletions
diff --git a/new-luxc/test/test/luxc/parser.lux b/new-luxc/test/test/luxc/parser.lux
index ca980aa87..576a48ea3 100644
--- a/new-luxc/test/test/luxc/parser.lux
+++ b/new-luxc/test/test/luxc/parser.lux
@@ -74,51 +74,57 @@
composite^))))))
(context: "Lux code parser."
- #seed +15545773516740647407
- [sample code^]
- (test "Can parse Lux code."
- (case (&;parse [default-cursor (code;to-text sample)])
- (#e;Error error)
- false
+ (<| (seed +15545773516740647407)
+ ## (times +100)
+ (do @
+ [sample code^]
+ (test "Can parse Lux code."
+ (case (&;parse [default-cursor (code;to-text sample)])
+ (#e;Error error)
+ false
- (#e;Success [_ parsed])
- (:: code;Eq<Code> = parsed sample))
- ))
+ (#e;Success [_ parsed])
+ (:: code;Eq<Code> = parsed sample))
+ ))))
(def: nat-to-frac
(-> Nat Frac)
(|>. nat-to-int int-to-frac))
(context: "Frac special syntax."
- [numerator (|> r;nat (:: @ map (|>. (n.% +100) nat-to-frac)))
- denominator (|> r;nat (:: @ map (|>. (n.% +100) (n.max +1) nat-to-frac)))
- signed? r;bool
- #let [expected (|> numerator (f./ denominator) (f.* (if signed? -1.0 1.0)))]]
- (test "Can parse frac ratio syntax."
- (case (&;parse [default-cursor
- (format (if signed? "-" "")
- (%i (frac-to-int numerator))
- "/"
- (%i (frac-to-int denominator)))])
- (#e;Success [_ [_ (#;Frac actual)]])
- (f.= expected actual)
-
- _
- false)
- ))
+ (<| (times +100)
+ (do @
+ [numerator (|> r;nat (:: @ map (|>. (n.% +100) nat-to-frac)))
+ denominator (|> r;nat (:: @ map (|>. (n.% +100) (n.max +1) nat-to-frac)))
+ signed? r;bool
+ #let [expected (|> numerator (f./ denominator) (f.* (if signed? -1.0 1.0)))]]
+ (test "Can parse frac ratio syntax."
+ (case (&;parse [default-cursor
+ (format (if signed? "-" "")
+ (%i (frac-to-int numerator))
+ "/"
+ (%i (frac-to-int denominator)))])
+ (#e;Success [_ [_ (#;Frac actual)]])
+ (f.= expected actual)
+
+ _
+ false)
+ ))))
(context: "Nat special syntax."
- #seed +8051810494442953019
- [expected (|> r;nat (:: @ map (n.% +1_000)))]
- (test "Can parse nat char syntax."
- (case (&;parse [default-cursor
- (format "#\"" (text;from-code expected) "\"")])
- (#e;Success [_ [_ (#;Nat actual)]])
- (n.= expected actual)
-
- _
- false)
- ))
+ (<| (seed +8051810494442953019)
+ ## (times +100)
+ (do @
+ [expected (|> r;nat (:: @ map (n.% +1_000)))]
+ (test "Can parse nat char syntax."
+ (case (&;parse [default-cursor
+ (format "#\"" (text;from-code expected) "\"")])
+ (#e;Success [_ [_ (#;Nat actual)]])
+ (n.= expected actual)
+
+ _
+ false)
+ ))))
(def: comment-text^
(r;Random Text)
@@ -143,70 +149,72 @@
(wrap (format "#( " comment " )#")))))))
(context: "Multi-line text & comments."
- #seed +709318929887591337
- [#let [char-gen (|> r;nat (r;filter (function [value]
- (not (or (text;space? value)
- (n.= (char "\"") value))))))]
- x char-gen
- y char-gen
- z char-gen
- offset-size (|> r;nat (r/map (|>. (n.% +10) (n.max +1))))
- #let [offset (text;join-with "" (list;repeat offset-size " "))]
- sample code^
- comment comment^
- unbalanced-comment comment-text^]
- ($_ seq
- (test "Will reject invalid multi-line text."
- (let [bad-match (format (text;from-code x) "\n"
- (text;from-code y) "\n"
- (text;from-code z))]
- (case (&;parse [default-cursor
- (format "\"" bad-match "\"")])
- (#e;Error error)
- true
-
- (#e;Success [_ parsed])
- false)))
- (test "Will accept valid multi-line text"
- (let [good-input (format (text;from-code x) "\n"
- offset (text;from-code y) "\n"
- offset (text;from-code z))
- good-output (format (text;from-code x) "\n"
- (text;from-code y) "\n"
- (text;from-code z))]
- (case (&;parse [(|> default-cursor
- (update@ #;column (n.+ (n.dec offset-size))))
- (format "\"" good-input "\"")])
- (#e;Error error)
- false
-
- (#e;Success [_ parsed])
- (:: code;Eq<Code> =
- parsed
- (code;text good-output)))))
- (test "Can handle comments."
- (case (&;parse [default-cursor
- (format comment (code;to-text sample))])
- (#e;Error error)
- false
-
- (#e;Success [_ parsed])
- (:: code;Eq<Code> = parsed sample)))
- (test "Will reject unbalanced multi-line comments."
- (and (case (&;parse [default-cursor
- (format "#(" "#(" unbalanced-comment ")#"
- (code;to-text sample))])
- (#e;Error error)
- true
-
- (#e;Success [_ parsed])
- false)
- (case (&;parse [default-cursor
- (format "#(" unbalanced-comment ")#" ")#"
- (code;to-text sample))])
- (#e;Error error)
- true
-
- (#e;Success [_ parsed])
- false)))
- ))
+ (<| (seed +709318929887591337)
+ ## (times +100)
+ (do @
+ [#let [char-gen (|> r;nat (r;filter (function [value]
+ (not (or (text;space? value)
+ (n.= (char "\"") value))))))]
+ x char-gen
+ y char-gen
+ z char-gen
+ offset-size (|> r;nat (r/map (|>. (n.% +10) (n.max +1))))
+ #let [offset (text;join-with "" (list;repeat offset-size " "))]
+ sample code^
+ comment comment^
+ unbalanced-comment comment-text^]
+ ($_ seq
+ (test "Will reject invalid multi-line text."
+ (let [bad-match (format (text;from-code x) "\n"
+ (text;from-code y) "\n"
+ (text;from-code z))]
+ (case (&;parse [default-cursor
+ (format "\"" bad-match "\"")])
+ (#e;Error error)
+ true
+
+ (#e;Success [_ parsed])
+ false)))
+ (test "Will accept valid multi-line text"
+ (let [good-input (format (text;from-code x) "\n"
+ offset (text;from-code y) "\n"
+ offset (text;from-code z))
+ good-output (format (text;from-code x) "\n"
+ (text;from-code y) "\n"
+ (text;from-code z))]
+ (case (&;parse [(|> default-cursor
+ (update@ #;column (n.+ (n.dec offset-size))))
+ (format "\"" good-input "\"")])
+ (#e;Error error)
+ false
+
+ (#e;Success [_ parsed])
+ (:: code;Eq<Code> =
+ parsed
+ (code;text good-output)))))
+ (test "Can handle comments."
+ (case (&;parse [default-cursor
+ (format comment (code;to-text sample))])
+ (#e;Error error)
+ false
+
+ (#e;Success [_ parsed])
+ (:: code;Eq<Code> = parsed sample)))
+ (test "Will reject unbalanced multi-line comments."
+ (and (case (&;parse [default-cursor
+ (format "#(" "#(" unbalanced-comment ")#"
+ (code;to-text sample))])
+ (#e;Error error)
+ true
+
+ (#e;Success [_ parsed])
+ false)
+ (case (&;parse [default-cursor
+ (format "#(" unbalanced-comment ")#" ")#"
+ (code;to-text sample))])
+ (#e;Error error)
+ true
+
+ (#e;Success [_ parsed])
+ false)))
+ ))))