]> gitweb.factorcode.org Git - factor.git/blob - extra/peg/pl0/pl0-tests.factor
2d76c8df71469c045b5d038613b485f7299dbfa1
[factor.git] / extra / peg / pl0 / pl0-tests.factor
1 ! Copyright (C) 2007 Chris Double.
2 ! See http://factorcode.org/license.txt for BSD license.
3 !
4 USING: kernel tools.test peg peg.ebnf peg.ebnf.private peg.pl0 
5        sequences accessors ;
6 IN: peg.pl0.tests
7
8 { t } [
9   "CONST foo = 1;" "block" \ pl0 rule (parse) remaining>> empty? 
10 ] unit-test
11
12 { t } [
13   "VAR foo;" "block" \ pl0 rule (parse) remaining>> empty?
14 ] unit-test
15
16 { t } [
17   "VAR foo,bar , baz;" "block" \ pl0 rule (parse) remaining>> empty? 
18 ] unit-test
19
20 { t } [
21   "foo := 5" "statement" \ pl0 rule (parse) remaining>> empty? 
22 ] unit-test
23
24 { t } [
25   "BEGIN foo := 5 END" "statement" \ pl0 rule (parse) remaining>> empty? 
26 ] unit-test
27
28 { t } [
29   "IF 1=1 THEN foo := 5" "statement" \ pl0 rule (parse) remaining>> empty? 
30 ] unit-test
31
32 { t } [
33   "WHILE 1=1 DO foo := 5" "statement" \ pl0 rule (parse) remaining>> empty? 
34 ] unit-test
35
36 { t } [
37   "WHILE ODD 1 DO foo := 5" "statement" \ pl0 rule (parse) remaining>> empty? 
38 ] unit-test
39
40 { t } [
41   "PROCEDURE square; BEGIN squ:=x*x END" "block" \ pl0 rule (parse) remaining>> empty? 
42 ] unit-test
43
44 { t } [
45 """VAR x, squ;
46
47 PROCEDURE square;
48 BEGIN
49    squ := x * x
50 END;
51
52 BEGIN
53    x := 1;
54    WHILE x <= 10 DO
55    BEGIN
56       CALL square;
57       x := x + 1;
58    END
59 END.""" main \ pl0 rule (parse) remaining>> empty?
60 ] unit-test
61
62 { f } [
63 """ 
64 CONST
65   m =  7,
66   n = 85;
67
68 VAR
69   x, y, z, q, r;
70
71 PROCEDURE multiply;
72 VAR a, b;
73
74 BEGIN
75   a := x;
76   b := y;
77   z := 0;
78   WHILE b > 0 DO BEGIN
79     IF ODD b THEN z := z + a;
80     a := 2 * a;
81     b := b / 2;
82   END
83 END;
84
85 PROCEDURE divide;
86 VAR w;
87 BEGIN
88   r := x;
89   q := 0;
90   w := y;
91   WHILE w <= r DO w := 2 * w;
92   WHILE w > y DO BEGIN
93     q := 2 * q;
94     w := w / 2;
95     IF w <= r THEN BEGIN
96       r := r - w;
97       q := q + 1
98     END
99   END
100 END;
101
102 PROCEDURE gcd;
103 VAR f, g;
104 BEGIN
105   f := x;
106   g := y;
107   WHILE f # g DO BEGIN
108     IF f < g THEN g := g - f;
109     IF g < f THEN f := f - g;
110   END;
111   z := f
112 END;
113
114 BEGIN
115   x := m;
116   y := n;
117   CALL multiply;
118   x := 25;
119   y :=  3;
120   CALL divide;
121   x := 84;
122   y := 36;
123   CALL gcd;
124 END.
125 """ main \ pl0 rule (parse) remaining>> empty?
126 ] unit-test