oj 3.10.3 → 3.10.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ext/oj/parse.c +13 -6
- data/lib/oj/version.rb +1 -1
- data/test/json_gem/json_common_interface_test.rb +2 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3c5237f8fde35d255bce0e58bbb8de4cd74e6e1f8ea563ce6413eeec4605ec46
|
4
|
+
data.tar.gz: 97eeb9614491ed377ad2336bda388e0d3eeac843d61d4afea44e80bcf9e7782b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7fd89f9ca4e2ef290e4096d3d486f118ab5cf93b3b54f14b0873561f0ec486ab700ac04e3556db6bd7a82f53e81d10f00eb7ecb524a012266018b9b080c89726
|
7
|
+
data.tar.gz: 0436f2949fc7881f194c6f781f489a9a47dbacb630390308fc1b48c2e047cbbc160338ab51f94998c9a08f39e996c9db27a4dd341d7870299de78d41f2d8a659
|
data/ext/oj/parse.c
CHANGED
@@ -795,13 +795,13 @@ oj_num_as_value(NumInfo ni) {
|
|
795
795
|
}
|
796
796
|
} else {
|
797
797
|
// All these machinations are to get rounding to work better.
|
798
|
-
long double
|
798
|
+
long double ld = (long double)ni->i * (long double)ni->div + (long double)ni->num;
|
799
799
|
int x = (int)((int64_t)ni->exp - ni->di);
|
800
800
|
|
801
801
|
// Rounding sometimes cuts off the last digit even if there are only
|
802
802
|
// 15 digits. This attempts to fix those few cases where this
|
803
803
|
// occurs.
|
804
|
-
if ((long double)INT64_MAX >
|
804
|
+
if ((long double)INT64_MAX > ld && (int64_t)ld != (ni->i * ni->div + ni->num)) {
|
805
805
|
volatile VALUE bd = rb_str_new(ni->str, ni->len);
|
806
806
|
|
807
807
|
rnum = rb_rescue2(parse_big_decimal, bd, rescue_big_decimal, bd, rb_eException, 0);
|
@@ -809,16 +809,23 @@ oj_num_as_value(NumInfo ni) {
|
|
809
809
|
rnum = rb_funcall(rnum, rb_intern("to_f"), 0);
|
810
810
|
}
|
811
811
|
} else {
|
812
|
-
d
|
812
|
+
double d;
|
813
|
+
|
814
|
+
ld = roundl(ld);
|
815
|
+
// You would expect that staying with a long double would be
|
816
|
+
// more accurate but it fails to match what Ruby generates so
|
817
|
+
// drop down to a double.
|
813
818
|
if (0 < x) {
|
814
|
-
d
|
819
|
+
d = (double)ld * pow(10.0, x);
|
815
820
|
} else if (0 > x) {
|
816
|
-
d
|
821
|
+
d = (double)ld / pow(10.0, -x);
|
822
|
+
} else {
|
823
|
+
d = (double)ld;
|
817
824
|
}
|
818
825
|
if (ni->neg) {
|
819
826
|
d = -d;
|
820
827
|
}
|
821
|
-
rnum = rb_float_new(
|
828
|
+
rnum = rb_float_new(d);
|
822
829
|
}
|
823
830
|
}
|
824
831
|
}
|
data/lib/oj/version.rb
CHANGED
@@ -15,7 +15,7 @@ class JSONCommonInterfaceTest < Test::Unit::TestCase
|
|
15
15
|
def setup
|
16
16
|
@hash = {
|
17
17
|
'a' => 2,
|
18
|
-
'b' =>
|
18
|
+
'b' => 5.23683071,
|
19
19
|
'c' => 'c',
|
20
20
|
'd' => [ 1, "b", 3.14 ],
|
21
21
|
'e' => { 'foo' => 'bar' },
|
@@ -23,7 +23,7 @@ class JSONCommonInterfaceTest < Test::Unit::TestCase
|
|
23
23
|
'h' => 1000.0,
|
24
24
|
'i' => 0.001
|
25
25
|
}
|
26
|
-
@json = '{"a":2,"b":
|
26
|
+
@json = '{"a":2,"b":5.23683071,"c":"c","d":[1,"b",3.14],"e":{"foo":"bar"},'\
|
27
27
|
'"g":"\\"\\u0000\\u001f","h":1000.0,"i":0.001}'
|
28
28
|
end
|
29
29
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oj
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.10.
|
4
|
+
version: 3.10.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Ohler
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-03-
|
11
|
+
date: 2020-03-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake-compiler
|