replaced references to increment_errors in tests
[voodoo-lang.git] / test / many-vars.voo
blobadfb8f739d39d7e69e89f58f004dc4cabe7d0bb7
1 #### Test using many variables
3 section data
4 align
5 format:
6 string "many_locals %d: %d\n\x00"
8 align
9 format1:
10 string "many_args: %d\n\x00"
12 align
13 format2:
14 string "many_args_tail: %d\n\x00"
16 align
17 print_args_fmt:
18 string "print_args %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n\x00"
20 section functions
21 import printf
22 export main
24 many_locals:
25 function x
26     let a x
27     let b add x 1
28     let c add x 2
29     let d add x 3
30     let e add x 4
31     let f add x 5
32     let g add x 6
33     let h add x 7
34     let i add x 8
35     let j add x 9
36     let k add x 10
37     let l add x 11
38     let m add x 12
39     let n add x 13
40     let o add x 14
41     let p add x 15
42     let q add x 16
43     let r add x 17
44     let s add x 18
45     let t add x 19
47     let sum add a b
48     set sum add sum c
49     set sum add sum d
50     set sum add sum e
51     set sum add sum f
52     set sum add sum g
53     set sum add sum h
54     set sum add sum i
55     set sum add sum j
56     set sum add sum k
57     set sum add sum l
58     set sum add sum m
59     set sum add sum n
60     set sum add sum o
61     set sum add sum p
62     set sum add sum q
63     set sum add sum r
64     set sum add sum s
65     set sum add sum t
67     return sum
68 end function
70 many_args:
71 function count a b c d e f g h i j k l m n o p q r s t
73     let result 0
74     ifle count 0
75         set result add result a
76         set result add result b
77         set result add result c
78         set result add result d
79         set result add result e
80         set result add result f
81         set result add result g
82         set result add result h
83         set result add result i
84         set result add result j
85         set result add result k
86         set result add result l
87         set result add result m
88         set result add result n
89         set result add result o
90         set result add result p
91         set result add result q
92         set result add result r
93         set result add result s
94         set result add result t
95         return result
96     end if
98     let newcount sub count 1
99     let newa add a 1
100     let newb add b 1
101     let newc add c 1
102     let newd add d 1
103     let newe add e 1
104     let newf add f 1
105     let newg add g 1
106     let newh add h 1
107     let newi add i 1
108     let newj add j 1
109     let newk add k 1
110     let newl add l 1
111     let newm add m 1
112     let newn add n 1
113     let newo add o 1
114     let newp add p 1
115     let newq add q 1
116     let newr add r 1
117     let news add s 1
118     let newt add t 1
120     return call many_args newcount newa newb newc newd newe newf newg newh \
121                 newi newj newk newl newm newn newo newp newq newr news newt
122 end function
124 many_args_tail:
125 function count a b c d e f g h i j k l m n o p q r s t
127     let result 0
128     ifle count 0
129         set result add result a
130         set result add result b
131         set result add result c
132         set result add result d
133         set result add result e
134         set result add result f
135         set result add result g
136         set result add result h
137         set result add result i
138         set result add result j
139         set result add result k
140         set result add result l
141         set result add result m
142         set result add result n
143         set result add result o
144         set result add result p
145         set result add result q
146         set result add result r
147         set result add result s
148         set result add result t
149         return result
150     end if
152     let newcount sub count 1
153     let newa add a 1
154     let newb add b 1
155     let newc add c 1
156     let newd add d 1
157     let newe add e 1
158     let newf add f 1
159     let newg add g 1
160     let newh add h 1
161     let newi add i 1
162     let newj add j 1
163     let newk add k 1
164     let newl add l 1
165     let newm add m 1
166     let newn add n 1
167     let newo add o 1
168     let newp add p 1
169     let newq add q 1
170     let newr add r 1
171     let news add s 1
172     let newt add t 1
174     tail-call many_args_tail newcount newa newb newc newd newe newf newg newh \
175               newi newj newk newl newm newn newo newp newq newr news newt
176 end function
178 print_args:
179 function a b c d e f g h i j k l m n o p q r s t u
180     call printf print_args_fmt a b c d e f g h i j k l m n o p q r s t u
181     return 0
182 end function
184 main:
185 function argc argv
186     let x call many_locals 1
187     call printf format 1 x
189     set x call many_locals -20
190     call printf format -20 x
192     call print_args 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
194     set x call many_args 3 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
195     call printf format1 x
197     set x call many_args_tail 1000000 1 2 3 4 5 6 7 8 9 10 11 \
198                               12 13 14 15 16 17 18 19 20
199     call printf format2 x
201     return 0
202 end function