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