Mercurial > vim
comparison src/testdir/test_profile.vim @ 14591:96878f6f5d4c v8.1.0309
patch 8.1.0309: profiling does not show a count for condition lines
commit https://github.com/vim/vim/commit/7feb35e7782907b44659a2748ff5d7489deeed74
Author: Bram Moolenaar <Bram@vim.org>
Date: Tue Aug 21 17:49:54 2018 +0200
patch 8.1.0309: profiling does not show a count for condition lines
Problem: Profiling does not show a count for condition lines. (Daniel
Hahler)
Solution: Count lines when not skipping. (Ozaki Kiichi, closes #2499)
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Tue, 21 Aug 2018 18:00:08 +0200 |
parents | 24109c2e0b0b |
children | 2c0f454fcdc9 |
comparison
equal
deleted
inserted
replaced
14590:1de2c65bd8a0 | 14591:96878f6f5d4c |
---|---|
65 call assert_equal('', lines[11]) | 65 call assert_equal('', lines[11]) |
66 call assert_equal('count total (s) self (s)', lines[12]) | 66 call assert_equal('count total (s) self (s)', lines[12]) |
67 call assert_match('^\s*1\s\+.*\slet l:count = 100$', lines[13]) | 67 call assert_match('^\s*1\s\+.*\slet l:count = 100$', lines[13]) |
68 call assert_match('^\s*101\s\+.*\swhile l:count > 0$', lines[14]) | 68 call assert_match('^\s*101\s\+.*\swhile l:count > 0$', lines[14]) |
69 call assert_match('^\s*100\s\+.*\s let l:count = l:count - 1$', lines[15]) | 69 call assert_match('^\s*100\s\+.*\s let l:count = l:count - 1$', lines[15]) |
70 call assert_match('^\s*100\s\+.*\sendwhile$', lines[16]) | 70 call assert_match('^\s*101\s\+.*\sendwhile$', lines[16]) |
71 call assert_equal('', lines[17]) | 71 call assert_equal('', lines[17]) |
72 call assert_equal('FUNCTIONS SORTED ON TOTAL TIME', lines[18]) | 72 call assert_equal('FUNCTIONS SORTED ON TOTAL TIME', lines[18]) |
73 call assert_equal('count total (s) self (s) function', lines[19]) | 73 call assert_equal('count total (s) self (s) function', lines[19]) |
74 call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo2()$', lines[20]) | 74 call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo2()$', lines[20]) |
75 call assert_match('^\s*2\s\+\d\+\.\d\+\s\+Foo1()$', lines[21]) | 75 call assert_match('^\s*2\s\+\d\+\.\d\+\s\+Foo1()$', lines[21]) |
77 call assert_equal('FUNCTIONS SORTED ON SELF TIME', lines[23]) | 77 call assert_equal('FUNCTIONS SORTED ON SELF TIME', lines[23]) |
78 call assert_equal('count total (s) self (s) function', lines[24]) | 78 call assert_equal('count total (s) self (s) function', lines[24]) |
79 call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo2()$', lines[25]) | 79 call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo2()$', lines[25]) |
80 call assert_match('^\s*2\s\+\d\+\.\d\+\s\+Foo1()$', lines[26]) | 80 call assert_match('^\s*2\s\+\d\+\.\d\+\s\+Foo1()$', lines[26]) |
81 call assert_equal('', lines[27]) | 81 call assert_equal('', lines[27]) |
82 | |
83 call delete('Xprofile_func.vim') | |
84 call delete('Xprofile_func.log') | |
85 endfunc | |
86 | |
87 func Test_profile_func_with_ifelse() | |
88 let lines = [ | |
89 \ "func! Foo1()", | |
90 \ " if 1", | |
91 \ " let x = 0", | |
92 \ " elseif 1", | |
93 \ " let x = 1", | |
94 \ " else", | |
95 \ " let x = 2", | |
96 \ " endif", | |
97 \ "endfunc", | |
98 \ "func! Foo2()", | |
99 \ " if 0", | |
100 \ " let x = 0", | |
101 \ " elseif 1", | |
102 \ " let x = 1", | |
103 \ " else", | |
104 \ " let x = 2", | |
105 \ " endif", | |
106 \ "endfunc", | |
107 \ "func! Foo3()", | |
108 \ " if 0", | |
109 \ " let x = 0", | |
110 \ " elseif 0", | |
111 \ " let x = 1", | |
112 \ " else", | |
113 \ " let x = 2", | |
114 \ " endif", | |
115 \ "endfunc", | |
116 \ "call Foo1()", | |
117 \ "call Foo2()", | |
118 \ "call Foo3()", | |
119 \ ] | |
120 | |
121 call writefile(lines, 'Xprofile_func.vim') | |
122 call system(v:progpath | |
123 \ . ' -es -u NONE -U NONE -i NONE --noplugin' | |
124 \ . ' -c "profile start Xprofile_func.log"' | |
125 \ . ' -c "profile func Foo*"' | |
126 \ . ' -c "so Xprofile_func.vim"' | |
127 \ . ' -c "qall!"') | |
128 call assert_equal(0, v:shell_error) | |
129 | |
130 let lines = readfile('Xprofile_func.log') | |
131 | |
132 " - Foo1() should pass 'if' block. | |
133 " - Foo2() should pass 'elseif' block. | |
134 " - Foo3() should pass 'else' block. | |
135 call assert_equal(54, len(lines)) | |
136 | |
137 call assert_equal('FUNCTION Foo1()', lines[0]) | |
138 call assert_equal('Called 1 time', lines[1]) | |
139 call assert_match('^Total time:\s\+\d\+\.\d\+$', lines[2]) | |
140 call assert_match('^ Self time:\s\+\d\+\.\d\+$', lines[3]) | |
141 call assert_equal('', lines[4]) | |
142 call assert_equal('count total (s) self (s)', lines[5]) | |
143 call assert_match('^\s*1\s\+.*\sif 1$', lines[6]) | |
144 call assert_match('^\s*1\s\+.*\s let x = 0$', lines[7]) | |
145 call assert_match( '^\s\+elseif 1$', lines[8]) | |
146 call assert_match( '^\s\+let x = 1$', lines[9]) | |
147 call assert_match( '^\s\+else$', lines[10]) | |
148 call assert_match( '^\s\+let x = 2$', lines[11]) | |
149 call assert_match('^\s*1\s\+.*\sendif$', lines[12]) | |
150 call assert_equal('', lines[13]) | |
151 call assert_equal('FUNCTION Foo2()', lines[14]) | |
152 call assert_equal('Called 1 time', lines[15]) | |
153 call assert_match('^Total time:\s\+\d\+\.\d\+$', lines[16]) | |
154 call assert_match('^ Self time:\s\+\d\+\.\d\+$', lines[17]) | |
155 call assert_equal('', lines[18]) | |
156 call assert_equal('count total (s) self (s)', lines[19]) | |
157 call assert_match('^\s*1\s\+.*\sif 0$', lines[20]) | |
158 call assert_match( '^\s\+let x = 0$', lines[21]) | |
159 call assert_match('^\s*1\s\+.*\selseif 1$', lines[22]) | |
160 call assert_match('^\s*1\s\+.*\s let x = 1$', lines[23]) | |
161 call assert_match( '^\s\+else$', lines[24]) | |
162 call assert_match( '^\s\+let x = 2$', lines[25]) | |
163 call assert_match('^\s*1\s\+.*\sendif$', lines[26]) | |
164 call assert_equal('', lines[27]) | |
165 call assert_equal('FUNCTION Foo3()', lines[28]) | |
166 call assert_equal('Called 1 time', lines[29]) | |
167 call assert_match('^Total time:\s\+\d\+\.\d\+$', lines[30]) | |
168 call assert_match('^ Self time:\s\+\d\+\.\d\+$', lines[31]) | |
169 call assert_equal('', lines[32]) | |
170 call assert_equal('count total (s) self (s)', lines[33]) | |
171 call assert_match('^\s*1\s\+.*\sif 0$', lines[34]) | |
172 call assert_match( '^\s\+let x = 0$', lines[35]) | |
173 call assert_match('^\s*1\s\+.*\selseif 0$', lines[36]) | |
174 call assert_match( '^\s\+let x = 1$', lines[37]) | |
175 call assert_match('^\s*1\s\+.*\selse$', lines[38]) | |
176 call assert_match('^\s*1\s\+.*\s let x = 2$', lines[39]) | |
177 call assert_match('^\s*1\s\+.*\sendif$', lines[40]) | |
178 call assert_equal('', lines[41]) | |
179 call assert_equal('FUNCTIONS SORTED ON TOTAL TIME', lines[42]) | |
180 call assert_equal('count total (s) self (s) function', lines[43]) | |
181 call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[44]) | |
182 call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[45]) | |
183 call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[46]) | |
184 call assert_equal('', lines[47]) | |
185 call assert_equal('FUNCTIONS SORTED ON SELF TIME', lines[48]) | |
186 call assert_equal('count total (s) self (s) function', lines[49]) | |
187 call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[50]) | |
188 call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[51]) | |
189 call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[52]) | |
190 call assert_equal('', lines[53]) | |
191 | |
192 call delete('Xprofile_func.vim') | |
193 call delete('Xprofile_func.log') | |
194 endfunc | |
195 | |
196 func Test_profile_func_with_trycatch() | |
197 let lines = [ | |
198 \ "func! Foo1()", | |
199 \ " try", | |
200 \ " let x = 0", | |
201 \ " catch", | |
202 \ " let x = 1", | |
203 \ " finally", | |
204 \ " let x = 2", | |
205 \ " endtry", | |
206 \ "endfunc", | |
207 \ "func! Foo2()", | |
208 \ " try", | |
209 \ " throw 0", | |
210 \ " catch", | |
211 \ " let x = 1", | |
212 \ " finally", | |
213 \ " let x = 2", | |
214 \ " endtry", | |
215 \ "endfunc", | |
216 \ "func! Foo3()", | |
217 \ " try", | |
218 \ " throw 0", | |
219 \ " catch", | |
220 \ " throw 1", | |
221 \ " finally", | |
222 \ " let x = 2", | |
223 \ " endtry", | |
224 \ "endfunc", | |
225 \ "call Foo1()", | |
226 \ "call Foo2()", | |
227 \ "try", | |
228 \ " call Foo3()", | |
229 \ "catch", | |
230 \ "endtry", | |
231 \ ] | |
232 | |
233 call writefile(lines, 'Xprofile_func.vim') | |
234 call system(v:progpath | |
235 \ . ' -es -u NONE -U NONE -i NONE --noplugin' | |
236 \ . ' -c "profile start Xprofile_func.log"' | |
237 \ . ' -c "profile func Foo*"' | |
238 \ . ' -c "so Xprofile_func.vim"' | |
239 \ . ' -c "qall!"') | |
240 call assert_equal(0, v:shell_error) | |
241 | |
242 let lines = readfile('Xprofile_func.log') | |
243 | |
244 " - Foo1() should pass 'try' 'finally' blocks. | |
245 " - Foo2() should pass 'catch' 'finally' blocks. | |
246 " - Foo3() should not pass 'endtry'. | |
247 call assert_equal(54, len(lines)) | |
248 | |
249 call assert_equal('FUNCTION Foo1()', lines[0]) | |
250 call assert_equal('Called 1 time', lines[1]) | |
251 call assert_match('^Total time:\s\+\d\+\.\d\+$', lines[2]) | |
252 call assert_match('^ Self time:\s\+\d\+\.\d\+$', lines[3]) | |
253 call assert_equal('', lines[4]) | |
254 call assert_equal('count total (s) self (s)', lines[5]) | |
255 call assert_match('^\s*1\s\+.*\stry$', lines[6]) | |
256 call assert_match('^\s*1\s\+.*\s let x = 0$', lines[7]) | |
257 call assert_match( '^\s\+catch$', lines[8]) | |
258 call assert_match( '^\s\+let x = 1$', lines[9]) | |
259 call assert_match('^\s*1\s\+.*\sfinally$', lines[10]) | |
260 call assert_match('^\s*1\s\+.*\s let x = 2$', lines[11]) | |
261 call assert_match('^\s*1\s\+.*\sendtry$', lines[12]) | |
262 call assert_equal('', lines[13]) | |
263 call assert_equal('FUNCTION Foo2()', lines[14]) | |
264 call assert_equal('Called 1 time', lines[15]) | |
265 call assert_match('^Total time:\s\+\d\+\.\d\+$', lines[16]) | |
266 call assert_match('^ Self time:\s\+\d\+\.\d\+$', lines[17]) | |
267 call assert_equal('', lines[18]) | |
268 call assert_equal('count total (s) self (s)', lines[19]) | |
269 call assert_match('^\s*1\s\+.*\stry$', lines[20]) | |
270 call assert_match('^\s*1\s\+.*\s throw 0$', lines[21]) | |
271 call assert_match('^\s*1\s\+.*\scatch$', lines[22]) | |
272 call assert_match('^\s*1\s\+.*\s let x = 1$', lines[23]) | |
273 call assert_match('^\s*1\s\+.*\sfinally$', lines[24]) | |
274 call assert_match('^\s*1\s\+.*\s let x = 2$', lines[25]) | |
275 call assert_match('^\s*1\s\+.*\sendtry$', lines[26]) | |
276 call assert_equal('', lines[27]) | |
277 call assert_equal('FUNCTION Foo3()', lines[28]) | |
278 call assert_equal('Called 1 time', lines[29]) | |
279 call assert_match('^Total time:\s\+\d\+\.\d\+$', lines[30]) | |
280 call assert_match('^ Self time:\s\+\d\+\.\d\+$', lines[31]) | |
281 call assert_equal('', lines[32]) | |
282 call assert_equal('count total (s) self (s)', lines[33]) | |
283 call assert_match('^\s*1\s\+.*\stry$', lines[34]) | |
284 call assert_match('^\s*1\s\+.*\s throw 0$', lines[35]) | |
285 call assert_match('^\s*1\s\+.*\scatch$', lines[36]) | |
286 call assert_match('^\s*1\s\+.*\s throw 1$', lines[37]) | |
287 call assert_match('^\s*1\s\+.*\sfinally$', lines[38]) | |
288 call assert_match('^\s*1\s\+.*\s let x = 2$', lines[39]) | |
289 call assert_match( '^\s\+endtry$', lines[40]) | |
290 call assert_equal('', lines[41]) | |
291 call assert_equal('FUNCTIONS SORTED ON TOTAL TIME', lines[42]) | |
292 call assert_equal('count total (s) self (s) function', lines[43]) | |
293 call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[44]) | |
294 call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[45]) | |
295 call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[46]) | |
296 call assert_equal('', lines[47]) | |
297 call assert_equal('FUNCTIONS SORTED ON SELF TIME', lines[48]) | |
298 call assert_equal('count total (s) self (s) function', lines[49]) | |
299 call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[50]) | |
300 call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[51]) | |
301 call assert_match('^\s*1\s\+\d\+\.\d\+\s\+Foo.()$', lines[52]) | |
302 call assert_equal('', lines[53]) | |
82 | 303 |
83 call delete('Xprofile_func.vim') | 304 call delete('Xprofile_func.vim') |
84 call delete('Xprofile_func.log') | 305 call delete('Xprofile_func.log') |
85 endfunc | 306 endfunc |
86 | 307 |
121 " First line of loop executes one more time than body to detect end of loop. | 342 " First line of loop executes one more time than body to detect end of loop. |
122 call assert_match('^\s*22\s\+\d\+\.\d\+\s\+for i in range(10)$', lines[8]) | 343 call assert_match('^\s*22\s\+\d\+\.\d\+\s\+for i in range(10)$', lines[8]) |
123 call assert_equal(' " a comment', lines[9]) | 344 call assert_equal(' " a comment', lines[9]) |
124 " if self and total are equal we only get one number | 345 " if self and total are equal we only get one number |
125 call assert_match('^\s*20\s\+\(\d\+\.\d\+\s\+\)\=\d\+\.\d\+\s\+call Foo()$', lines[10]) | 346 call assert_match('^\s*20\s\+\(\d\+\.\d\+\s\+\)\=\d\+\.\d\+\s\+call Foo()$', lines[10]) |
126 call assert_match('^\s*20\s\+\d\+\.\d\+\s\+endfor$', lines[11]) | 347 call assert_match('^\s*22\s\+\d\+\.\d\+\s\+endfor$', lines[11]) |
127 " if self and total are equal we only get one number | 348 " if self and total are equal we only get one number |
128 call assert_match('^\s*2\s\+\(\d\+\.\d\+\s\+\)\=\d\+\.\d\+\s\+call Foo()$', lines[12]) | 349 call assert_match('^\s*2\s\+\(\d\+\.\d\+\s\+\)\=\d\+\.\d\+\s\+call Foo()$', lines[12]) |
129 call assert_equal('', lines[13]) | 350 call assert_equal('', lines[13]) |
130 | 351 |
131 call delete('Xprofile_file.vim') | 352 call delete('Xprofile_file.vim') |