mirror of https://github.com/status-im/NimYAML.git
Improved float parsing
* Fixed #30 * Accept underscores in float literals * Added test
This commit is contained in:
parent
52298298e5
commit
a51befe30d
|
@ -5,7 +5,7 @@
|
||||||
# distribution, for details about the copyright.
|
# distribution, for details about the copyright.
|
||||||
|
|
||||||
import "../yaml"
|
import "../yaml"
|
||||||
import unittest, strutils, streams, tables, times
|
import unittest, strutils, streams, tables, times, math
|
||||||
|
|
||||||
type
|
type
|
||||||
MyTuple = tuple
|
MyTuple = tuple
|
||||||
|
@ -197,6 +197,15 @@ suite "Serialization":
|
||||||
load(input, result)
|
load(input, result)
|
||||||
assert(result == 14)
|
assert(result == 14)
|
||||||
|
|
||||||
|
test "Load floats":
|
||||||
|
let input = "[6.8523015e+5, 685.230_15e+03, 685_230.15, -.inf, .NaN]"
|
||||||
|
var result: seq[float]
|
||||||
|
load(input, result)
|
||||||
|
for i in 0..2:
|
||||||
|
assert result[i] == 6.8523015e+5
|
||||||
|
assert result[3] == NegInf
|
||||||
|
assert classify(result[4]) == fcNan
|
||||||
|
|
||||||
test "Load nil string":
|
test "Load nil string":
|
||||||
let input = newStringStream("!<tag:nimyaml.org,2016:nil:string> \"\"")
|
let input = newStringStream("!<tag:nimyaml.org,2016:nil:string> \"\"")
|
||||||
var result: string
|
var result: string
|
||||||
|
|
|
@ -124,6 +124,9 @@ template advanceTypeHint(ch: char) {.dirty.} =
|
||||||
ythMonth1 => ythMonthMinusNoYmd
|
ythMonth1 => ythMonthMinusNoYmd
|
||||||
ythMonth2 => ythMonthMinus
|
ythMonth2 => ythMonthMinus
|
||||||
[ythFraction, ythSecond2] => ythAfterTimePlusMinus
|
[ythFraction, ythSecond2] => ythAfterTimePlusMinus
|
||||||
|
of '_':
|
||||||
|
[ythInt1, ythInt2, ythInt3, ythInt4] => ythInt
|
||||||
|
[ythInt, ythDecimal] => nil
|
||||||
of ':':
|
of ':':
|
||||||
[ythHour1, ythHour2] => ythHourColon
|
[ythHour1, ythHour2] => ythHourColon
|
||||||
ythMinute2 => ythMinuteColon
|
ythMinute2 => ythMinuteColon
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
## type. Please consult the serialization guide on the NimYAML website for more
|
## type. Please consult the serialization guide on the NimYAML website for more
|
||||||
## information.
|
## information.
|
||||||
|
|
||||||
import tables, typetraits, strutils, macros, streams, times
|
import tables, typetraits, strutils, macros, streams, times, parseutils
|
||||||
import parser, taglib, presenter, stream, ../private/internal, hints
|
import parser, taglib, presenter, stream, ../private/internal, hints
|
||||||
export stream
|
export stream
|
||||||
# *something* in here needs externally visible `==`(x,y: AnchorId),
|
# *something* in here needs externally visible `==`(x,y: AnchorId),
|
||||||
|
@ -138,7 +138,8 @@ template constructScalarItem*(s: var YamlStream, i: untyped,
|
||||||
except YamlConstructionError: raise
|
except YamlConstructionError: raise
|
||||||
except Exception:
|
except Exception:
|
||||||
var e = constructionError(s,
|
var e = constructionError(s,
|
||||||
"Cannot construct to " & name(t) & ": " & item.scalarContent)
|
"Cannot construct to " & name(t) & ": " & item.scalarContent &
|
||||||
|
"; error: " & getCurrentExceptionMsg())
|
||||||
e.parent = getCurrentException()
|
e.parent = getCurrentException()
|
||||||
raise e
|
raise e
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue