mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
strconv: printf and string format utilities
This commit is contained in:
108
vlib/strconv/format_test.v
Normal file
108
vlib/strconv/format_test.v
Normal file
@ -0,0 +1,108 @@
|
||||
import os
|
||||
import strconv
|
||||
|
||||
fn test_format(){
|
||||
|
||||
if os.getenv('FORCE_FORMAT_TEST') != '1' {
|
||||
$if !macos {
|
||||
eprintln('This test is done only on macos for now.')
|
||||
eprintln('LibC sprintfs implementations on other platforms have too much variation in edge cases.')
|
||||
eprintln('If you still want to do it, use `FORCE_FORMAT_TEST=1 ./v -cg vlib/strconv/format_test.v`')
|
||||
exit(0)
|
||||
}
|
||||
}
|
||||
|
||||
mut buf := [1024]byte
|
||||
mut temp_s := ""
|
||||
a0 := u32(10)
|
||||
b0 := 200
|
||||
c0 := byte(12)
|
||||
s0 := "ciAo"
|
||||
ch0 := `B`
|
||||
|
||||
f0 := 0.312345
|
||||
f1 := 200000.0
|
||||
f2 := -1234.300e6
|
||||
f3 := 1234.300e-6
|
||||
|
||||
sc0 := "ciao: [%-08u] %d %hhd [%08s]\nr2: [%08X] [%p] [%-20.4f] [%-20.4f] [%c]\n"
|
||||
temp_s = strconv.v_sprintf(sc0 ,a0 ,b0 ,c0 ,s0 ,b0 ,&b0 ,f0, f1, ch0)
|
||||
C.sprintf(buf, sc0.str,a0 ,b0 ,c0 ,s0.str ,b0 ,&b0 ,f0, f1, ch0)
|
||||
|
||||
$if debug {
|
||||
eprintln('C sprintf:')
|
||||
eprintln( tos2(buf) )
|
||||
eprintln( tos2(buf).bytes().hex() )
|
||||
eprintln('V sprintf:')
|
||||
eprintln( temp_s )
|
||||
eprintln( temp_s.bytes().hex() )
|
||||
}
|
||||
|
||||
assert tos2(buf) == temp_s
|
||||
|
||||
a := byte(12)
|
||||
b := i16(13)
|
||||
c := 14
|
||||
d := i64(15)
|
||||
sc1 := "==>%hhd %hd %d %ld\n"
|
||||
temp_s = strconv.v_sprintf(sc1, a ,b ,c, d)
|
||||
C.sprintf(buf, sc1.str, a ,b ,c, d)
|
||||
//println("$temp_s${tos2(buf)}")
|
||||
assert tos2(buf) == temp_s
|
||||
|
||||
a1 := byte(0xff)
|
||||
b1 := i16(0xffff)
|
||||
c1 := u32(0xffff_ffff)
|
||||
d1 := u64(-1)
|
||||
sc2 := "%hhu %hu %u %lu\n"
|
||||
temp_s = strconv.v_sprintf(sc2, a1 ,b1 ,c1, d1)
|
||||
C.sprintf(buf, sc2.str, a1 ,b1 ,c1, d1)
|
||||
//println("$temp_s${tos2(buf)}")
|
||||
assert tos2(buf) == temp_s
|
||||
|
||||
|
||||
sc3 := "%hhx %hx %x %lx\n"
|
||||
temp_s = strconv.v_sprintf(sc3, a1 ,b1 ,c1, d1)
|
||||
C.sprintf(buf, sc3.str, a1 ,b1 ,c1, d1)
|
||||
//println("$temp_s${tos2(buf)}")
|
||||
assert tos2(buf) == temp_s
|
||||
|
||||
|
||||
sc4 := "[%-20.3e] [%20.3e] [%-020.3e] [%-020.3E] [%-020.3e] [%-020.3e]\n"
|
||||
temp_s = strconv.v_sprintf(sc4, f0, f1, f1, f1, f2, f3)
|
||||
C.sprintf(buf, sc4.str, f0, f1, f1, f1, f2, f3)
|
||||
//println("$temp_s${tos2(buf)}")
|
||||
assert tos2(buf) == temp_s
|
||||
|
||||
sc5 := "[%.3f] [%0.3f] [%0.3F] [%0.3f] [%0.3F]\n"
|
||||
temp_s = strconv.v_sprintf(sc5, f0, f1, f1, f2, f3, f3)
|
||||
C.sprintf(buf, sc5.str, f0, f1, f1, f2, f3, f3)
|
||||
//println("$temp_s${tos2(buf)}")
|
||||
assert tos2(buf) == temp_s
|
||||
|
||||
ml := 3
|
||||
sc6 := "%.*s [%05hhX]\n"
|
||||
temp_s = strconv.v_sprintf(sc6, ml, s0 , a)
|
||||
C.sprintf(buf, sc6.str, ml, s0.str, a)
|
||||
//println("$temp_s${tos2(buf)}")
|
||||
assert tos2(buf) == temp_s
|
||||
|
||||
a2 := 125
|
||||
sc7 := "[%9x] [%9X] [%-9x] [%-9X] [%09x] [%09X]\n"
|
||||
temp_s = strconv.v_sprintf(sc7, a2, a2, a2, a2, a2, a2)
|
||||
C.sprintf(buf, sc7.str, a2, a2, a2, a2, a2, a2)
|
||||
//println("$temp_s${tos2(buf)}")
|
||||
assert tos2(buf) == temp_s
|
||||
|
||||
mut ft := -1e-7
|
||||
mut x := 0
|
||||
sc8 := "[%20g][%20G]|"
|
||||
for x < 12 {
|
||||
temp_s = strconv.v_sprintf(sc8, ft, ft)
|
||||
C.sprintf(buf,sc8.str, ft, ft)
|
||||
//println("$temp_s ${tos2(buf)}")
|
||||
assert tos2(buf) == temp_s
|
||||
ft = ft * 10.0
|
||||
x++
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user