USING: calendar kernel formatting tools.test system ;
IN: formatting.tests
-[ "%s" printf ] must-infer
+[ "%s" printf ] must-infer
[ "%s" sprintf ] must-infer
[ "" ] [ "" sprintf ] unit-test
[ "1.2346" ] [ 1.23456789 "%.4f" sprintf ] unit-test
[ " 1.23" ] [ 1.23456789 "%6.2f" sprintf ] unit-test
+{ "foo: 1 bar: 2" } [ { 1 2 3 } "foo: %d bar: %s" vsprintf ] unit-test
+
os windows? [
[ "1.234000e+008" ] [ 123400000 "%e" sprintf ] unit-test
[ "-1.234000e+008" ] [ -123400000 "%e" sprintf ] unit-test
: sprintf ( format-string -- result )
[ printf ] with-string-writer ; inline
+: vprintf ( seq format-string -- )
+ parse-printf reverse! [
+ first dup string?
+ [ '[ _ write ] ] [ '[ unclip-slice @ write ] ] if
+ ] map concat call( x -- x ) drop ;
+
+: vsprintf ( seq format-string -- result )
+ [ vprintf ] with-string-writer ; inline
+
<PRIVATE
: pad-00 ( n -- string ) number>string 2 CHAR: 0 pad-head ; inline