summaryrefslogtreecommitdiff
path: root/tests.scm
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")