]> gitweb.factorcode.org Git - factor.git/blob - libs/parser-combinators/tests.factor
more sql changes
[factor.git] / libs / 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 force
79 ] unit-test-fails 
80
81 { "begin" } [
82   "begin" "begin" token some parse force
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" } T{ slice f "1111234" 4 7 }  }
106     T{ parse-result f { "1" "1" "1" } T{ slice f "1111234" 3 7 } }
107     T{ parse-result f { "1" "1" } T{ slice f "1111234" 2 7 } }
108     T{ parse-result f { "1" } T{ slice f "1111234" 1 7 } }
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" } T{ slice f "1111234" 4 7 } }
119     T{ parse-result f { "111" } T{ slice f "1111234" 3 7 } }
120     T{ parse-result f { "11" } T{ slice f "1111234" 2 7 } }
121     T{ parse-result f { "1" } T{ slice f "1111234" 1 7 } }
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" } T{ slice f "1234" 1 4 } } } } [
134   "1234" "1" token <+> parse list>array
135 ] unit-test
136
137
138   {
139     T{ parse-result f { "1" "1" "1" "1" } T{ slice f "1111234" 4 7 } }
140     T{ parse-result f { "1" "1" "1" }  T{ slice f "1111234" 3 7 } }
141     T{ parse-result f { "1" "1" }  T{ slice f "1111234" 2 7 } }
142     T{ parse-result f { "1" } T{ slice f "1111234" 1 7 } }
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