source: project/release/5/slib-prec/trunk/tests/slib-prec-test.scm @ 38725

Last change on this file since 38725 was 38725, checked in by Kon Lovett, 4 months ago

scheme-ify grammar

File size: 2.7 KB
Line 
1;;;; slib-prec-test.scm  -*- scheme -*-
2;;;; Kon Lovett, Apr '20
3
4(import test)
5
6(test-begin "SLIB Precedence Parser")
7
8(import slib-prec)
9
10;;
11
12;;;
13
14(import (chicken base))
15(import utf8)
16(import utf8-srfi-13)
17
18;; Operator Aliaes
19
20(define ^ expt)
21(define mod modulo)
22
23;;
24
25;defgrammar doesn't `define'
26(import slib-basic-grammars)
27(import slib-standard-grammar)
28(import slib-tex-grammar)
29
30;init by id-# grammar lookup
31(define-constant TEST-GRAMMARS '(standard disp2d tex null scheme schemepretty))
32(clear-grammar-ids)
33(grammar-id-name-setup! TEST-GRAMMARS)
34(active-grammar-set! 'standard #f 'schemepretty)
35
36;;
37
38(test-group "Grammer IDs"
39  (test (length TEST-GRAMMARS) (count-of-grammar-ids))
40  (test 'standard (grammar-id-name 0))
41  (test 'scheme (grammar-id-name 4))
42)
43
44;;
45
46(define-syntax test-parse
47  (syntax-rules ()
48    ((test-parse ?out ?in)
49      (test ?in ?out (read-sexp-from-string ?in)) )
50    ((test-parse ?msg ?out ?in)
51      (test ?msg ?out (read-sexp-from-string ?in)) ) ) )
52
53(test-group "Arithmetic Grammer (Jacal, English, derived)"
54
55  (test-parse '(+ 1 (* 2 a)) "1 + 2 * a")
56  (test-parse '(+ 1 2 (* abc a)) "1 + 2 + abc * a")
57  (test-parse '(* (+ 1 2) (f a b)) "(1 + 2) * f(a, b)")
58
59  (test-parse
60    '(or (/ (* (+ 1 2) (f a b)) 27.9) PI)
61    "(1 + 2) * f(a, b) / 27.9 || PI")
62  (test-parse
63    '(and (/ (* (+ 1 2) (f a b)) 27.9) PI)
64    "(1 + 2) * f(a, b) / 27.9 && PI")
65  (test-parse
66    '(or (and BAZ PI) (and (not FOO) BAR))
67    "BAZ && PI || !FOO && BAR")
68
69  (test-parse
70    '(bitwise-ior (bitwise-xor (bitwise-ior a (bitwise-and b c)) (bitwise-not b)) d)
71    "a | b & c ^ ~b | d")
72
73  ;FIXME handle ratios ? / in a/b vs a / b ?
74  #; ; "N/D (ratio) => (/ N D)"
75  (test-parse '(* (+ 1 2) 1/5) "(1 + 2) * 1/5")
76  ;#; ;
77  (test-parse '(/ (* (+ 1 2) 1) 5) "(1 + 2) * 1/5")
78
79  (test 15 (eval (read-sexp-from-string "(1 + 2) * 5;")))
80  (test 15.0 (eval (read-sexp-from-string "(1.0 + 2) * 5")))
81  (test 3/5 (eval (read-sexp-from-string "(1 + 2) * 1/5")))
82
83  (test 8 (eval (read-sexp-from-string "2**3")))
84)
85
86;;
87
88#| ;comment to activate for csi (csc needs extension)
89(read-syntax-setup!)
90
91(test-group "Reader #{...}"
92  (test "w/ spaces" 3/5 #{ (1 + 2) / 5 }) ;(* (+ 1 2) 5)
93  (test "w/o spaces" 3/5 #{(1+2)/5})      ;(* (+ 1 2) 5)
94  (test 1 #{ {1} })                       ;(or 1)
95  (test #(1) #{ [1] })                    ;(vector 1)
96  (test 8 #{ expt(2, 3) })                ;(expt 2 3)
97  (test 8 #{ 2**3 })                      ;(expt 2 3)
98)
99
100(test-group "Reader #<id>{...}"
101  (test 15 #0{(1 + 2) * 5}) ;(* (+ 1 2) 5)
102  (test 1 #0{{1}})          ;(or 1)
103  (test 8 #0{expt(2,3)})    ;(expt 2 3)
104  (test 8 #0{2^3})          ;(expt 2 3)
105  (test #(1) #0{[1]})       ;(vector 1)
106  (test #(1) #1{[1]})       ;(vector 1)
107)
108|#
109
110;;;
111
112(test-end "SLIB Precedence Parser")
113
114::
115
116(test-exit)
Note: See TracBrowser for help on using the repository browser.