@@ -130,6 +130,99 @@ func Test_option_value()
130130 set cpo &vim
131131endfunc
132132
133+ function Test_printf_misc ()
134+ call assert_equal (' 123' , printf (' %d' , 123 ))
135+ call assert_equal (' 123' , printf (' %i' , 123 ))
136+ call assert_equal (' 123' , printf (' %D' , 123 ))
137+ call assert_equal (' 123' , printf (' %U' , 123 ))
138+ call assert_equal (' 173' , printf (' %o' , 123 ))
139+ call assert_equal (' 173' , printf (' %O' , 123 ))
140+ call assert_equal (' 7b' , printf (' %x' , 123 ))
141+ call assert_equal (' 7B' , printf (' %X' , 123 ))
142+ if has (' ebcdic' )
143+ call assert_equal (' #' , printf (' %c' , 123 ))
144+ else
145+ call assert_equal (' {' , printf (' %c' , 123 ))
146+ endif
147+ call assert_equal (' abc' , printf (' %s' , ' abc' ))
148+ call assert_equal (' abc' , printf (' %S' , ' abc' ))
149+
150+ call assert_equal (' +123' , printf (' %+d' , 123 ))
151+ call assert_equal (' -123' , printf (' %+d' , -123 ))
152+ call assert_equal (' +123' , printf (' %+ d' , 123 ))
153+ call assert_equal (' 123' , printf (' % d' , 123 ))
154+ call assert_equal (' 123' , printf (' % d' , 123 ))
155+ call assert_equal (' -123' , printf (' % d' , -123 ))
156+
157+ call assert_equal (' 00123' , printf (' %.*d' , 5 , 123 ))
158+ call assert_equal (' 123' , printf (' % *d' , 5 , 123 ))
159+ call assert_equal (' +123' , printf (' %+ *d' , 5 , 123 ))
160+
161+ call assert_equal (' 123' , printf (' %2d' , 123 ))
162+ call assert_equal (' 123' , printf (' %5d' , 123 ))
163+ call assert_equal (' 00123' , printf (' %05d' , 123 ))
164+ call assert_equal (' 123 ' , printf (' %-5d' , 123 ))
165+ call assert_equal (' 0x7b' , printf (' %#x' , 123 ))
166+ call assert_equal (' 0X7B' , printf (' %#X' , 123 ))
167+ call assert_equal (' 0173' , printf (' %#o' , 123 ))
168+ call assert_equal (' 0173' , printf (' %#O' , 123 ))
169+ call assert_equal (' abc' , printf (' %#s' , ' abc' ))
170+ call assert_equal (' abc' , printf (' %#S' , ' abc' ))
171+
172+ call assert_equal (' 00123' , printf (' %6.5d' , 123 ))
173+ call assert_equal (' 0007b' , printf (' %6.5x' , 123 ))
174+
175+ call assert_equal (' abc' , printf (' %2s' , ' abc' ))
176+ call assert_equal (' abc' , printf (' %2S' , ' abc' ))
177+ call assert_equal (' abc' , printf (' %.4s' , ' abc' ))
178+ call assert_equal (' abc' , printf (' %.4S' , ' abc' ))
179+ call assert_equal (' ab' , printf (' %.2s' , ' abc' ))
180+ call assert_equal (' ab' , printf (' %.2S' , ' abc' ))
181+ call assert_equal (' ' , printf (' %.0s' , ' abc' ))
182+ call assert_equal (' ' , printf (' %.s' , ' abc' ))
183+ call assert_equal (' abc' , printf (' %4s' , ' abc' ))
184+ call assert_equal (' abc' , printf (' %4S' , ' abc' ))
185+ call assert_equal (' 0abc' , printf (' %04s' , ' abc' ))
186+ call assert_equal (' 0abc' , printf (' %04S' , ' abc' ))
187+ call assert_equal (' abc ' , printf (' %-4s' , ' abc' ))
188+ call assert_equal (' abc ' , printf (' %-4S' , ' abc' ))
189+
190+ call assert_equal (' 1%' , printf (' %d%%' , 1 ))
191+ endfunc
192+
193+ function Test_printf_float ()
194+ if has (' float' )
195+ call assert_equal (' 1.230000' , printf (' %f' , 1.23 ))
196+ call assert_equal (' 1.230000' , printf (' %F' , 1.23 ))
197+ call assert_equal (' 1.23' , printf (' %g' , 1.23 ))
198+ call assert_equal (' 1.23' , printf (' %G' , 1.23 ))
199+ call assert_equal (' 1.230000e+00' , printf (' %e' , 1.23 ))
200+ call assert_equal (' 1.230000E+00' , printf (' %E' , 1.23 ))
201+ call assert_equal (' 1.200000e-02' , printf (' %e' , 0.012 ))
202+ call assert_equal (' -1.200000e-02' , printf (' %e' , -0.012 ))
203+ call assert_equal (' 1.2' , printf (' %.1f' , 1.23 ))
204+
205+ call assert_equal (' inf' , printf (' %f' , 1.0 /0.0 ))
206+
207+ " This prints inf but shouldn't it print -inf instead?
208+ call assert_match (' ^-\?inf$' , printf (' %f' , -1.0 /0.0 ))
209+
210+ " This prints -nan but shouldn't it print nan instead?
211+ call assert_match (' ^-\?nan$' , printf (' %f' , sqrt (-1.0 )))
212+ call assert_match (' ^-\?nan$' , printf (' %f' , 0.0 /0.0 ))
213+
214+ call assert_fails (' echo printf("%f", "a")' , ' E807:' )
215+ endif
216+ endfunc
217+
218+ function Test_printf_errors ()
219+ call assert_fails (' echo printf("%d", {})' , ' E728:' )
220+ call assert_fails (' echo printf("%d", [])' , ' E745:' )
221+ call assert_fails (' echo printf("%d", 1, 2)' , ' E767:' )
222+ call assert_fails (' echo printf("%*d", 1)' , ' E766:' )
223+ call assert_fails (' echo printf("%d", 1.2)' , ' E805:' )
224+ endfunc
225+
133226function Test_printf_64bit ()
134227 if has (' num64' )
135228 call assert_equal (" 123456789012345" , printf (' %d' , 123456789012345 ))
0 commit comments