blob: bd6a456a8005674da121f6bdcd6649abbc81f95f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
(define-module (tests)
#:use-module (srfi srfi-64)
#:use-module (parser-combinators))
(test-begin "parser-combinators")
(test-assert "parse-failure?" (parse-failure? %parse-failure))
(test-group "parse-success?"
(test-assert (parse-success? (parse-result "" 0)))
(test-assert (not (parse-success? %parse-failure))))
(test-equal "parse-fail" (parse-fail "foo" 0) %parse-failure)
(test-equal "parse-return"
((parse-return "foo") "bar" 0)
(parse-result "foo" 0))
(test-equal "parse-lift"
(let ((parser ((parse-lift string-reverse) "foo")))
(parser "bar" 0))
(parse-result "oof" 0))
(test-group "parse-bind"
(let ((parse-reverse (parse-lift string-reverse)))
(test-equal (let ((parser (parse-bind (parse-return "foo") parse-reverse)))
(parser "bar" 0))
(parse-result "oof" 0))
(test-equal ((parse-bind parse-fail parse-reverse) "bar" 0)
%parse-failure)))
(test-group "parse-alt"
(test-equal ((parse-alt) "foo" 0) %parse-failure)
(test-equal ((parse-alt (parse-return "bar") parse-fail) "foo" 0)
(parse-result "bar" 0))
(test-equal ((parse-alt parse-fail (parse-return "bar")) "foo" 0)
(parse-result "bar" 0)))
(test-group "parse-seq"
(test-equal ((parse-seq) "foo" 0)
(parse-result '() 0))
(test-equal ((parse-seq (parse-return "bar")) "foo" 0)
(parse-result '("bar") 0))
(test-equal ((parse-seq (parse-return "bar") (parse-return "baz")) "foo" 0)
(parse-result '("bar" "baz") 0))
(test-equal ((parse-seq (parse-return "bar") parse-fail) "foo" 0)
%parse-failure)
(test-equal ((parse-seq parse-fail (parse-return "bar")) "foo" 0)
%parse-failure))
(test-group "parse"
(test-equal (parse (parse-return "foo") "bar") "foo")
(test-equal (parse parse-fail "foo") #f)
(test-equal (parse parse-fail "foo" 'oops) 'oops))
(test-end "parser-combinators")
|