1754 lines
53 KiB
Julia
1754 lines
53 KiB
Julia
# This file is a part of Julia. License is MIT: https://julialang.org/license
|
|
|
|
using Base.Grisu
|
|
|
|
function trimrep(buffer)
|
|
len = length(unsafe_string(pointer(buffer)))
|
|
ind = len
|
|
for i = len:-1:1
|
|
buffer[i] != 0x30 && break
|
|
ind -= 1
|
|
end
|
|
buffer[ind+1] = 0
|
|
return unsafe_string(pointer(buffer))
|
|
end
|
|
|
|
const bufsize = 500
|
|
buffer = Array{UInt8}(bufsize)
|
|
fill!(buffer,0)
|
|
bignums = [Grisu.Bignums.Bignum(),Grisu.Bignums.Bignum(),Grisu.Bignums.Bignum(),Grisu.Bignums.Bignum()]
|
|
|
|
# Start by checking the byte-order.
|
|
ordered = 0x0123456789ABCDEF
|
|
@test 3512700564088504e-318 == reinterpret(Float64,ordered)
|
|
|
|
min_double64 = 0x0000000000000001
|
|
@test 5e-324 == reinterpret(Float64,min_double64)
|
|
|
|
max_double64 = 0x7fefffffffffffff
|
|
@test 1.7976931348623157e308 == reinterpret(Float64,max_double64)
|
|
|
|
# Start by checking the byte-order.
|
|
ordered = 0x01234567
|
|
@test Float32(2.9988165487136453e-38) == reinterpret(Float32,ordered)
|
|
|
|
min_float32 = 0x00000001
|
|
@test Float32(1.4e-45) == reinterpret(Float32,min_float32)
|
|
|
|
max_float32 = 0x7f7fffff
|
|
@test Float32(3.4028234e38) == reinterpret(Float32,max_float32)
|
|
|
|
ordered = 0x0123456789ABCDEF
|
|
diy_fp = Grisu.Float(reinterpret(Float64,ordered))
|
|
@test UInt64(0x12) - UInt64(0x3FF) - 52 == diy_fp.e % UInt64
|
|
# The 52 mantissa bits, plus the implicit 1 in bit 52 as a UINT64.
|
|
@test 0x0013456789ABCDEF== diy_fp.s
|
|
|
|
min_double64 = 0x0000000000000001
|
|
diy_fp = Grisu.Float(reinterpret(Float64,min_double64))
|
|
@test -UInt64(0x3FF) - Int64(52) + Int64(1) == diy_fp.e % UInt64
|
|
# This is a denormal so no hidden bit.
|
|
@test 1 == diy_fp.s
|
|
|
|
max_double64 = 0x7fefffffffffffff
|
|
diy_fp = Grisu.Float(reinterpret(Float64,max_double64))
|
|
@test 0x7FE - 0x3FF - 52 == diy_fp.e % UInt64
|
|
@test 0x001fffffffffffff== diy_fp.s
|
|
|
|
ordered = 0x01234567
|
|
diy_fp = Grisu.Float(reinterpret(Float32,ordered))
|
|
@test UInt64(0x2) - UInt64(0x7F) - 23 == diy_fp.e % UInt64
|
|
# The 23 mantissa bits, plus the implicit 1 in bit 24 as a uint32_t.
|
|
@test 0xA34567 == UInt64(diy_fp.s)
|
|
|
|
min_float32 = 0x00000001
|
|
diy_fp = Grisu.Float(reinterpret(Float32,min_float32))
|
|
@test -UInt64(0x7F) - 23 + 1 == diy_fp.e % UInt64
|
|
# This is a denormal so no hidden bit.
|
|
@test 1 == UInt64(diy_fp.s)
|
|
|
|
max_float32 = 0x7f7fffff
|
|
diy_fp = Grisu.Float(reinterpret(Float32,max_float32))
|
|
@test 0xFE - 0x7F - 23 == diy_fp.e % UInt64
|
|
@test 0x00ffffff == UInt64(diy_fp.s)
|
|
|
|
ordered = 0x0123456789ABCDEF
|
|
diy_fp = Grisu.normalize(Grisu.Float(reinterpret(Float64,ordered)))
|
|
@test UInt64(0x12) - UInt64(0x3FF) - 52 - 11 == diy_fp.e % UInt64
|
|
@test 0x0013456789ABCDEF<< 11 == diy_fp.s
|
|
|
|
min_double64 = 0x0000000000000001
|
|
diy_fp = Grisu.normalize(Grisu.Float(reinterpret(Float64,min_double64)))
|
|
@test -UInt64(0x3FF) - 52 + 1 - 63 == diy_fp.e % UInt64
|
|
# This is a denormal so no hidden bit.
|
|
@test 0x8000000000000000== diy_fp.s
|
|
|
|
max_double64 = 0x7fefffffffffffff
|
|
diy_fp = Grisu.normalize(Grisu.Float(reinterpret(Float64,max_double64)))
|
|
@test 0x7FE - 0x3FF - 52 - 11 == diy_fp.e % UInt64
|
|
@test (0x001fffffffffffff<< 11) == diy_fp.s
|
|
|
|
min_double64 = 0x0000000000000001
|
|
@test Grisu.isdenormal(reinterpret(Float64,min_double64))
|
|
float_bits = 0x000FFFFFFFFFFFFF
|
|
@test Grisu.isdenormal(reinterpret(Float64,float_bits))
|
|
float_bits = 0x0010000000000000
|
|
@test !Grisu.isdenormal(reinterpret(Float64,float_bits))
|
|
|
|
min_float32 = 0x00000001
|
|
@test Grisu.isdenormal(reinterpret(Float32,min_float32))
|
|
float_bits = 0x007FFFFF
|
|
@test Grisu.isdenormal(reinterpret(Float32,float_bits))
|
|
float_bits = 0x00800000
|
|
@test !Grisu.isdenormal(reinterpret(Float32,float_bits))
|
|
|
|
diy_fp = Grisu.normalize(Grisu.Float(1.5))
|
|
boundary_minus, boundary_plus = Grisu.normalizedbound(1.5)
|
|
@test diy_fp.e == boundary_minus.e
|
|
@test diy_fp.e == boundary_plus.e
|
|
# 1.5 does not have a significand of the form 2^p (for some p).
|
|
# Therefore its boundaries are at the same distance.
|
|
@test diy_fp.s - boundary_minus.s == boundary_plus.s - diy_fp.s
|
|
@test (1 << 10) == diy_fp.s - boundary_minus.s
|
|
|
|
diy_fp = Grisu.normalize(Grisu.Float(1.0))
|
|
boundary_minus, boundary_plus = Grisu.normalizedbound(1.0)
|
|
@test diy_fp.e == boundary_minus.e
|
|
@test diy_fp.e == boundary_plus.e
|
|
# 1.0 does have a significand of the form 2^p (for some p).
|
|
# Therefore its lower boundary is twice as close as the upper boundary.
|
|
@test boundary_plus.s - diy_fp.s > diy_fp.s - boundary_minus.s
|
|
@test (1 << 9) == diy_fp.s - boundary_minus.s
|
|
@test (1 << 10) == boundary_plus.s - diy_fp.s
|
|
|
|
min_double64 = 0x0000000000000001
|
|
diy_fp = Grisu.normalize(Grisu.Float(reinterpret(Float64,min_double64)))
|
|
boundary_minus, boundary_plus = Grisu.normalizedbound(reinterpret(Float64,min_double64))
|
|
@test diy_fp.e == boundary_minus.e
|
|
@test diy_fp.e == boundary_plus.e
|
|
# min-value does not have a significand of the form 2^p (for some p).
|
|
# Therefore its boundaries are at the same distance.
|
|
@test diy_fp.s - boundary_minus.s == boundary_plus.s - diy_fp.s
|
|
# Denormals have their boundaries much closer.
|
|
@test (UInt64(1) << 62) == diy_fp.s - boundary_minus.s
|
|
|
|
smallest_normal64 = 0x0010000000000000
|
|
diy_fp = Grisu.normalize(reinterpret(Float64,smallest_normal64))
|
|
boundary_minus, boundary_plus = Grisu.normalizedbound(reinterpret(Float64,smallest_normal64))
|
|
@test diy_fp.e == boundary_minus.e
|
|
@test diy_fp.e == boundary_plus.e
|
|
# Even though the significand is of the form 2^p (for some p), its boundaries
|
|
# are at the same distance. (This is the only exception).
|
|
@test diy_fp.s - boundary_minus.s == boundary_plus.s - diy_fp.s
|
|
@test (1 << 10) == diy_fp.s - boundary_minus.s
|
|
|
|
largest_denormal64 = 0x000FFFFFFFFFFFFF
|
|
diy_fp = Grisu.normalize(reinterpret(Float64,largest_denormal64))
|
|
boundary_minus, boundary_plus = Grisu.normalizedbound(reinterpret(Float64,largest_denormal64))
|
|
@test diy_fp.e == boundary_minus.e
|
|
@test diy_fp.e == boundary_plus.e
|
|
@test diy_fp.s - boundary_minus.s == boundary_plus.s - diy_fp.s
|
|
@test (1 << 11) == diy_fp.s - boundary_minus.s
|
|
|
|
max_double64 = 0x7fefffffffffffff
|
|
diy_fp = Grisu.normalize(reinterpret(Float64,max_double64))
|
|
boundary_minus, boundary_plus = Grisu.normalizedbound(reinterpret(Float64,max_double64))
|
|
@test diy_fp.e == boundary_minus.e
|
|
@test diy_fp.e == boundary_plus.e
|
|
# max-value does not have a significand of the form 2^p (for some p).
|
|
# Therefore its boundaries are at the same distance.
|
|
@test diy_fp.s - boundary_minus.s == boundary_plus.s - diy_fp.s
|
|
@test (1 << 10) == diy_fp.s - boundary_minus.s
|
|
|
|
kOne64 = UInt64(1)
|
|
diy_fp = Grisu.normalize(Grisu.Float(Float32(1.5)))
|
|
boundary_minus, boundary_plus = Grisu.normalizedbound(Float32(1.5))
|
|
@test diy_fp.e == boundary_minus.e
|
|
@test diy_fp.e == boundary_plus.e
|
|
# 1.5 does not have a significand of the form 2^p (for some p).
|
|
# Therefore its boundaries are at the same distance.
|
|
@test diy_fp.s - boundary_minus.s == boundary_plus.s - diy_fp.s
|
|
# Normalization shifts the significand by 8 bits. Add 32 bits for the bigger
|
|
# data-type, and remove 1 because boundaries are at half a ULP.
|
|
@test (kOne64 << 39) == diy_fp.s - boundary_minus.s
|
|
|
|
diy_fp = Grisu.normalize(Grisu.Float(Float32(1.0)))
|
|
boundary_minus, boundary_plus = Grisu.normalizedbound(Float32(1.0))
|
|
@test diy_fp.e == boundary_minus.e
|
|
@test diy_fp.e == boundary_plus.e
|
|
# 1.0 does have a significand of the form 2^p (for some p).
|
|
# Therefore its lower boundary is twice as close as the upper boundary.
|
|
@test boundary_plus.s - diy_fp.s > diy_fp.s - boundary_minus.s
|
|
@test (kOne64 << 38) == diy_fp.s - boundary_minus.s
|
|
@test (kOne64 << 39) == boundary_plus.s - diy_fp.s
|
|
|
|
min_float32 = 0x00000001
|
|
diy_fp = Grisu.normalize(Grisu.Float(reinterpret(Float32,min_float32)))
|
|
boundary_minus, boundary_plus = Grisu.normalizedbound(reinterpret(Float32,min_float32))
|
|
@test diy_fp.e == boundary_minus.e
|
|
@test diy_fp.e == boundary_plus.e
|
|
# min-value does not have a significand of the form 2^p (for some p).
|
|
# Therefore its boundaries are at the same distance.
|
|
@test diy_fp.s - boundary_minus.s == boundary_plus.s - diy_fp.s
|
|
# Denormals have their boundaries much closer.
|
|
@test (kOne64 << 62) == diy_fp.s - boundary_minus.s
|
|
|
|
smallest_normal32 = 0x00800000
|
|
diy_fp = Grisu.normalize(Grisu.Float(reinterpret(Float32,smallest_normal32)))
|
|
boundary_minus, boundary_plus = Grisu.normalizedbound(reinterpret(Float32,smallest_normal32))
|
|
@test diy_fp.e == boundary_minus.e
|
|
@test diy_fp.e == boundary_plus.e
|
|
# Even though the significand is of the form 2^p (for some p), its boundaries
|
|
# are at the same distance. (This is the only exception).
|
|
@test diy_fp.s - boundary_minus.s == boundary_plus.s - diy_fp.s
|
|
@test (kOne64 << 39) == diy_fp.s - boundary_minus.s
|
|
|
|
largest_denormal32 = 0x007FFFFF
|
|
diy_fp = Grisu.normalize(Grisu.Float(reinterpret(Float32,largest_denormal32)))
|
|
boundary_minus, boundary_plus = Grisu.normalizedbound(reinterpret(Float32,largest_denormal32))
|
|
@test diy_fp.e == boundary_minus.e
|
|
@test diy_fp.e == boundary_plus.e
|
|
@test diy_fp.s - boundary_minus.s == boundary_plus.s - diy_fp.s
|
|
@test (kOne64 << 40) == diy_fp.s - boundary_minus.s
|
|
|
|
max_float32 = 0x7f7fffff
|
|
diy_fp = Grisu.normalize(Grisu.Float(reinterpret(Float32,max_float32)))
|
|
boundary_minus, boundary_plus = Grisu.normalizedbound(reinterpret(Float32,max_float32))
|
|
@test diy_fp.e == boundary_minus.e
|
|
@test diy_fp.e == boundary_plus.e
|
|
# max-value does not have a significand of the form 2^p (for some p).
|
|
# Therefore its boundaries are at the same distance.
|
|
@test diy_fp.s - boundary_minus.s == boundary_plus.s - diy_fp.s
|
|
@test (kOne64 << 39) == diy_fp.s - boundary_minus.s
|
|
|
|
#fastshortest
|
|
min_double = 5e-324
|
|
status,len,point = Grisu.fastshortest(min_double, buffer)
|
|
@test status
|
|
@test "5" == trimrep(buffer)
|
|
@test -323 == point
|
|
fill!(buffer,0)
|
|
|
|
max_double = 1.7976931348623157e308
|
|
status,len,point = Grisu.fastshortest(max_double, buffer)
|
|
@test status
|
|
@test "17976931348623157" == trimrep(buffer)
|
|
@test 309 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastshortest(4294967272.0, buffer)
|
|
@test status
|
|
@test "4294967272" == trimrep(buffer)
|
|
@test 10 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastshortest(4.1855804968213567e298, buffer)
|
|
@test status
|
|
@test "4185580496821357" == trimrep(buffer)
|
|
@test 299 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastshortest(5.5626846462680035e-309, buffer)
|
|
@test status
|
|
@test "5562684646268003" == trimrep(buffer)
|
|
@test -308 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastshortest(2147483648.0, buffer)
|
|
@test status
|
|
@test "2147483648" == trimrep(buffer)
|
|
@test 10 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastshortest(3.5844466002796428e+298, buffer)
|
|
@test !status # Not all Grisu.fastshortest variants manage to compute this number.
|
|
if status
|
|
@test "35844466002796428" == trimrep(buffer)
|
|
@test 299 == point
|
|
fill!(buffer,0)
|
|
end
|
|
|
|
smallest_normal64 = 0x0010000000000000
|
|
v = reinterpret(Float64,smallest_normal64)
|
|
status,len,point = Grisu.fastshortest(v, buffer)
|
|
if status
|
|
@test "22250738585072014" == trimrep(buffer)
|
|
@test -307 == point
|
|
fill!(buffer,0)
|
|
end
|
|
|
|
largest_denormal64 = 0x000FFFFFFFFFFFFF
|
|
v = reinterpret(Float64,largest_denormal64)
|
|
status,len,point = Grisu.fastshortest(v, buffer)
|
|
if status
|
|
@test "2225073858507201" == trimrep(buffer)
|
|
@test -307 == point
|
|
fill!(buffer,0)
|
|
end
|
|
|
|
|
|
min_float = Float32(1e-45)
|
|
status,len,point = Grisu.fastshortest(min_float, buffer)
|
|
@test status
|
|
@test "1" == trimrep(buffer)
|
|
@test -44 == point
|
|
fill!(buffer,0)
|
|
|
|
max_float = 3.4028234f38 #Float32(3.4028234e38)
|
|
status,len,point = Grisu.fastshortest(max_float, buffer)
|
|
@test status
|
|
@test "34028235" == trimrep(buffer)
|
|
@test 39 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastshortest(Float32(4294967272.0), buffer)
|
|
@test status
|
|
@test "42949673" == trimrep(buffer)
|
|
@test 10 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastshortest(Float32(3.32306998946228968226e+35), buffer)
|
|
@test status
|
|
@test "332307" == trimrep(buffer)
|
|
@test 36 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastshortest(Float32(1.2341e-41), buffer)
|
|
@test status
|
|
@test "12341" == trimrep(buffer)
|
|
@test -40 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastshortest(Float32(3.3554432e7), buffer)
|
|
@test status
|
|
@test "33554432" == trimrep(buffer)
|
|
@test 8 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastshortest(Float32(3.26494756798464e14), buffer)
|
|
@test status
|
|
@test "32649476" == trimrep(buffer)
|
|
@test 15 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastshortest(Float32(3.91132223637771935344e37), buffer)
|
|
if status # Not all Grisu.fastshortest variants manage to compute this number.
|
|
@test "39113222" == trimrep(buffer)
|
|
@test 38 == point
|
|
fill!(buffer,0)
|
|
end
|
|
|
|
smallest_normal32 = 0x00800000
|
|
v = reinterpret(Float32,smallest_normal32)
|
|
status,len,point = Grisu.fastshortest(v, buffer)
|
|
if status
|
|
@test "11754944" == trimrep(buffer)
|
|
@test -37 == point
|
|
fill!(buffer,0)
|
|
end
|
|
|
|
largest_denormal32 = 0x007FFFFF
|
|
v = reinterpret(Float32,largest_denormal32)
|
|
status,len,point = Grisu.fastshortest(v, buffer)
|
|
@test status
|
|
@test "11754942" == trimrep(buffer)
|
|
@test -37 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastprecision(1.0, 3, buffer)
|
|
@test status
|
|
@test 3 >= len-1
|
|
@test "1" == trimrep(buffer)
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastprecision(1.5, 10, buffer)
|
|
if status
|
|
@test 10 >= len-1
|
|
@test "15" == trimrep(buffer)
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
end
|
|
|
|
min_double = 5e-324
|
|
status,len,point = Grisu.fastprecision(min_double, 5,buffer)
|
|
@test status
|
|
@test "49407" == trimrep(buffer)
|
|
@test -323 == point
|
|
fill!(buffer,0)
|
|
|
|
max_double = 1.7976931348623157e308
|
|
status,len,point = Grisu.fastprecision(max_double, 7,buffer)
|
|
@test status
|
|
@test "1797693" == trimrep(buffer)
|
|
@test 309 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastprecision(4294967272.0, 14,buffer)
|
|
if status
|
|
@test 14 >= len-1
|
|
@test "4294967272" == trimrep(buffer)
|
|
@test 10 == point
|
|
fill!(buffer,0)
|
|
end
|
|
|
|
status,len,point = Grisu.fastprecision(4.1855804968213567e298, 17,buffer)
|
|
@test status
|
|
@test "41855804968213567" == trimrep(buffer)
|
|
@test 299 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastprecision(5.5626846462680035e-309, 1,buffer)
|
|
@test status
|
|
@test "6" == trimrep(buffer)
|
|
@test -308 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastprecision(2147483648.0, 5,buffer)
|
|
@test status
|
|
@test "21475" == trimrep(buffer)
|
|
@test 10 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastprecision(3.5844466002796428e+298, 10,buffer)
|
|
@test status
|
|
@test 10 >= len-1
|
|
@test "35844466" == trimrep(buffer)
|
|
@test 299 == point
|
|
fill!(buffer,0)
|
|
|
|
smallest_normal64 = 0x0010000000000000
|
|
v = reinterpret(Float64,smallest_normal64)
|
|
status,len,point = Grisu.fastprecision(v, 17, buffer)
|
|
@test status
|
|
@test "22250738585072014" == trimrep(buffer)
|
|
@test -307 == point
|
|
fill!(buffer,0)
|
|
|
|
largest_denormal64 = 0x000FFFFFFFFFFFFF
|
|
v = reinterpret(Float64,largest_denormal64)
|
|
status,len,point = Grisu.fastprecision(v, 17, buffer)
|
|
@test status
|
|
@test 20 >= len-1
|
|
@test "22250738585072009" == trimrep(buffer)
|
|
@test -307 == point
|
|
fill!(buffer,0)
|
|
|
|
v = 3.3161339052167390562200598e-237
|
|
status,len,point = Grisu.fastprecision(v, 18, buffer)
|
|
@test status
|
|
@test "331613390521673906" == trimrep(buffer)
|
|
@test -236 == point
|
|
fill!(buffer,0)
|
|
|
|
v = 7.9885183916008099497815232e+191
|
|
status,len,point = Grisu.fastprecision(v, 4, buffer)
|
|
@test status
|
|
@test "7989" == trimrep(buffer)
|
|
@test 192 == point
|
|
fill!(buffer,0)
|
|
|
|
#fastfixedtoa
|
|
status,len,point = Grisu.fastfixedtoa(1.0, 0,1, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(1.0, 0,15, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(1.0, 0,0, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0xFFFFFFFF, 0,5, buffer)
|
|
@test "4294967295" == unsafe_string(pointer(buffer))
|
|
@test 10 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(4294967296.0, 0,5, buffer)
|
|
@test "4294967296" == unsafe_string(pointer(buffer)) #todo
|
|
@test 10 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(1e21, 0,5, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer)) #todo extra '0's
|
|
@test 22 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(999999999999999868928.00, 0,2, buffer)
|
|
@test "999999999999999868928" == unsafe_string(pointer(buffer)) #todo extra '0'
|
|
@test 21 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(6.9999999999999989514240000e+21, 0,5, buffer)
|
|
@test "6999999999999998951424" == unsafe_string(pointer(buffer)) #todo short several '9's
|
|
@test 22 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(1.5, 0,5, buffer)
|
|
@test "15" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(1.55, 0,5, buffer)
|
|
@test "155" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(1.55, 0,1, buffer)
|
|
@test "16" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(1.00000001, 0,15, buffer)
|
|
@test "100000001" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.1, 0,10, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test 0 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.01, 0,10, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.001, 0,10, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -2 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.0001, 0,10, buffer) #todo
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -3 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.00001, 0,10, buffer) #todo
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -4 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.000001, 0,10, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -5 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.0000001, 0,10, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -6 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.00000001, 0,10, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -7 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.000000001, 0,10, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -8 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.0000000001, 0,15, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -9 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.00000000001, 0,15, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -10 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.000000000001, 0,15, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -11 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.0000000000001, 0,15, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -12 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.00000000000001, 0,15, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -13 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.000000000000001, 0,20, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -14 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.0000000000000001, 0,20, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -15 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.00000000000000001, 0,20, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -16 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.000000000000000001, 0,20, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -17 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.0000000000000000001, 0,20, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -18 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.00000000000000000001, 0,20, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -19 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.10000000004, 0,10, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test 0 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.01000000004, 0,10, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.00100000004, 0,10, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -2 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.00010000004, 0,10, buffer) #todo
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -3 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.00001000004, 0,10, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -4 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.00000100004, 0,10, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -5 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.00000010004, 0,10, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -6 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.00000001004, 0,10, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -7 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.00000000104, 0,10, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -8 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.0000000001000004, 0,15, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -9 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.0000000000100004, 0,15, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -10 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.0000000000010004, 0,15, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -11 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.0000000000001004, 0,15, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -12 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.0000000000000104, 0,15, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -13 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.000000000000001000004, 0,20, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -14 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.000000000000000100004, 0,20, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -15 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.000000000000000010004, 0,20, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -16 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.000000000000000001004, 0,20, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -17 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.000000000000000000104, 0,20, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -18 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.000000000000000000014, 0,20, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -19 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.10000000006, 0,10, buffer)
|
|
@test "1000000001" == unsafe_string(pointer(buffer))
|
|
@test 0 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.01000000006, 0,10, buffer)
|
|
@test "100000001" == unsafe_string(pointer(buffer))
|
|
@test -1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.00100000006, 0,10, buffer)
|
|
@test "10000001" == unsafe_string(pointer(buffer))
|
|
@test -2 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.00010000006, 0,10, buffer)
|
|
@test "1000001" == unsafe_string(pointer(buffer))
|
|
@test -3 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.00001000006, 0,10, buffer)
|
|
@test "100001" == unsafe_string(pointer(buffer))
|
|
@test -4 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.00000100006, 0,10, buffer)
|
|
@test "10001" == unsafe_string(pointer(buffer))
|
|
@test -5 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.00000010006, 0,10, buffer)
|
|
@test "1001" == unsafe_string(pointer(buffer))
|
|
@test -6 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.00000001006, 0,10, buffer)
|
|
@test "101" == unsafe_string(pointer(buffer))
|
|
@test -7 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.00000000106, 0,10, buffer)
|
|
@test "11" == unsafe_string(pointer(buffer))
|
|
@test -8 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.0000000001000006, 0,15, buffer)
|
|
@test "100001" == unsafe_string(pointer(buffer))
|
|
@test -9 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.0000000000100006, 0,15, buffer)
|
|
@test "10001" == unsafe_string(pointer(buffer))
|
|
@test -10 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.0000000000010006, 0,15, buffer)
|
|
@test "1001" == unsafe_string(pointer(buffer))
|
|
@test -11 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.0000000000001006, 0,15, buffer)
|
|
@test "101" == unsafe_string(pointer(buffer))
|
|
@test -12 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.0000000000000106, 0,15, buffer)
|
|
@test "11" == unsafe_string(pointer(buffer))
|
|
@test -13 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.000000000000001000006, 0,20, buffer)
|
|
@test "100001" == unsafe_string(pointer(buffer))
|
|
@test -14 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.000000000000000100006, 0,20, buffer)
|
|
@test "10001" == unsafe_string(pointer(buffer))
|
|
@test -15 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.000000000000000010006, 0,20, buffer)
|
|
@test "1001" == unsafe_string(pointer(buffer))
|
|
@test -16 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.000000000000000001006, 0,20, buffer)
|
|
@test "101" == unsafe_string(pointer(buffer))
|
|
@test -17 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.000000000000000000106, 0,20, buffer)
|
|
@test "11" == unsafe_string(pointer(buffer))
|
|
@test -18 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.000000000000000000016, 0,20, buffer)
|
|
@test "2" == unsafe_string(pointer(buffer))
|
|
@test -19 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.6, 0,0, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.96, 0,1, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.996, 0,2, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.9996, 0,3, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.99996, 0,4, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.999996, 0,5, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.9999996, 0,6, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.99999996, 0,7, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.999999996, 0,8, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.9999999996, 0,9, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.99999999996, 0,10, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.999999999996, 0,11, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.9999999999996, 0,12, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.99999999999996, 0,13, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.999999999999996, 0,14, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.9999999999999996, 0,15, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.00999999999999996, 0,16, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.000999999999999996, 0,17, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -2 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.0000999999999999996, 0,18, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -3 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.00000999999999999996, 0,19, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -4 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.000000999999999999996, 0,20, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -5 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(323423.234234, 0,10, buffer)
|
|
@test "323423234234" == unsafe_string(pointer(buffer))
|
|
@test 6 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(12345678.901234, 0,4, buffer)
|
|
@test "123456789012" == unsafe_string(pointer(buffer))
|
|
@test 8 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(98765.432109, 0,5, buffer)
|
|
@test "9876543211" == unsafe_string(pointer(buffer))
|
|
@test 5 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(42, 0,20, buffer)
|
|
@test "42" == unsafe_string(pointer(buffer))
|
|
@test 2 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(0.5, 0,0, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(1e-23, 0,10, buffer)
|
|
@test "" == unsafe_string(pointer(buffer))
|
|
@test -10 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(1e-123, 0,2, buffer)
|
|
@test "" == unsafe_string(pointer(buffer))
|
|
@test -2 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(1e-123, 0,0, buffer)
|
|
@test "" == unsafe_string(pointer(buffer))
|
|
@test 0 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(1e-23, 0,20, buffer)
|
|
@test "" == unsafe_string(pointer(buffer))
|
|
@test -20 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(1e-21, 0,20, buffer)
|
|
@test "" == unsafe_string(pointer(buffer))
|
|
@test -20 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(1e-22, 0,20, buffer)
|
|
@test "" == unsafe_string(pointer(buffer))
|
|
@test -20 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(6e-21, 0,20, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -19 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(9.1193616301674545152000000e+19, 0,0,buffer)
|
|
@test "91193616301674545152" == unsafe_string(pointer(buffer))
|
|
@test 20 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(4.8184662102767651659096515e-04, 0,19,buffer)
|
|
@test "4818466210276765" == unsafe_string(pointer(buffer))
|
|
@test -3 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(1.9023164229540652612705182e-23, 0,8,buffer)
|
|
@test "" == unsafe_string(pointer(buffer))
|
|
@test -8 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(1000000000000000128.0, 0,0,buffer)
|
|
@test "1000000000000000128" == unsafe_string(pointer(buffer))
|
|
@test 19 == point
|
|
fill!(buffer,0)
|
|
|
|
#bignumdtoa
|
|
status,len,point = Grisu.bignumdtoa(1.0, Grisu.SHORTEST, 0, buffer,bignums)
|
|
@test "1" == trimrep(buffer)
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
map(x->Grisu.Bignums.zero!(x),bignums)
|
|
|
|
status,len,point = Grisu.bignumdtoa(1.0, Grisu.FIXED, 3, buffer,bignums)
|
|
@test 3 >= len - 1 - point
|
|
@test "1" == trimrep(buffer)
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
map(x->Grisu.Bignums.zero!(x),bignums)
|
|
|
|
status,len,point = Grisu.bignumdtoa(1.0, Grisu.PRECISION, 3, buffer,bignums)
|
|
@test 3 >= len - 1
|
|
@test "1" == trimrep(buffer)
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
map(x->Grisu.Bignums.zero!(x),bignums)
|
|
|
|
status,len,point = Grisu.bignumdtoa(1.5, Grisu.SHORTEST, 0, buffer,bignums)
|
|
@test "15" == trimrep(buffer)
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
map(x->Grisu.Bignums.zero!(x),bignums)
|
|
|
|
status,len,point = Grisu.bignumdtoa(1.5, Grisu.FIXED, 10, buffer,bignums)
|
|
@test 10 >= len - 1 - point
|
|
@test "15" == trimrep(buffer)
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
map(x->Grisu.Bignums.zero!(x),bignums)
|
|
|
|
status,len,point = Grisu.bignumdtoa(1.5, Grisu.PRECISION, 10, buffer,bignums)
|
|
@test 10 >= len - 1
|
|
@test "15" == trimrep(buffer)
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
map(x->Grisu.Bignums.zero!(x),bignums)
|
|
|
|
min_double = 5e-324
|
|
status,len,point = Grisu.bignumdtoa(min_double, Grisu.SHORTEST, 0, buffer,bignums)
|
|
@test "5" == trimrep(buffer)
|
|
@test -323 == point
|
|
fill!(buffer,0)
|
|
map(x->Grisu.Bignums.zero!(x),bignums)
|
|
|
|
status,len,point = Grisu.bignumdtoa(min_double, Grisu.FIXED, 5, buffer,bignums)
|
|
@test 5 >= len - 1 - point
|
|
@test "" == trimrep(buffer)
|
|
|
|
status,len,point = Grisu.bignumdtoa(min_double, Grisu.PRECISION, 5, buffer,bignums)
|
|
@test 5 >= len - 1
|
|
@test "49407" == trimrep(buffer)
|
|
@test -323 == point
|
|
fill!(buffer,0)
|
|
map(x->Grisu.Bignums.zero!(x),bignums)
|
|
|
|
max_double = 1.7976931348623157e308
|
|
status,len,point = Grisu.bignumdtoa(max_double, Grisu.SHORTEST, 0, buffer,bignums)
|
|
@test "17976931348623157" == trimrep(buffer)
|
|
@test 309 == point
|
|
fill!(buffer,0)
|
|
map(x->Grisu.Bignums.zero!(x),bignums)
|
|
|
|
status,len,point = Grisu.bignumdtoa(max_double, Grisu.PRECISION, 7, buffer,bignums)
|
|
@test 7 >= len - 1
|
|
@test "1797693" == trimrep(buffer)
|
|
@test 309 == point
|
|
fill!(buffer,0)
|
|
map(x->Grisu.Bignums.zero!(x),bignums)
|
|
|
|
status,len,point = Grisu.bignumdtoa(4294967272.0, Grisu.SHORTEST, 0, buffer,bignums)
|
|
@test "4294967272" == unsafe_string(pointer(buffer))
|
|
@test 10 == point
|
|
fill!(buffer,0)
|
|
map(x->Grisu.Bignums.zero!(x),bignums)
|
|
|
|
status,len,point = Grisu.bignumdtoa(4294967272.0, Grisu.FIXED, 5, buffer,bignums)
|
|
@test "429496727200000" == unsafe_string(pointer(buffer))
|
|
@test 10 == point
|
|
fill!(buffer,0)
|
|
map(x->Grisu.Bignums.zero!(x),bignums)
|
|
|
|
status,len,point = Grisu.bignumdtoa(4294967272.0, Grisu.PRECISION, 14, buffer,bignums)
|
|
@test 14 >= len - 1
|
|
@test "4294967272" == trimrep(buffer)
|
|
@test 10 == point
|
|
fill!(buffer,0)
|
|
map(x->Grisu.Bignums.zero!(x),bignums)
|
|
|
|
status,len,point = Grisu.bignumdtoa(4.1855804968213567e298, Grisu.SHORTEST, 0,buffer,bignums)
|
|
@test "4185580496821357" == trimrep(buffer)
|
|
@test 299 == point
|
|
fill!(buffer,0)
|
|
map(x->Grisu.Bignums.zero!(x),bignums)
|
|
|
|
status,len,point = Grisu.bignumdtoa(4.1855804968213567e298, Grisu.PRECISION, 20,buffer,bignums)
|
|
@test 20 >= len - 1
|
|
@test "41855804968213567225" == trimrep(buffer)
|
|
@test 299 == point
|
|
fill!(buffer,0)
|
|
map(x->Grisu.Bignums.zero!(x),bignums)
|
|
|
|
status,len,point = Grisu.bignumdtoa(5.5626846462680035e-309, Grisu.SHORTEST, 0, buffer,bignums)
|
|
@test "5562684646268003" == trimrep(buffer)
|
|
@test -308 == point
|
|
fill!(buffer,0)
|
|
map(x->Grisu.Bignums.zero!(x),bignums)
|
|
|
|
status,len,point = Grisu.bignumdtoa(5.5626846462680035e-309, Grisu.PRECISION, 1, buffer,bignums)
|
|
@test 1 >= len - 1
|
|
@test "6" == trimrep(buffer)
|
|
@test -308 == point
|
|
fill!(buffer,0)
|
|
map(x->Grisu.Bignums.zero!(x),bignums)
|
|
|
|
status,len,point = Grisu.bignumdtoa(2147483648.0, Grisu.SHORTEST, 0, buffer,bignums)
|
|
@test "2147483648" == trimrep(buffer)
|
|
@test 10 == point
|
|
fill!(buffer,0)
|
|
map(x->Grisu.Bignums.zero!(x),bignums)
|
|
|
|
status,len,point = Grisu.bignumdtoa(2147483648.0, Grisu.FIXED, 2, buffer,bignums)
|
|
@test 2 >= len - 1 - point
|
|
@test "2147483648" == trimrep(buffer)
|
|
@test 10 == point
|
|
fill!(buffer,0)
|
|
map(x->Grisu.Bignums.zero!(x),bignums)
|
|
|
|
status,len,point = Grisu.bignumdtoa(2147483648.0, Grisu.PRECISION, 5, buffer,bignums)
|
|
@test 5 >= len - 1
|
|
@test "21475" == trimrep(buffer)
|
|
@test 10 == point
|
|
fill!(buffer,0)
|
|
map(x->Grisu.Bignums.zero!(x),bignums)
|
|
|
|
status,len,point = Grisu.bignumdtoa(3.5844466002796428e+298, Grisu.SHORTEST, 0, buffer,bignums)
|
|
@test "35844466002796428" == trimrep(buffer)
|
|
@test 299 == point
|
|
fill!(buffer,0)
|
|
map(x->Grisu.Bignums.zero!(x),bignums)
|
|
|
|
status,len,point = Grisu.bignumdtoa(3.5844466002796428e+298, Grisu.PRECISION, 10, buffer,bignums)
|
|
@test 10 >= len - 1
|
|
@test "35844466" == trimrep(buffer)
|
|
@test 299 == point
|
|
fill!(buffer,0)
|
|
map(x->Grisu.Bignums.zero!(x),bignums)
|
|
|
|
v = reinterpret(Float64,0x0010000000000000)
|
|
status,len,point = Grisu.bignumdtoa(v, Grisu.SHORTEST, 0, buffer,bignums)
|
|
@test "22250738585072014" == trimrep(buffer)
|
|
@test -307 == point
|
|
fill!(buffer,0)
|
|
map(x->Grisu.Bignums.zero!(x),bignums)
|
|
|
|
status,len,point = Grisu.bignumdtoa(v, Grisu.PRECISION, 20, buffer,bignums)
|
|
@test 20 >= len - 1
|
|
@test "22250738585072013831" == trimrep(buffer)
|
|
@test -307 == point
|
|
fill!(buffer,0)
|
|
map(x->Grisu.Bignums.zero!(x),bignums)
|
|
|
|
v = reinterpret(Float64,0x000FFFFFFFFFFFFF)
|
|
status,len,point = Grisu.bignumdtoa(v, Grisu.SHORTEST, 0, buffer,bignums)
|
|
@test "2225073858507201" == trimrep(buffer)
|
|
@test -307 == point
|
|
fill!(buffer,0)
|
|
map(x->Grisu.Bignums.zero!(x),bignums)
|
|
|
|
status,len,point = Grisu.bignumdtoa(v, Grisu.PRECISION, 20, buffer,bignums)
|
|
@test 20 >= len - 1
|
|
@test "2225073858507200889" == trimrep(buffer)
|
|
@test -307 == point
|
|
fill!(buffer,0)
|
|
map(x->Grisu.Bignums.zero!(x),bignums)
|
|
|
|
status,len,point = Grisu.bignumdtoa(4128420500802942e-24, Grisu.SHORTEST, 0, buffer,bignums)
|
|
@test "4128420500802942" == trimrep(buffer)
|
|
@test -8 == point
|
|
fill!(buffer,0)
|
|
map(x->Grisu.Bignums.zero!(x),bignums)
|
|
|
|
v = 3.9292015898194142585311918e-10
|
|
status,len,point = Grisu.bignumdtoa(v, Grisu.SHORTEST, 0, buffer,bignums)
|
|
@test "39292015898194143" == trimrep(buffer)
|
|
|
|
v = 4194304.0
|
|
status,len,point = Grisu.bignumdtoa(v, Grisu.FIXED, 5, buffer,bignums)
|
|
@test 5 >= len - 1 - point
|
|
@test "4194304" == trimrep(buffer)
|
|
|
|
v = 3.3161339052167390562200598e-237
|
|
status,len,point = Grisu.bignumdtoa(v, Grisu.PRECISION, 19, buffer,bignums)
|
|
@test 19 >= len - 1
|
|
@test "3316133905216739056" == trimrep(buffer)
|
|
@test -236 == point
|
|
fill!(buffer,0)
|
|
map(x->Grisu.Bignums.zero!(x),bignums)
|
|
|
|
v = 7.9885183916008099497815232e+191
|
|
status,len,point = Grisu.bignumdtoa(v, Grisu.PRECISION, 4, buffer,bignums)
|
|
@test 4 >= len - 1
|
|
@test "7989" == trimrep(buffer)
|
|
@test 192 == point
|
|
fill!(buffer,0)
|
|
map(x->Grisu.Bignums.zero!(x),bignums)
|
|
|
|
v = 1.0000000000000012800000000e+17
|
|
status,len,point = Grisu.bignumdtoa(v, Grisu.FIXED, 1, buffer,bignums)
|
|
@test 1 >= len - 1 - point
|
|
@test "100000000000000128" == trimrep(buffer)
|
|
@test 18 == point
|
|
fill!(buffer,0)
|
|
map(x->Grisu.Bignums.zero!(x),bignums)
|
|
|
|
|
|
min_float = Float32(1e-45)
|
|
status,len,point = Grisu.bignumdtoa(min_float, Grisu.SHORTEST, 0, buffer,bignums)
|
|
@test "1" == trimrep(buffer)
|
|
@test -44 == point
|
|
fill!(buffer,0)
|
|
map(x->Grisu.Bignums.zero!(x),bignums)
|
|
|
|
max_float = Float32(3.4028234e38)
|
|
status,len,point = Grisu.bignumdtoa(max_float, Grisu.SHORTEST, 0, buffer,bignums)
|
|
@test "34028235" == trimrep(buffer)
|
|
@test 39 == point
|
|
fill!(buffer,0)
|
|
map(x->Grisu.Bignums.zero!(x),bignums)
|
|
|
|
status,len,point = Grisu.bignumdtoa(Float32(4294967272.0), Grisu.SHORTEST, 0, buffer,bignums)
|
|
@test "42949673" == trimrep(buffer)
|
|
@test 10 == point
|
|
fill!(buffer,0)
|
|
map(x->Grisu.Bignums.zero!(x),bignums)
|
|
|
|
status,len,point = Grisu.bignumdtoa(Float32(3.32306998946228968226e+35), Grisu.SHORTEST, 0, buffer,bignums)
|
|
@test "332307" == trimrep(buffer)
|
|
@test 36 == point
|
|
fill!(buffer,0)
|
|
map(x->Grisu.Bignums.zero!(x),bignums)
|
|
|
|
status,len,point = Grisu.bignumdtoa(Float32(1.2341e-41), Grisu.SHORTEST, 0, buffer,bignums)
|
|
@test "12341" == trimrep(buffer)
|
|
@test -40 == point
|
|
fill!(buffer,0)
|
|
map(x->Grisu.Bignums.zero!(x),bignums)
|
|
|
|
status,len,point = Grisu.bignumdtoa(Float32(3.3554432e7), Grisu.SHORTEST, 0, buffer,bignums)
|
|
@test "33554432" == trimrep(buffer)
|
|
@test 8 == point
|
|
fill!(buffer,0)
|
|
map(x->Grisu.Bignums.zero!(x),bignums)
|
|
|
|
status,len,point = Grisu.bignumdtoa(Float32(3.26494756798464e14), Grisu.SHORTEST, 0, buffer,bignums)
|
|
@test "32649476" == trimrep(buffer)
|
|
@test 15 == point
|
|
fill!(buffer,0)
|
|
map(x->Grisu.Bignums.zero!(x),bignums)
|
|
|
|
status,len,point = Grisu.bignumdtoa(Float32(3.91132223637771935344e37), Grisu.SHORTEST, 0, buffer,bignums)
|
|
@test "39113222" == trimrep(buffer)
|
|
@test 38 == point
|
|
fill!(buffer,0)
|
|
map(x->Grisu.Bignums.zero!(x),bignums)
|
|
|
|
v = reinterpret(Float32,0x00800000)
|
|
status,len,point = Grisu.bignumdtoa(v, Grisu.SHORTEST, 0, buffer,bignums)
|
|
@test "11754944" == trimrep(buffer)
|
|
@test -37 == point
|
|
fill!(buffer,0)
|
|
map(x->Grisu.Bignums.zero!(x),bignums)
|
|
|
|
v = reinterpret(Float32,0x007FFFFF)
|
|
status,len,point = Grisu.bignumdtoa(v, Grisu.SHORTEST, 0, buffer,bignums)
|
|
@test "11754942" == trimrep(buffer)
|
|
@test -37 == point
|
|
fill!(buffer,0)
|
|
map(x->Grisu.Bignums.zero!(x),bignums)
|
|
|
|
#Float16
|
|
min_double = realmin(Float16)
|
|
status,len,point = Grisu.fastshortest(min_double,buffer)
|
|
@test status
|
|
@test "6104" == trimrep(buffer)
|
|
@test -4 == point
|
|
fill!(buffer,0)
|
|
|
|
max_double = realmax(Float16)
|
|
status,len,point = Grisu.fastshortest(max_double,buffer)
|
|
@test status
|
|
@test "655" == trimrep(buffer)
|
|
@test 5 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastprecision(Float16(1.0), 3, buffer)
|
|
@test status
|
|
@test 3 >= len-1
|
|
@test "1" == trimrep(buffer)
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastprecision(Float16(1.5), 10, buffer)
|
|
if status
|
|
@test 10 >= len-1
|
|
@test "15" == trimrep(buffer)
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
end
|
|
|
|
status,len,point = Grisu.fastfixedtoa(Float16(1.0), 0,1, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(Float16(1.0), 0,15, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(Float16(1.0), 0,0, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(Float16(1.5), 0,5, buffer)
|
|
@test "15" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(Float16(1.55), 0,5, buffer)
|
|
@test "15498" == unsafe_string(pointer(buffer)) #todo
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(Float16(1.55), 0,1, buffer)
|
|
@test "15" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(Float16(1.00000001), 0,15, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(Float16(0.1), 0,10, buffer)
|
|
@test "999755859" == unsafe_string(pointer(buffer))
|
|
@test -1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(Float16(0.01), 0,10, buffer)
|
|
@test "100021362" == unsafe_string(pointer(buffer))
|
|
@test -1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(Float16(0.001), 0,10, buffer)
|
|
@test "10004044" == unsafe_string(pointer(buffer))
|
|
@test -2 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(Float16(0.0001), 0,10, buffer) #todo
|
|
@test "1000166" == unsafe_string(pointer(buffer))
|
|
@test -3 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(Float16(0.00001), 0,10, buffer) #todo
|
|
@test "100136" == unsafe_string(pointer(buffer))
|
|
@test -4 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(Float16(0.000001), 0,10, buffer)
|
|
@test "10133" == unsafe_string(pointer(buffer))
|
|
@test -5 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(Float16(0.0000001), 0,10, buffer)
|
|
@test "1192" == unsafe_string(pointer(buffer))
|
|
@test -6 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(Float16(0.6), 0,0, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(Float16(0.96), 0,1, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(Float16(0.996), 0,2, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(Float16(0.9996), 0,3, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(Float16(0.99996), 0,4, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(Float16(0.999996), 0,5, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(Float16(0.9999996), 0,6, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(Float16(0.99999996), 0,7, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(Float16(42), 0,20, buffer)
|
|
@test "42" == unsafe_string(pointer(buffer))
|
|
@test 2 == point
|
|
fill!(buffer,0)
|
|
|
|
status,len,point = Grisu.fastfixedtoa(Float16(0.5), 0,0, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
#dtoa
|
|
len,point,neg = Grisu.grisu(0.0, Grisu.SHORTEST, 0, buffer)
|
|
@test "0" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
len,point,neg = Grisu.grisu(Float32(0.0), Grisu.SHORTEST, 0, buffer)
|
|
@test "0" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
len,point,neg = Grisu.grisu(0.0, Grisu.FIXED, 2, buffer)
|
|
@test 1 >= len-1
|
|
@test "0" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
len,point,neg = Grisu.grisu(0.0, Grisu.PRECISION, 3, buffer)
|
|
@test 1 >= len-1
|
|
@test "0" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
len,point,neg = Grisu.grisu(1.0, Grisu.SHORTEST, 0, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
len,point,neg = Grisu.grisu(Float32(1.0), Grisu.SHORTEST, 0, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
len,point,neg = Grisu.grisu(1.0, Grisu.FIXED, 3, buffer)
|
|
@test 3 >= len-1-point
|
|
@test "1" == trimrep(buffer)
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
len,point,neg = Grisu.grisu(1.0, Grisu.PRECISION, 3, buffer)
|
|
@test 3 >= len-1
|
|
@test "1" == trimrep(buffer)
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
len,point,neg = Grisu.grisu(1.5, Grisu.SHORTEST, 0, buffer)
|
|
@test "15" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
len,point,neg = Grisu.grisu(Float32(1.5), Grisu.SHORTEST, 0, buffer)
|
|
@test "15" == unsafe_string(pointer(buffer))
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
len,point,neg = Grisu.grisu(1.5, Grisu.FIXED, 10, buffer)
|
|
@test 10 >= len-1-point
|
|
@test "15" == trimrep(buffer)
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
len,point,neg = Grisu.grisu(1.5, Grisu.PRECISION, 10, buffer)
|
|
@test 10 >= len-1
|
|
@test "15" == trimrep(buffer)
|
|
@test 1 == point
|
|
fill!(buffer,0)
|
|
|
|
min_double = 5e-324
|
|
len,point,neg = Grisu.grisu(min_double, Grisu.SHORTEST, 0, buffer)
|
|
@test "5" == unsafe_string(pointer(buffer))
|
|
@test -323 == point
|
|
fill!(buffer,0)
|
|
|
|
min_float = 1e-45
|
|
len,point,neg = Grisu.grisu(Float32(min_float), Grisu.SHORTEST, 0, buffer)
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test -44 == point
|
|
fill!(buffer,0)
|
|
|
|
len,point,neg = Grisu.grisu(min_double, Grisu.FIXED, 5, buffer)
|
|
@test 5 >= len-1-point
|
|
@test "" == trimrep(buffer)
|
|
@test -5 == point
|
|
fill!(buffer,0)
|
|
|
|
len,point,neg = Grisu.grisu(min_double, Grisu.PRECISION, 5, buffer)
|
|
@test 5 >= len-1
|
|
@test "49407" == trimrep(buffer)
|
|
@test -323 == point
|
|
fill!(buffer,0)
|
|
|
|
max_double = 1.7976931348623157e308
|
|
len,point,neg = Grisu.grisu(max_double, Grisu.SHORTEST, 0, buffer)
|
|
@test "17976931348623157" == unsafe_string(pointer(buffer))
|
|
@test 309 == point
|
|
fill!(buffer,0)
|
|
|
|
max_float = 3.4028234e38
|
|
len,point,neg = Grisu.grisu(Float32(max_float), Grisu.SHORTEST, 0, buffer)
|
|
@test "34028235" == unsafe_string(pointer(buffer))
|
|
@test 39 == point
|
|
fill!(buffer,0)
|
|
|
|
len,point,neg = Grisu.grisu(max_double, Grisu.PRECISION, 7, buffer)
|
|
@test 7 >= len-1
|
|
@test "1797693" == trimrep(buffer)
|
|
@test 309 == point
|
|
fill!(buffer,0)
|
|
|
|
len,point,neg = Grisu.grisu(4294967272.0, Grisu.SHORTEST, 0, buffer)
|
|
@test "4294967272" == unsafe_string(pointer(buffer))
|
|
@test 10 == point
|
|
fill!(buffer,0)
|
|
|
|
len,point,neg = Grisu.grisu(Float32(4294967272.0), Grisu.SHORTEST, 0, buffer)
|
|
@test "42949673" == unsafe_string(pointer(buffer))
|
|
@test 10 == point
|
|
fill!(buffer,0)
|
|
|
|
len,point,neg = Grisu.grisu(4294967272.0, Grisu.FIXED, 5, buffer)
|
|
@test 5 >= len-1-point
|
|
@test "4294967272" == trimrep(buffer)
|
|
@test 10 == point
|
|
fill!(buffer,0)
|
|
|
|
len,point,neg = Grisu.grisu(4294967272.0, Grisu.PRECISION, 14, buffer)
|
|
@test 14 >= len-1
|
|
@test "4294967272" == trimrep(buffer)
|
|
@test 10 == point
|
|
fill!(buffer,0)
|
|
|
|
len,point,neg = Grisu.grisu(4.1855804968213567e298, Grisu.SHORTEST, 0, buffer)
|
|
@test "4185580496821357" == unsafe_string(pointer(buffer))
|
|
@test 299 == point
|
|
fill!(buffer,0)
|
|
|
|
len,point,neg = Grisu.grisu(4.1855804968213567e298, Grisu.PRECISION, 20, buffer)
|
|
@test 20 >= len-1
|
|
@test "41855804968213567225" == trimrep(buffer)
|
|
@test 299 == point
|
|
fill!(buffer,0)
|
|
|
|
len,point,neg = Grisu.grisu(5.5626846462680035e-309, Grisu.SHORTEST, 0, buffer)
|
|
@test "5562684646268003" == unsafe_string(pointer(buffer))
|
|
@test -308 == point
|
|
fill!(buffer,0)
|
|
|
|
len,point,neg = Grisu.grisu(5.5626846462680035e-309, Grisu.PRECISION, 1, buffer)
|
|
@test 1 >= len-1
|
|
@test "6" == trimrep(buffer)
|
|
@test -308 == point
|
|
fill!(buffer,0)
|
|
|
|
len,point,neg = Grisu.grisu(-2147483648.0, Grisu.SHORTEST, 0, buffer)
|
|
@test 1 == neg
|
|
@test "2147483648" == unsafe_string(pointer(buffer))
|
|
@test 10 == point
|
|
fill!(buffer,0)
|
|
|
|
len,point,neg = Grisu.grisu(Float32(-2147483648.), Grisu.SHORTEST, 0, buffer)
|
|
@test 1 == neg
|
|
@test "21474836" == unsafe_string(pointer(buffer))
|
|
@test 10 == point
|
|
fill!(buffer,0)
|
|
|
|
|
|
len,point,neg = Grisu.grisu(-2147483648.0, Grisu.FIXED, 2, buffer)
|
|
@test 2 >= len-1-point
|
|
@test "2147483648" == trimrep(buffer)
|
|
@test 10 == point
|
|
fill!(buffer,0)
|
|
|
|
len,point,neg = Grisu.grisu(-2147483648.0, Grisu.PRECISION, 5, buffer)
|
|
@test 5 >= len-1
|
|
@test "21475" == trimrep(buffer)
|
|
@test 10 == point
|
|
fill!(buffer,0)
|
|
|
|
len,point,neg = Grisu.grisu(-3.5844466002796428e+298, Grisu.SHORTEST, 0, buffer)
|
|
@test 1 == neg
|
|
@test "35844466002796428" == unsafe_string(pointer(buffer))
|
|
@test 299 == point
|
|
fill!(buffer,0)
|
|
|
|
len,point,neg = Grisu.grisu(-3.5844466002796428e+298, Grisu.PRECISION, 10, buffer)
|
|
@test 1 == neg
|
|
@test 10 >= len-1
|
|
@test "35844466" == trimrep(buffer)
|
|
@test 299 == point
|
|
fill!(buffer,0)
|
|
|
|
v = reinterpret(Float64,0x0010000000000000)
|
|
len,point,neg = Grisu.grisu(v, Grisu.SHORTEST, 0, buffer)
|
|
@test "22250738585072014" == unsafe_string(pointer(buffer))
|
|
@test -307 == point
|
|
fill!(buffer,0)
|
|
|
|
f = reinterpret(Float32,0x00800000)
|
|
len,point,neg = Grisu.grisu(f, Grisu.SHORTEST, 0, buffer)
|
|
@test "11754944" == unsafe_string(pointer(buffer))
|
|
@test -37 == point
|
|
fill!(buffer,0)
|
|
|
|
len,point,neg = Grisu.grisu(v, Grisu.PRECISION, 20, buffer)
|
|
@test 20 >= len-1
|
|
@test "22250738585072013831" == trimrep(buffer)
|
|
@test -307 == point
|
|
fill!(buffer,0)
|
|
|
|
v = reinterpret(Float64,0x000FFFFFFFFFFFFF)
|
|
len,point,neg = Grisu.grisu(v, Grisu.SHORTEST, 0, buffer)
|
|
@test "2225073858507201" == unsafe_string(pointer(buffer))
|
|
@test -307 == point
|
|
fill!(buffer,0)
|
|
|
|
f = reinterpret(Float32,0x007FFFFF)
|
|
len,point,neg = Grisu.grisu(f, Grisu.SHORTEST, 0, buffer)
|
|
@test "11754942" == unsafe_string(pointer(buffer))
|
|
@test -37 == point
|
|
fill!(buffer,0)
|
|
|
|
len,point,neg = Grisu.grisu(v, Grisu.PRECISION, 20, buffer)
|
|
@test 20 >= len-1
|
|
@test "2225073858507200889" == trimrep(buffer)
|
|
@test -307 == point
|
|
fill!(buffer,0)
|
|
|
|
len,point,neg = Grisu.grisu(4128420500802942e-24, Grisu.SHORTEST, 0, buffer)
|
|
@test 0 == neg
|
|
@test "4128420500802942" == unsafe_string(pointer(buffer))
|
|
@test -8 == point
|
|
fill!(buffer,0)
|
|
|
|
v = -3.9292015898194142585311918e-10
|
|
len,point,neg = Grisu.grisu(v, Grisu.SHORTEST, 0, buffer)
|
|
@test "39292015898194143" == unsafe_string(pointer(buffer))
|
|
fill!(buffer,0)
|
|
|
|
f = Float32(-3.9292015898194142585311918e-10)
|
|
len,point,neg = Grisu.grisu(f, Grisu.SHORTEST, 0, buffer)
|
|
@test "39292017" == unsafe_string(pointer(buffer))
|
|
fill!(buffer,0)
|
|
|
|
v = 4194304.0
|
|
len,point,neg = Grisu.grisu(v, Grisu.FIXED, 5, buffer)
|
|
@test 5 >= len-1-point
|
|
@test "4194304" == trimrep(buffer)
|
|
fill!(buffer,0)
|
|
|
|
v = 3.3161339052167390562200598e-237
|
|
len,point,neg = Grisu.grisu(v, Grisu.PRECISION, 19, buffer)
|
|
@test 19 >= len-1
|
|
@test "3316133905216739056" == trimrep(buffer)
|
|
@test -236 == point
|
|
fill!(buffer,0)
|
|
|
|
len,point,neg = Grisu.grisu(0.0, Grisu.SHORTEST, 0, buffer)
|
|
@test !neg
|
|
|
|
len,point,neg = Grisu.grisu(-0.0, Grisu.SHORTEST, 0, buffer)
|
|
@test neg
|
|
|
|
len,point,neg = Grisu.grisu(1.0, Grisu.SHORTEST, 0, buffer)
|
|
@test !neg
|
|
|
|
len,point,neg = Grisu.grisu(-1.0, Grisu.SHORTEST, 0, buffer)
|
|
@test neg
|
|
|
|
len,point,neg = Grisu.grisu(Float32(0.0), Grisu.SHORTEST, 0, buffer)
|
|
@test !neg
|
|
|
|
len,point,neg = Grisu.grisu(-Float32(0.0), Grisu.SHORTEST, 0, buffer)
|
|
@test neg
|
|
|
|
len,point,neg = Grisu.grisu(Float32(1.0), Grisu.SHORTEST, 0, buffer)
|
|
@test !neg
|
|
|
|
len,point,neg = Grisu.grisu(-Float32(1.0), Grisu.SHORTEST, 0, buffer)
|
|
@test neg
|
|
|
|
len,point,neg = Grisu.grisu(0.0, Grisu.PRECISION, 1, buffer)
|
|
@test !neg
|
|
|
|
len,point,neg = Grisu.grisu(-0.0, Grisu.PRECISION, 1, buffer)
|
|
@test neg
|
|
|
|
len,point,neg = Grisu.grisu(1.0, Grisu.PRECISION, 1, buffer)
|
|
@test !neg
|
|
|
|
len,point,neg = Grisu.grisu(-1.0, Grisu.PRECISION, 1, buffer)
|
|
@test neg
|
|
|
|
len,point,neg = Grisu.grisu(0.0, Grisu.FIXED, 1, buffer)
|
|
@test !neg
|
|
|
|
len,point,neg = Grisu.grisu(-0.0, Grisu.FIXED, 1, buffer)
|
|
@test neg
|
|
|
|
len,point,neg = Grisu.grisu(1.0, Grisu.FIXED, 1, buffer)
|
|
@test !neg
|
|
|
|
len,point,neg = Grisu.grisu(-1.0, Grisu.FIXED, 1, buffer)
|
|
@test neg
|
|
|
|
|
|
len,point,neg = Grisu.grisu(0.0, Grisu.PRECISION, 0, buffer)
|
|
@test 0 >= len-1
|
|
@test "" == unsafe_string(pointer(buffer))
|
|
@test !neg
|
|
|
|
len,point,neg = Grisu.grisu(1.0, Grisu.PRECISION, 0, buffer)
|
|
@test 0 >= len-1
|
|
@test "" == unsafe_string(pointer(buffer))
|
|
@test !neg
|
|
|
|
len,point,neg = Grisu.grisu(0.0, Grisu.FIXED, 0, buffer)
|
|
@test 1 >= len-1
|
|
@test "0" == unsafe_string(pointer(buffer))
|
|
@test !neg
|
|
|
|
len,point,neg = Grisu.grisu(1.0, Grisu.FIXED, 0, buffer)
|
|
@test 1 >= len-1
|
|
@test "1" == unsafe_string(pointer(buffer))
|
|
@test !neg
|