// - sprintf module
test_true(stringp(sprintf("")))
test_true(sprintf("--real %1.20f --imaginary %1.20f --scale %1.20f\n",-0.9,-0.9,-0.9))
test_eq(sprintf("%d",1),"1")
test_eq(sprintf("%%"),"%")
test_eq(sprintf("%d",1),"1")
test_eq(sprintf("%d",-1),"-1")
test_eq(sprintf("%u",1<<31),"2147483648")
test_eq(sprintf("%o",255),"377")
test_eq(sprintf("%x",255),"ff")
test_eq(sprintf("%X",255),"FF")
test_eq(sprintf("%c",255),"\377")
test_eq(sprintf("%2c",65535),"\377\377")
test_eq(sprintf("%3c",0xffffff),"\377\377\377")
test_true(stringp(sprintf("%f",255.0)))
test_true(stringp(sprintf("%g",255.0)))
test_true(stringp(sprintf("%e",255.0)))
test_true(stringp(sprintf("%e",255.0)))
test_eq(sprintf("%s","foobaR"),"foobaR")
test_eq(sprintf("%s","foo\nbar"),"foo\nbar")
test_true(stringp(sprintf("%O",this_object())))
test_true(stringp(sprintf("%O",({}))))
test_eq(sprintf("%n"),"")
test_eq(sprintf("%t",1),"int")
test_eq(sprintf("%t",this_object()),"object")
test_eq(sprintf("%{%d\n%}",({1,2,3,4})),"1\n2\n3\n4\n")

test_eq(strlen(sprintf("%1000s","")),1000)
test_eq(sprintf("%2d",1)," 1")
test_eq(sprintf("%2d",1)," 1")
test_eq(sprintf("foo_%3d",1),"foo_  1")
test_eq(sprintf("%2d",2222),"2222")
test_eq(sprintf("%!2d",2222),"22")
test_eq(sprintf("%!!2d",2222),"2222")
test_eq(sprintf("% d",2)," 2")
test_eq(sprintf("% d",-2),"-2")
test_eq(sprintf("%+d",2),"+2")
test_eq(sprintf("%+d",-2),"-2")
test_eq(sprintf("%-2d",2),"2 ")
test_eq(sprintf("%|3d",2)," 2 ")
test_eq(sprintf("%-=3s","f o bar gaz"),"f o\nbar\ngaz")
dnl test_eq(sprintf("%/3s","f o bargaz"),"f o\nbar\ngaz")
test_true(stringp(sprintf("%3#s","f\no\nbargaz\nonk")))
test_true(stringp(sprintf("%3$s","f\no\nbargaz\nonk")))
test_eq(sprintf("%-$79s","foo\nbar\ngazonk"),"foo    bar    gazonk ")

test_eq(sprintf("%*d",3,3),"  3")
test_eq(sprintf("%'FOO'10s","BAR"),"FOOFOOFBAR")
test_eq(sprintf("%d %<d %<d",2),"2 2 2")
test_true(stringp(sprintf("%O",({1,2,"foo"}))))
test_true(stringp(sprintf("%O",([1:2,"foo":"bar"]))))
test_eq(strlen(sprintf("%@c",allocate(1000))),1000)

test_eq(sprintf("test \0 \n"),"test \0 \n")
test_eq(sprintf("test \0"),"test \0")
test_eq(sprintf("%~*n","f",5),"fffff")
test_eq(sprintf("%'\000'*n",5),"\000\000\000\000\000")

dnl . : and ; hasn't been tested
dnl ^, @ and _ hasn't been tested yet
test_eval_error(sprintf("%d"))

