From 9b034651ae2c54cc4972febd7be176a952849495 Mon Sep 17 00:00:00 2001 From: KlausC Date: Wed, 18 Feb 2026 15:06:59 +0100 Subject: [PATCH] Fixes #131 --- Project.toml | 4 ++-- src/matrixmarket.jl | 6 +++++- test/common.jl | 6 ++++++ 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/Project.toml b/Project.toml index d8ef4f5..3f66f4b 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "MatrixDepot" uuid = "b51810bb-c9f3-55da-ae3c-350fc1fbce05" -version = "1.0.12" +version = "1.0.15" [deps] ChannelBuffers = "79a69506-cdd1-4876-b8e5-7af85e53af4f" @@ -16,7 +16,7 @@ SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" [compat] ChannelBuffers = "0.3.1, 0.4" DataFrames = "0.20, 0.22, 0.21, 1.1, 1.2, 1.3, 1.4, 1.5" -MAT = "0.7, 0.8, 0.9, 0.10" +MAT = "0.7, 0.8, 0.9, 0.10, 0.11" Scratch = "1" julia = "1" diff --git a/src/matrixmarket.jl b/src/matrixmarket.jl index 381bfe1..44434e7 100644 --- a/src/matrixmarket.jl +++ b/src/matrixmarket.jl @@ -438,14 +438,18 @@ function parsenext(T::Type{<:AbstractFloat}, v::Vector{UInt8}, p1::Int) daccu += 10^df * iaccu end f = if di <= 16 && daccu < UInt(1)<<53 - if 0 <= eaccu < 23 + if eaccu == 0 + T(daccu) + elseif 0 < eaccu < 23 T(daccu) * exp10(eaccu) elseif 0 < -eaccu < 23 T(daccu) / exp10(-eaccu) else + sig = 1 parse(T, String(view(v, p1:i-1))) end else + sig = 1 parse(T, String(view(v, p1:i-1))) end i, (sig < 0 ? -f : f) diff --git a/test/common.jl b/test/common.jl index 4bf416f..b3555f3 100644 --- a/test/common.jl +++ b/test/common.jl @@ -206,3 +206,9 @@ io = IOBuffer() @test length(mdlist(hasdata(:A & (:b | :x)))) == 2 end + +# issue 131 +@testset "parse($str)" for str in ("-0.0010831521544791237\n", "-0.00108e100\n") + c = MatrixDepot.getbytes(IOBuffer(str)) + @test MatrixDepot.parsenext(Float64, c, 1)[2] == parse(Float64, str) +end