]> gitweb.factorcode.org Git - factor.git/blob - contrib/parser-combinators/tests.factor
9bb7db994ecabb342006a058cf4615a7b1845869
[factor.git] / contrib / parser-combinators / tests.factor
1 ! Copyright (C) 2005 Chris Double.
2 ! See http://factorcode.org/license.txt for BSD license.
3 !
4 USING: kernel lazy-lists test errors strings parser math sequences parser-combinators arrays ;
5 IN: scratchpad
6
7 ! Testing <&>
8 [ { T{ parse-result f { "a" "b" } T{ slice f "abcd" 2 4 } } }  ] [
9   "abcd" "a" token "b" token <&> parse list>array
10 ] unit-test
11
12 [ { T{ parse-result f { { "a" "b" } "c" } T{ slice f "abcd" 3 4 } } } ] [
13   "abcd" "a" token "b" token <&> "c" token <&> parse list>array
14 ] unit-test
15
16 [ { T{ parse-result f { "a" { "b" "c" } } T{ slice f "abcd" 3 4 }  } } ] [
17   "abcd" "a" token "b" token "c" token <&> <&> parse list>array
18 ] unit-test
19
20 [ { } ] [
21   "decd" "a" token "b" token <&> parse list>array
22 ] unit-test
23
24 [ { } ] [
25   "dbcd" "a" token "b" token <&> parse list>array
26 ] unit-test
27
28 [ { } ] [
29   "adcd" "a" token "b" token <&> parse list>array
30 ] unit-test
31
32 ! Testing <|>
33 [ { T{ parse-result f "a" T{ slice f "abcd" 1 4 } } } ] [
34   "abcd" "a" token "b" token <|> parse list>array
35 ] unit-test
36
37 [ { T{ parse-result f "b" T{ slice f "bbcd" 1 4 } } }  ] [
38   "bbcd" "a" token "b" token <|> parse list>array
39 ] unit-test
40
41 [ { } ] [
42   "cbcd" "a" token "b" token <|> parse list>array
43 ] unit-test
44
45 ! Testing sp
46 [ { } ] [
47   "  abcd" "a" token parse list>array 
48 ] unit-test
49
50 [ { T{ parse-result f "a" T{ slice f "  abcd" 3 6 } } }  ] [
51   "  abcd" "a" token sp parse list>array 
52 ] unit-test
53
54 ! Testing just
55 [ { T{ parse-result f "abcd" T{ slice f "abcd" 4 4 } } T{ parse-result f "abc" T{ slice f "abcd" 3 4 } } } ] [
56   "abcd" "abcd" token "abc" token <|> parse list>array
57 ] unit-test
58
59 [ { T{ parse-result f "abcd" T{ slice f "abcd" 4 4 } } } ] [
60   "abcd" "abcd" token "abc" token <|> just parse list>array
61 ] unit-test 
62
63 ! Testing <@
64 [ { T{ parse-result f 48 T{ slice f "01234" 1 5 } } } ] [
65   "01234" [ digit? ] satisfy parse list>array 
66 ] unit-test
67
68 [ { T{ parse-result f 0 T{ slice f "01234" 1 5 } } } ] [
69   "01234" [ digit? ] satisfy [ digit> ] <@ parse list>array 
70 ] unit-test
71
72 ! Testing some
73 [ { T{ parse-result f "begin" T{ slice f "begin1" 5 6 } } } ] [
74   "begin1" "begin" token parse list>array
75 ] unit-test
76
77 [
78   "begin1" "begin" token some parse 
79 ] unit-test-fails 
80
81 [ "begin" ] [
82   "begin" "begin" token some parse 
83 ] unit-test
84
85 ! <& parser and &> parser
86 [ { T{ parse-result f { "a" "b" } T{ slice f "abcd" 2 4 } } } ] [
87   "abcd" "a" token "b" token <&> parse list>array
88 ] unit-test
89
90 [ { T{ parse-result f "a" T{ slice f "abcd" 2 4 } } } ] [
91   "abcd" "a" token "b" token <& parse list>array
92 ] unit-test
93
94 [ { T{ parse-result f "b" T{ slice f "abcd" 2 4 } } } ] [
95   "abcd" "a" token "b" token &> parse list>array
96 ] unit-test
97
98 ! Testing <*> and <:&>
99 [ { T{ parse-result f { "1" } T{ slice f "1234" 1 4 } } T{ parse-result f [ ] "1234" } } } ] [
100   "1234" "1" token <*> parse list>array
101 ] unit-test
102
103
104   {
105     T{ parse-result f { "1" "1" "1" "1" } "234" }
106     T{ parse-result f { "1" "1" "1" } "1234" }
107     T{ parse-result f { "1" "1" } "11234" }
108     T{ parse-result f { "1" } "111234" }
109     T{ parse-result f [ ] "1111234" }
110   }
111
112 ] [
113   "1111234" "1" token <*> parse list>array
114 ] unit-test
115
116
117   {
118     T{ parse-result f { "1111" } "234" }
119     T{ parse-result f { "111" } "1234" }
120     T{ parse-result f { "11" } "11234" }
121     T{ parse-result f { "1" } "111234" }
122     T{ parse-result f { [ ] } "1111234" }
123   }
124 ] [
125   "1111234" "1" token <*> [ concat 1array ] <@ parse list>array
126 ] unit-test
127
128 [ { T{ parse-result f [ ] "234" } } ] [
129   "234" "1" token <*> parse list>array
130 ] unit-test
131
132 ! Testing <+>
133 [ { T{ parse-result f { "1" } "234" } } ] [
134   "1234" "1" token <+> parse list>array
135 ] unit-test
136
137
138   {
139     T{ parse-result f { "1" "1" "1" "1" } "234" }
140     T{ parse-result f { "1" "1" "1" } "1234" }
141     T{ parse-result f { "1" "1" } "11234" }
142     T{ parse-result f { "1" } "111234" }
143   }
144 ] [
145   "1111234" "1" token <+> parse list>array
146 ] unit-test
147
148 [ { } ] [
149   "234" "1" token <+> parse list>array
150 ] unit-test
151
152