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